上传时限制图像分辨率

时间:2014-01-17 作者:Marc Dingena

我遇到了一个问题,因为内存问题,一个特别大的映像导致我的VPS服务器重新启动。这是我无法控制的配置,有点像主机的故障保护。

我有一个300M内存的VPS,我相信它足以安装WordPress,至少在日常操作中是这样。

我上传的图像文件大小不是特别大(约380 kb),大部分是黑白字母。然而,它的分辨率是4583*4583。当我通过WordPress上传时,我在上传窗口中看到一个HTTP错误,当我去查看实时站点时,它会关闭几分钟。

我想知道是否有可能检测到图像分辨率并阻止其上传。我很聪明,可以在图像处理器中胡乱处理一点,但我的一些作者在上传像这样大的东西之前可能没有足够的头脑来处理图像。

如果限制可以基于每像素的图像位,那就更好了,但我不知道我的服务器对此的限制是什么,所以我猜一条错误消息说图像无法上传,因为它大于,比如说,2000*2000就足够了。

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

问题不在于上传本身,而在于客户端和服务器之间的网络连接。这不是什么在消耗服务器的内存。

当WordPress开始“cruncing”图像时,PHP就开始调整上传图像的大小和裁剪。在这之前,您需要介入并执行一些检查,然后让PHP耗尽您的内存。

使用wp_handle_upload_prefilter 过滤器,您可以挂接一个函数,该函数可以对即将处理的图像执行任何检查:

<?php 
/* Marc Dingena Utilities
 * Test image resolution before image crunch
 */
add_filter(\'wp_handle_upload_prefilter\',\'mdu_validate_image_size\');
function mdu_validate_image_size( $file ) {
    $image = getimagesize($file[\'tmp_name\']);
    $minimum = array(
        \'width\' => \'400\',
        \'height\' => \'400\'
    );
    $maximum = array(
        \'width\' => \'2000\',
        \'height\' => \'2000\'
    );
    $image_width = $image[0];
    $image_height = $image[1];

    $too_small = "Image dimensions are too small. Minimum size is {$minimum[\'width\']} by {$minimum[\'height\']} pixels. Uploaded image is $image_width by $image_height pixels.";
    $too_large = "Image dimensions are too large. Maximum size is {$maximum[\'width\']} by {$maximum[\'height\']} pixels. Uploaded image is $image_width by $image_height pixels.";

    if ( $image_width < $minimum[\'width\'] || $image_height < $minimum[\'height\'] ) {
        // add in the field \'error\' of the $file array the message 
        $file[\'error\'] = $too_small; 
        return $file;
    }
    elseif ( $image_width > $maximum[\'width\'] || $image_height > $maximum[\'height\'] ) {
        //add in the field \'error\' of the $file array the message
        $file[\'error\'] = $too_large; 
        return $file;
    }
    else
        return $file;
}
?>

SO网友:markratledge

对于插件,请尝试http://wordpress.org/plugins/imsanity/ 这将有助于防止其他网站用户上传过大的图像。

Imsanity 自动调整上传的巨大图像的大小,使其更适合在浏览器中显示,但仍足以满足典型网站的使用。该插件可配置最大宽度、高度和质量。当参与者上载的图像大于配置的大小时,Imsanity将自动将其缩小到配置的大小并替换原始图像。

SO网友:squarecandy

您的服务器可能有足够的内存来执行此任务,但PHP内存限制设置太低,无法转换非常大的图像。

尝试设置memory_limit 在php中。ini更高。

memory_limit=256M
*注意:在某些托管环境中,这可能不是合适的解决方案。

结束

相关推荐

Latest news mini images

我试图在网站和其他论坛上找到答案,但一无所获。我会尽力解释我的问题。我需要更改我的WordPress网站,以便在主页上的“最新新闻”中显示所有新闻文章的小图像。如果这很重要,我正在使用headway主题编辑器。upd:根据评论中的要求,以下是my website.