La adición programada de imágenes a la biblioteca de medios con wp_generate_attachment_metadata falla al azar

4

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 10 imágenes mediante programación, subidas con ftp al directorio wp-uploads , a la biblioteca multimedia usando las tres funciones de WordPress wp_insert_attachment , wp_generate_attachment_metadata y 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 otras veces no (de las 10 imágenes, solo se agregan 4, 5, 6). 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_metadata falla (es decir, al manejar la quinta, sexta, séptima imagen o algo así) y mi script PHP completo termina. No obtengo más información del error_log () aparte de eso. Como sospeché que había 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 scripts a 100s (mi proveedor de hosting me da 120s). Todos los archivos existen (por supuesto), todos son archivos PNG y, como dije, usando el mismo conjunto de 10 imágenes para la prueba, a veces funciona y otras veces no funciona ...

Mi pregunta:

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

  • Si no hay suficiente memoria causando el problema, ¿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 se termine?

Gracias de antemano!

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);
}
    
pregunta Sebastian 06.09.2016 - 00:28

1 respuesta

5

He comprobado tu código y creo que te estás perdiendo la guía 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, consulte la función wp_insert_attachment .

    
respondido por el Syed Fakhar Abbas 06.09.2016 - 01:03

Lea otras preguntas en las etiquetas