it-swarm.com.de

Das programmgesteuerte Hinzufügen von Bildern zur Medienbibliothek mit wp_generate_attachment_metadata schlägt nach dem Zufallsprinzip fehl

Ich verwende die neueste WordPress-Version (4.6) auf einem LAMP-Server (Shared Hosting) mit PHP Version 5.6.12.

Ich versuche, programmgesteuert 10 Bilder hinzuzufügen , die mit ftp in das Verzeichnis wp-uploads hochgeladen wurden, in die Medienbibliothek mithilfe der drei WordPress-Funktionen wp_insert_attachment, wp_generate_attachment_metadata und wp_update_attachment_metadata.

Mein Problem:

Manchmal funktioniert mein PHP -Skript (alle 10 Bilder werden korrekt zur Medienbibliothek hinzugefügt) - und manchmal nicht (von den 10 Bildern werden nur 4, 5, 6 oder so hinzugefügt)! Jedes Bild ist 2M - 4M groß.

Was ich bisher gemacht habe:

Ich habe error_logging über php.ini aktiviert und festgestellt, dass ab und zu wp_generate_attachment_metadata fehlschlägt (d. H., Wenn ich das 5., 6., 7. oder so Bild bearbeite), und mein gesamtes PHP -Skript wird beendet. Ich erhalte keine weiteren Informationen aus dem error_log (). Da ich Speicherprobleme vermutete, erhöhte ich die Speichergröße für PHP auf 120 MB (mein Hosting-Provider gibt mir 128 MB) und die Skriptausführung auf 100 MB (mein Hosting-Provider gibt mir 120 MB). Alle Dateien existieren (natürlich), sie sind alle PNGs - und wie gesagt, es funktioniert manchmal, manchmal nicht ...

Meine Frage:

  • Gibt es ein bekanntes Problem mit wp_generate_attachment_metadata in WP 4.6? Früher hat alles gut funktioniert, bis ich meine Website von WP 4.3 auf 4.6 aktualisiert habe ...

  • Wenn nicht genügend Arbeitsspeicher das Problem verursacht, wie kann ich mein PHP -Skript optimieren, um das von meinem Webhoster festgelegte 128-MB-Arbeitsspeicherlimit zu verarbeiten?

  • Wie finde ich heraus, ob mein Skript PHP aufgrund von Speichermangel beendet wird?

Danke im Voraus!

Hier ist mein 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);
}
8
Sebastian

Ich habe Ihren Code überprüft, und ich denke, Sie vermissen die Anleitung der Bilder. Bitte schauen Sie sich den folgenden Code an:


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

Für Details schauen Sie sich die wp_insert_attachment Funktion an.

11