我正在使用名为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运行有关。因为这是两种情景之间的唯一区别。
这有什么意义吗?有人见过这个吗?
答案 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!上传作品。
对于那些担心安全问题的人,感谢您的意见。是的,它已被全部收回。