wp_generate_attachment_metadataを使用してメディアライブラリにプログラムで画像を追加すると、ランダムに失敗する


8

PHPバージョン5.6.12のLAMPサーバー(共有ホスティング)で最新のWordPressバージョン(4.6)を実行しています。

私がしようとしているプログラムで10枚の画像を追加するFTPでアップロード、wp-uploadsディレクトリを、メディアライブラリに 3つのWordPressの機能を使用してwp_insert_attachmentwp_generate_attachment_metadatawp_update_attachment_metadata

私の問題:

PHPスクリプトが動作する場合があります(10個の画像すべてがメディアライブラリに正しく追加されます)。各画像のサイズは2M〜4Mです。

これまでに行ったこと:

php.iniでerror_loggingを有効にすると、たまにwp_generate_attachment_metadata失敗する(つまり、5番目、6番目、7番目のイメージの処理中に)失敗し、PHPスクリプト全体が終了することがわかりました。それ以外は、error_log()からこれ以上情報を取得しません。メモリの問題が疑われたため、phpのメモリサイズを120M(私のホスティングプロバイダーから128Mに)に増やし、スクリプトの実行を100に(私のホスティングプロバイダーから120sに)しました。すべてのファイルが(もちろん)存在し、それらはすべてPNGです。そして、前述のように、テスト用に同じ10個の画像のセットを使用すると、動作する場合と動作しない場合があります...

私の質問:

  • wp_generate_attachment_metadataWP 4.6に既知の問題がありますか?私のサイトをWP 4.3から4.6にアップグレードするまで、すべてが正常に機能していました...

  • 十分なメモリが問題の原因である場合、Webホスティング業者から与えられた128Mのメモリ制限を処理するようにPHPスクリプトを最適化するにはどうすればよいですか?

  • メモリ不足が原因でPHPスクリプトが終了するかどうかを確認するにはどうすればよいですか?

前もって感謝します!

これが私のコードです:

$post_id = 1234;
$images = array('filename1.png', 'filename2.png', ... 'filename10.png');

for($i = 0; $i < 10; $i++) {
  $attachment = array(
    'post_mime_type' => 'image/png',
    'post_title' => 'my description',
    'post_content' => 'my description',
    'post_status' => 'inherit'
  );
  $image_id = wp_insert_attachment($attachment, $images[$i], $post_id);
  $image_data = wp_generate_attachment_metadata($image_id, $images[$i]);
  wp_update_attachment_metadata($image_id, $image_data);
}

回答:


12

私はあなたのコードをチェックしました、そしてあなたは画像のガイドを逃していると思います。以下のコードをご覧ください。


$post_id = 1234;
$images = array('filename1.png', 'filename2.png', ... 'filename10.png');

// Get the path to the upload directory.
$wp_upload_dir = wp_upload_dir();

foreach($images as $name) {
    $attachment = array(
        'guid'=> $wp_upload_dir['url'] . '/' . basename( $name ), 
        'post_mime_type' => 'image/png',
        'post_title' => 'my description',
        'post_content' => 'my description',
        'post_status' => 'inherit'
         );
$image_id = wp_insert_attachment($attachment, $name, $post_id);
// Make sure that this file is included, as wp_generate_attachment_metadata() depends on it. require_once( ABSPATH . 'wp-admin/includes/image.php' );
// Generate the metadata for the attachment, and update the database record. $attach_data = wp_generate_attachment_metadata( $image_id, $name );
wp_update_attachment_metadata( $image_id, $attach_data );
}

詳細については、wp_insert_attachment関数を参照してください


行方不明guidを指摘してくれてありがとう。これをコードに追加して、もう一度試して、問題が解決するかどうかをお知らせします。
セバスチャン

1
うーん、行方不明guidが問題を引き起こしたようです。GUIDを追加すると、100%動作します。一方、guidが欠落していると機能する場合と機能しない場合がある-奇妙:-)ありがとうアシクラ
セバスチャン

ようこそ@Sebastian :)
Syed Fakhar Abbas 2016
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.