当用户上传非常大的照片且内存紧张时,Wordpress似乎内存不足,无法调整上传照片的大小,也无法创建必要的元数据(_wp_attachment_metadata
进入wp_postmet
a未创建)。
最糟糕的是,用户从未收到通知。最多我会收到一条“HTTP错误”消息。
是否可以以某种方式添加一条错误消息,警告用户并删除不一致的文件/数据库条目?为什么这不是标准的WP行为?
当用户上传非常大的照片且内存紧张时,Wordpress似乎内存不足,无法调整上传照片的大小,也无法创建必要的元数据(_wp_attachment_metadata
进入wp_postmet
a未创建)。
最糟糕的是,用户从未收到通知。最多我会收到一条“HTTP错误”消息。
是否可以以某种方式添加一条错误消息,警告用户并删除不一致的文件/数据库条目?为什么这不是标准的WP行为?
你的用户如何上传照片?你说得对register_shutdown_function
. 它似乎在我的代码中运行良好,尽管我只调用后端via AJAX (我也有文件上传功能),所以只需要考虑这个案例。下面是我如何在插件中设置它的。在plugin类之外,在文件底部的某个地方,我有一个函数:
function fatal_handler_ajax_wrapper() {
$error = error_get_last();
if( $error !== NULL) {
$ret = array(\'status\' => -1, \'msg\' => \'Fatal error on server. Please contact server admin.\');
$errfile = "unknown file";
$errstr = "shutdown";
$errno = E_CORE_ERROR;
$errline = 0;
$ret[\'details\'] = $error;
}
echo json_encode($ret);
}
在我的插件构造函数中,我将其连接如下:function __construct() {
register_shutdown_function( "fatal_handler_ajax_wrapper" );
// ... whatever else you may need to do in your constructor
}
我用这个成功地测试了它SO question\'s代码(产生一个很好的致命错误)。将其放在后端的AJAX处理程序函数中的某个位置,并观察后端将一个漂亮的JSON对象返回到前端:$a = \'x\';
while (true) {
$a = $a.$a;
}
Edit: 刚刚发现from this SO question 那个register_shutdown_function
几乎每次都会执行,即使没有错误。我编辑了代码片段以反映这一事实。我要加上这个作为答案,虽然这可能不是你想要的答案。
答案是“不,不可能”。
PHP中的内存不足错误是致命错误。无法从死亡中恢复,因此无法返回有用的错误消息。
@vancoders的回答通常是正确的,但如果您可以对图像的大小施加限制,那么您可以在图像上传后立即验证系统不会失败。
这里重要的不是检查文件大小本身,而是检查图像的尺寸,因为当图像变大时,压缩它所需的内存量会变大。
我在wordpress的帖子中上传了一些图片(例如,帖子#1和帖子#2)。现在我创建了一个新帖子(例如,帖子#3),在这篇帖子中我插入了WordPress 3.5图库,我没有在帖子#3中上传任何图像,而是使用了帖子#1和帖子#2中的图像。现在在帖子#3中,我想获得这些图片的链接,但我似乎无法获得。我正在使用以下代码:$attachments = get_children( array(\'post_parent\' => get_the_ID(), \'post_type\' => \'att