使用wp_GENERATE_ATTACHATE_METADATA以编程方式将图像随机添加到媒体库失败

时间:2016-09-05 作者:Sebastian

我正在LAMP服务器(共享主机)上运行最新的WordPress版本(4.6),PHP版本为5.6.12。

我正在努力programmatically add 10 images, 使用ftp上载到wp-uploads 目录to the media library 使用三个WordPress函数wp_insert_attachment, wp_generate_attachment_metadatawp_update_attachment_metadata.

我的问题:

有时,我的PHP脚本可以工作(所有10个图像都正确添加到媒体库),有时则不行(在10个图像中,只添加了4、5、6个左右)!每个图像的大小为2米-4米。

到目前为止我所做的:

我通过php启用了error\\u日志记录。我偶尔会发现wp_generate_attachment_metadata 失败(即在处理第5、6、7个左右的图像时),我的整个PHP脚本终止。除此之外,我没有从error\\u log()中获得更多信息。由于我怀疑内存问题,我将php的内存大小增加到120M(我的托管提供商给我128M),脚本执行时间增加到100s(我的托管提供商给我120s)。所有文件都存在(当然),它们都是PNG——正如我所说,使用相同的10幅图像集进行测试,有时有效,有时无效。。。

我的问题:

是否存在已知问题wp_generate_attachment_metadata 在WP 4.6中?在我将我的网站从WP 4.3升级到4.6之前,一切都很好。。。

如果没有足够的内存导致问题,我如何优化我的PHP脚本以处理我的web宿主给出的128M内存限制?

如何找出内存不足是否导致PHP脚本终止?

提前谢谢!

这是我的代码:

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

1 个回复
最合适的回答,由SO网友:Syed Fakhar Abbas 整理而成

我已经检查了您的代码,我认为您缺少图像的guid。请查看以下代码:


$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 );
}
有关详细信息,请参见wp_insert_attachment 作用

相关推荐

致命错误:调用未定义函数wp_raise_Memory_Limit()

在执行Wordpress自动更新后,我尝试打开仪表板时出现此错误。我的网站仍然正常显示;我就是无法访问仪表板来处理它。之前在网上其他地方对同一问题的回答建议清除缓存并使用FTP手动更新Wordpress。这两件事我都试过了,但都没用。我找不到任何其他建议,所以我在这里询问。如何解决此问题?请尽量在您的说明中详细说明,因为我只是一个网站的外行,而不是开发人员。非常感谢。