Out of memory error reporting

时间:2013-03-23 作者:nimrodm

当用户上传非常大的照片且内存紧张时,Wordpress似乎内存不足,无法调整上传照片的大小,也无法创建必要的元数据(_wp_attachment_metadata 进入wp_postmeta未创建)。

最糟糕的是,用户从未收到通知。最多我会收到一条“HTTP错误”消息。

是否可以以某种方式添加一条错误消息,警告用户并删除不一致的文件/数据库条目?为什么这不是标准的WP行为?

3 个回复
最合适的回答,由SO网友:montrealist 整理而成

你的用户如何上传照片?你说得对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 几乎每次都会执行,即使没有错误。我编辑了代码片段以反映这一事实。

SO网友:vancoder

我要加上这个作为答案,虽然这可能不是你想要的答案。

答案是“不,不可能”。

PHP中的内存不足错误是致命错误。无法从死亡中恢复,因此无法返回有用的错误消息。

SO网友:Mark Kaplun

@vancoders的回答通常是正确的,但如果您可以对图像的大小施加限制,那么您可以在图像上传后立即验证系统不会失败。

这里重要的不是检查文件大小本身,而是检查图像的尺寸,因为当图像变大时,压缩它所需的内存量会变大。

结束

相关推荐

How to get gallery images?

我在wordpress的帖子中上传了一些图片(例如,帖子#1和帖子#2)。现在我创建了一个新帖子(例如,帖子#3),在这篇帖子中我插入了WordPress 3.5图库,我没有在帖子#3中上传任何图像,而是使用了帖子#1和帖子#2中的图像。现在在帖子#3中,我想获得这些图片的链接,但我似乎无法获得。我正在使用以下代码:$attachments = get_children( array(\'post_parent\' => get_the_ID(), \'post_type\' => \'att