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

4

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 d'ajouter par programme 10 images , chargées avec ftp dans le répertoire wp-uploads , dans la médiathèque à 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 a une taille comprise entre 2 et 4M.

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

J'ai activé error_logging via php.ini et j'ai découvert que wp_generate_attachment_metadata échouait de temps en temps (c'est-à-dire lorsqu'il traitait la 5ème, 6ème, 7ème image environ) 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 php à 120 Mo (mon fournisseur d’hébergement en donne 128 Mo) et l’exécution de scripts à 100 (mon fournisseur d’hébergement 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'à la mise à niveau de mon site de WP 4.3 à 4.6 ...

  • Si le problème à résoudre est lié au manque de mémoire, 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 le 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);
}
    
posée Sebastian 06.09.2016 - 00:28

1 réponse

5

J'ai vérifié votre code et je pense que vous manquez le guide des images. Veuillez consulter 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, consultez la fonction wp_insert_attachment .

    
réponse donnée Syed Fakhar Abbas 06.09.2016 - 01:03

Lire d'autres questions sur les étiquettes