web-dev-qa-db-fra.com

L'ajout par programme d'images à la bibliothèque multimédia avec wp_generate_attachment_metadata échoue de manière aléatoire

J'utilise la dernière version de WordPress (4.6) sur un serveur LAMP (hébergement partagé) avec PHP version 5.6.12.

J'essaie de ajouter par programme 10 images, chargé avec ftp dans le répertoire wp-uploads, dans la bibliothèque multimédia à l'aide des trois fonctions WordPress wp_insert_attachment, wp_generate_attachment_metadata et wp_update_attachment_metadata.

Mon problème:

Parfois, mon script PHP fonctionne (les 10 images sont correctement ajoutées à la médiathèque) et parfois non (sur les 10 images, seules 4, 5, 6 ou plus sont ajoutées)! Chaque image est une taille de 2M à 4M.

Ce que j'ai fait jusqu'à présent:

J'ai activé error_logging via php.ini et découvert que de temps en temps wp_generate_attachment_metadata échouait (c'est-à-dire lorsqu'il traitait la 5ème, 6ème, 7ème image ou plus) et que mon script PHP entier se terminait. Je ne reçois pas plus d'informations de la part error_log (). Depuis que je soupçonnais des problèmes de mémoire, j’ai augmenté la taille de la mémoire pour php à 120M (mon fournisseur d’hébergement me donne 128M) et l’exécution de scripts à 100 (mon fournisseur d’hébergement m'en donne 120). Tous les fichiers existent (bien sûr), ils sont tous des PNG - et, comme je l'ai dit, en utilisant le même ensemble de 10 images à des fins de test, cela fonctionne parfois et parfois cela ne fonctionne pas ...

Ma question:

  • Existe-t-il un problème connu avec wp_generate_attachment_metadata dans WP 4.6? Tout fonctionnait normalement jusqu'à ce que je mette à jour mon site de WP 4.3 à 4.6 ...

  • Si le problème n’est pas lié à une quantité de mémoire suffisante, comment puis-je optimiser mon script PHP afin de gérer la limite de mémoire de 128 Mo donnée par mon hébergeur Web?

  • Comment savoir si un manque de mémoire provoque l'arrêt de mon script PHP?

Merci d'avance!

Voici mon code:

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

J'ai vérifié votre code, et je pense que vous manquez le guid des images. Veuillez regarder le code ci-dessous:


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

Pour plus de détails, regardez la fonction wp_insert_attachment .

11
Syed Fakhar Abbas