La adición de imágenes mediante programación a la biblioteca de medios con wp_generate_attachment_metadata falla aleatoriamente

8

Estoy ejecutando la última versión de WordPress (4.6) en un servidor LAMP (alojamiento compartido) con PHP versión 5.6.12.

Estoy tratando de agregar mediante programación 10 imágenes , cargadas con ftp al wp-uploadsdirectorio, a la biblioteca de medios usando las tres funciones de WordPress wp_insert_attachment, wp_generate_attachment_metadatay wp_update_attachment_metadata.

Mi problema:

A veces, mi script PHP funciona (las 10 imágenes se agregan correctamente a la biblioteca de medios), y a veces no (de las 10 imágenes, solo se agregan 4, 5, 6 o más). Cada imagen tiene un tamaño de 2M a 4M.

Lo que he hecho hasta ahora:

Habilité error_logging a través de php.ini y descubrí que de vez en cuando wp_generate_attachment_metadatafalla (es decir, al manejar la 5ta, 6ta, 7ma o más imágenes) y mi script PHP completo termina. No obtengo más información de error_log () aparte de eso. Como sospeché problemas de memoria, aumenté el tamaño de la memoria para php a 120M (mis proveedores de hosting me dan 128M) y la ejecución de script a 100s (mi proveedor de hosting me da 120s). Todos los archivos existen (por supuesto), son todos PNG y, como dije, usando el mismo conjunto de 10 imágenes para probar, a veces funciona y a veces no funciona ...

Mi pregunta:

  • ¿Hay algún problema conocido con wp_generate_attachment_metadataWP 4.6? Todo solía funcionar bien hasta que actualicé mi sitio de WP 4.3 a 4.6 ...

  • Si el problema no es suficiente memoria, ¿cómo podría optimizar mi script PHP para manejar el límite de memoria de 128M dado por mi proveedor de alojamiento web?

  • ¿Cómo puedo saber si la falta de memoria hace que mi script PHP termine?

¡Gracias por adelantado!

Aquí está mi código:

$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
fuente

Respuestas:

12

Verifiqué tu código y creo que te falta el guid de las imágenes. Por favor, eche un vistazo al siguiente código:


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

Para más detalles, mire la función wp_insert_attachment .

Syed Fakhar Abbas
fuente
Gracias por señalarme los desaparecidos guid. Agregaré eso a mi código, intente nuevamente y le haré saber si eso resuelve el problema.
Sebastian
1
Hm, parece que los desaparecidos guidcausaron el problema. Con el guid agregado, ahora funciona al 100%. Mientras que faltaba el guid, a veces funcionaba, a veces no funcionaba - extraño :-) GRACIAS OTRA VEZ ashikra
Sebastian
De nada @Sebastian :)
Syed Fakhar Abbas