Adăugarea programatică de imagini în biblioteca media cu wp_generate_attachment_metadata eșuează aleatoriu
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);
}

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.

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.

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
