我正在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_metadata
和wp_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);
}
最合适的回答,由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 作用