Secara terprogram menambahkan gambar ke perpustakaan media dengan wp_generate_attachment_metadata gagal secara acak

8

Saya menjalankan versi WordPress terbaru (4.6) pada server LAMP (shared hosting) dengan PHP versi 5.6.12.

Saya mencoba secara terprogram menambahkan 10 gambar , diunggah dengan ftp ke wp-uploadsdirektori, ke perpustakaan media menggunakan tiga fungsi WordPress wp_insert_attachment, wp_generate_attachment_metadatadan wp_update_attachment_metadata.

Masalahku:

Terkadang, skrip PHP saya berfungsi (semua 10 gambar ditambahkan ke perpustakaan media dengan benar) - dan terkadang tidak (dari 10 gambar, hanya 4, 5, 6 atau lebih yang ditambahkan)! Setiap gambar berukuran 2M - 4M.

Apa yang telah saya lakukan sejauh ini:

Saya mengaktifkan error_logging melalui php.ini dan menemukan bahwa sesekali wp_generate_attachment_metadatagagal (yaitu saat menangani gambar 5, 6, 7 atau lebih) dan seluruh skrip PHP saya berakhir. Saya tidak mendapatkan informasi lebih dari error_log () selain itu. Karena saya mencurigai masalah memori, saya meningkatkan ukuran memori untuk php menjadi 120M (penyedia hosting saya memberi saya 128 juta) dan eksekusi skrip menjadi 100-an (penyedia hosting saya memberi saya 120-an). Semua file ada (tentu saja), semuanya PNG - dan, seperti yang saya katakan, menggunakan set 10 gambar yang sama untuk pengujian, kadang-kadang berfungsi dan kadang tidak berfungsi ...

Pertanyaan saya:

  • Apakah ada masalah dengan wp_generate_attachment_metadataWP 4.6? Semuanya digunakan dengan baik sampai saya memutakhirkan situs saya dari WP 4.3 ke 4.6 ...

  • Jika tidak cukup memori yang menyebabkan masalah, bagaimana saya bisa mengoptimalkan skrip PHP saya untuk menangani batas memori 128 juta yang diberikan oleh web hoster saya?

  • Bagaimana saya mencari tahu jika kekurangan memori menyebabkan skrip PHP saya berhenti?

Terima kasih sebelumnya!

Ini kode saya:

$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);
}
Sebastian
sumber

Jawaban:

12

Saya telah memeriksa kode Anda, dan saya pikir Anda kehilangan petunjuk gambar. Silakan lihat kode di bawah ini:


$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 );
}

Untuk detail, lihat fungsi wp_insert_attachment .

Syed Fakhar Abbas
sumber
Terima kasih telah menunjukkan yang hilang guidkepada saya. Saya akan menambahkannya ke kode saya, coba lagi dan beri tahu Anda jika itu menyelesaikan masalah.
Sebastian
1
Hm, sepertinya yang hilang guidmenyebabkan masalah. Dengan panduan yang ditambahkan sekarang berfungsi 100%. Sedangkan dengan petunjuk yang hilang, kadang-kadang itu berhasil, kadang-kadang tidak - aneh :-) TERIMA KASIH LAGI ashikra
Sebastian
Selamat datang di @Sebastian :)
Syed Fakhar Abbas