Adăugarea programatică de imagini în biblioteca media cu wp_generate_attachment_metadata eșuează aleatoriu

6 sept. 2016, 01:28:44
Vizualizări: 23.5K
Voturi: 8

Folosesc ultima versiune de WordPress (4.6) pe un server LAMP (hosting partajat) cu PHP versiunea 5.6.12.

Încerc să adaug programatic 10 imagini, încărcate prin ftp în directorul wp-uploads, în biblioteca media folosind cele trei funcții WordPress wp_insert_attachment, wp_generate_attachment_metadata și wp_update_attachment_metadata.

Problema mea:

Uneori, scriptul meu PHP funcționează (toate cele 10 imagini sunt adăugate corect în biblioteca media) - iar alteori nu (din cele 10 imagini, doar 4, 5, 6 sau așa sunt adăugate)! Fiecare imagine are între 2M - 4M în dimensiune.

Ce am făcut până acum:

Am activat error_logging prin php.ini și am descoperit că din când în când wp_generate_attachment_metadata eșuează (de exemplu în timpul procesării imaginii a 5-a, a 6-a, a 7-a sau așa) și întregul meu script PHP se termină. Nu primesc mai multe informații din error_log() în afară de asta. Deoarece am suspectat probleme de memorie, am crescut dimensiunea memoriei pentru php la 120M (furnizorul meu de hosting îmi oferă 128M) și timpul de execuție a scriptului la 100s (furnizorul de hosting îmi oferă 120s). Toate fișierele există (bineînțeles), toate sunt PNG-uri - și, după cum am spus, folosind același set de 10 imagini pentru testare, uneori funcționează și alteori nu...

Întrebarea mea:

  • Există o problemă cunoscută cu wp_generate_attachment_metadata în WP 4.6? Totul funcționa bine până când mi-am actualizat site-ul de la WP 4.3 la 4.6...

  • Dacă memoria insuficientă cauzează problema, cum aș putea optimiza scriptul meu PHP pentru a gestiona limita de memorie de 128M oferită de gazda web?

  • Cum pot afla dacă lipsa memoriei cauzează terminarea scriptului meu PHP?

Mulțumesc anticipat!

Iată codul meu:

$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' => 'descrierea mea',
    'post_content' => 'descrierea mea', 
    '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
Toate răspunsurile la întrebare 1
4
13

Am verificat codul tău și cred că îți lipsesc GUID-urile imaginilor. Te rog să te uiți la codul de mai jos:


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

// Obține calea către directorul de încărcare.
$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' => 'descrierea mea',
        'post_content' => 'descrierea mea',
        'post_status' => 'inherit'
         );<br/>
    $image_id = wp_insert_attachment($attachment, $name, $post_id);<br/>
    // Asigură-te că acest fișier este inclus, deoarece wp_generate_attachment_metadata() depinde de el.
    require_once( ABSPATH . 'wp-admin/includes/image.php' );<br/> 
    // Generează metadatele pentru atașament și actualizează înregistrarea din baza de date.
    $attach_data = wp_generate_attachment_metadata( $image_id, $name );<br/>
    wp_update_attachment_metadata( $image_id, $attach_data );<br/>
}


Pentru detalii, vezi funcția wp_insert_attachment.

6 sept. 2016 02:03:41
Comentarii

Mulțumesc că mi-ai atras atenția asupra guid-ului lipsă. Voi adăuga asta în codul meu, voi încerca din nou și te voi anunța dacă asta rezolvă problema.

Sebastian Sebastian
6 sept. 2016 10:42:35

Hm, se pare că guid-ul lipsă a cauzat problema. Cu guid-ul adăugat, acum funcționează 100%. În timp ce fără guid, uneori funcționa, alteori nu - ciudat :-) MULȚUMESC DIN NOU ashikra

Sebastian Sebastian
7 sept. 2016 13:34:45

Cu plăcere @Sebastian :)

Syed Fakhar Abbas Syed Fakhar Abbas
8 sept. 2016 01:11:49

Cred că WP a blocat posibilitatea de a schimba GUID în acest fel, deoarece nu reușesc să îl actualizez. Știe cineva o altă metodă?

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