Aggiunta programmatica di immagini alla libreria multimediale con wp_generate_attachment_metadata fallisce casualmente

6 set 2016, 01:28:44
Visualizzazioni: 23.5K
Voti: 8

Sto utilizzando l'ultima versione di WordPress (4.6) su un server LAMP (hosting condiviso) con PHP versione 5.6.12.

Sto cercando di aggiungere programmaticamente 10 immagini, caricate via ftp nella directory wp-uploads, alla libreria multimediale utilizzando le tre funzioni WordPress wp_insert_attachment, wp_generate_attachment_metadata e wp_update_attachment_metadata.

Il mio problema:

A volte il mio script PHP funziona (tutte le 10 immagini vengono aggiunte correttamente alla libreria multimediale) - e altre volte no (delle 10 immagini, ne vengono aggiunte solo 4, 5, 6 o giù di lì)! Ogni immagine ha una dimensione di 2M - 4M.

Cosa ho fatto finora:

Ho abilitato error_logging tramite php.ini e ho scoperto che ogni tanto wp_generate_attachment_metadata fallisce (cioè durante l'elaborazione della 5a, 6a, 7a immagine o giù di lì) e il mio intero script PHP termina. Non ottengo altre informazioni da error_log(). Poiché sospettavo problemi di memoria, ho aumentato la dimensione della memoria per php a 120M (il mio provider di hosting mi dà 128M) e l'esecuzione dello script a 100s (il mio provider di hosting mi dà 120s). Tutti i file esistono (ovviamente), sono tutti PNG - e, come ho detto, usando lo stesso set di 10 immagini per i test, a volte funziona e a volte no...

La mia domanda:

  • Esiste un problema noto con wp_generate_attachment_metadata in WP 4.6? Tutto funzionava bene fino a quando non ho aggiornato il mio sito da WP 4.3 a 4.6...

  • Se la memoria insufficiente sta causando il problema, come potrei ottimizzare il mio script PHP per gestire il limite di memoria di 128M fornito dal mio web hoster?

  • Come faccio a scoprire se la mancanza di memoria causa la terminazione del mio script PHP?

Grazie in anticipo!

Ecco il mio codice:

$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' => 'la mia descrizione',
    'post_content' => 'la mia descrizione', 
    '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);
}
0
Tutte le risposte alla domanda 1
4
13

Ho controllato il tuo codice e penso che ti manchi il guid delle immagini. Per favore dai un'occhiata al codice qui sotto:


$post_id = 1234;
$images = array('filename1.png', 'filename2.png', ... 'filename10.png');

// Ottieni il percorso della directory di upload
$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' => 'la mia descrizione',
        'post_content' => 'la mia descrizione',
        'post_status' => 'inherit'
         );<br/>
    $image_id = wp_insert_attachment($attachment, $name, $post_id);<br/>
    // Assicurati che questo file sia incluso, poiché wp_generate_attachment_metadata() dipende da esso
    require_once( ABSPATH . 'wp-admin/includes/image.php' );<br/> 
    // Genera i metadati per l'allegato e aggiorna il record del database
    $attach_data = wp_generate_attachment_metadata( $image_id, $name );<br/>
    wp_update_attachment_metadata( $image_id, $attach_data );<br/>
}

Per i dettagli guarda la funzione wp_insert_attachment.

6 set 2016 02:03:41
Commenti

Grazie per avermi segnalato il guid mancante. Lo aggiungerò al mio codice, proverò di nuovo e ti farò sapere se risolve il problema.

Sebastian Sebastian
6 set 2016 10:42:35

Hm, sembra che il guid mancante abbia causato il problema. Con il guid aggiunto ora funziona al 100%. Mentre con il guid mancante, a volte funzionava, a volte no - strano :-) GRAZIE ANCORA ashikra

Sebastian Sebastian
7 set 2016 13:34:45

Prego @Sebastian :)

Syed Fakhar Abbas Syed Fakhar Abbas
8 set 2016 01:11:49

Penso che WP abbia bloccato la possibilità di modificare il GUID in questo modo, dato che non riesco ad aggiornarlo. Qualcuno conosce un altro metodo?

Drew Baker Drew Baker
24 nov 2020 17:37:26