L'aggiunta a livello di codice di immagini alla libreria multimediale con wp_generate_attachment_metadata non riesce in modo casuale


8

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

Sto provando ad aggiungere a livello di 10 immagini , caricati con ftp alla wp-uploadsdirectory, alla biblioteca multimediale utilizzando le tre funzioni di WordPress wp_insert_attachment, wp_generate_attachment_metadatae wp_update_attachment_metadata.

Il mio problema:

A volte, il mio script PHP funziona (tutte e 10 le immagini vengono aggiunte correttamente alla libreria multimediale) - a volte no (delle 10 immagini vengono aggiunte solo 4, 5, 6 o così)! Ogni immagine ha dimensioni 2M - 4M.

Quello che ho fatto finora:

Ho abilitato error_logging tramite php.ini e ho scoperto che ogni tanto wp_generate_attachment_metadatafallisce (cioè mentre gestisco la quinta, sesta, settima immagine) e il mio intero script PHP termina. Non ottengo ulteriori informazioni da error_log () diverso da quello. Da quando sospettavo problemi di memoria, ho aumentato la dimensione della memoria per php a 120M (i miei provider di hosting mi danno 128M) e l'esecuzione dello script a 100s (il mio provider di hosting mi dà 120s). Esistono tutti i file (ovviamente), sono tutti PNG - e, come ho detto, usando lo stesso set di 10 immagini per i test, a volte funziona e a volte non funziona ...

La mia domanda:

  • C'è un problema noto con wp_generate_attachment_metadatain 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 non è sufficiente a causare il problema, come potrei ottimizzare il mio script PHP per gestire il limite di memoria di 128 M fornito dal mio web hoster?

  • Come faccio a sapere se la mancanza di memoria provoca la chiusura 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' => '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);
}

Risposte:


12

Ho controllato il tuo codice e penso che ti manchi la guida delle immagini. Si prega di dare un'occhiata al codice qui sotto:


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

Per i dettagli guarda la funzione wp_insert_attachment .


Grazie per avermi segnalato la mancanza guid. Lo aggiungerò al mio codice, riprovare e farti sapere se questo risolve il problema.
Sebastian,

1
Hm, sembra che i dispersi abbiano guidcausato il problema. Con il guid aggiunto ora funziona al 100%. Mentre con il guid mancante, a volte ha funzionato, a volte non ha funzionato - strano :-) GRAZIE ANCORA ashikra
Sebastian

Il tuo benvenuto @Sebastian :)
Syed Fakhar Abbas
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.