内部服务器错误上传图像mod_php VS cgi

时间:2012-02-13 14:13:23

标签: php apache

我正在使用名为Rad Upload的JAVA Applet - http://www.radinks.com/upload/ APPLET崩溃并生成内部服务器错误。

我们对Apache和PHP进行了所有调整,以上传更大的图像。这是问题所在。 PHP本身似乎存在问题。我们在另一台服务器上完成了上传脚本的复制。一个有效,另一个无效。

有效的那个 PHP版本5.2.5作为Apache运行

那个不起作用的人 PHP版本5.2.13作为CGI运行

根据托管公司的说法,没有错误日志说明问题是什么。他们可以看到图片正在发布,当运行上传脚本时,它甚至会在访问之前崩溃。

即使这不是问题,也就是上传脚本。
请注意,这不是正在使用的最终上传脚本。这是一个用于测试的剥离版本 - 即使这种剥离也不起作用。我们已经到了使用没有PHP的空白上传脚本的程度。并且在生成日志时仍会出现内部服务器错误。

session_start();
$photo = $_FILES['userfile'];
$count = count($photo['name']);
if (!is_dir('./'.$_SESSION['order'])) {
    mkdir('./'.$_SESSION['order']);
}
for ($i=0; $i < $count; $i++) {
    move_uploaded_file($photo['tmp_name'][$i], './'.$_SESSION['order']/'.$photo['name'][$i]);
}

该网站已移至另一个较新的服务器并出现同样的问题。我认为它与PHP作为CGI运行有关。因为这是两种情景之间的唯一区别。

这有什么意义吗?有人见过这个吗?

2 个答案:

答案 0 :(得分:2)

您尚未检查代码中的上传是否成功:

for ($i=0; $i < $count; $i++) {
    if ($photo['error'][$i] === UPLOAD_ERR_OK) {
        if (!move_uploaded_file($photo['tmp_name'][$i], './'.$_SESSION['order']/'.$photo['name'][$i])) {
            echo "Unable to move file #$i to final destination";
        }
    } else {
       echo "Upload #$i failed with error code ", $photo['error'][$i];
    }
}

请注意,您的代码也容易受到文件涂鸦攻击。您盲目地使用用户提供的['name']部分,其中包括文件路径信息。对于恶意用户来说,将文件名设置为类似../../../../../../../../etc/passwd的内容是完全无足轻重的,这样他们就可以在服务器上的任何文件上乱写,这些文件是Web服务器进程具有写入权限的。

答案 1 :(得分:0)

问题已经解决了。 PHP编译不正确。把我搬到新服务器后... bam!上传作品。

对于那些担心安全问题的人,感谢您的意见。是的,它已被全部收回。