[英]PHP file upload script not functioning
这是我的php文件上传脚本。 它根本不起作用。 什么都没发生。 我可能错过了一些东西。
<?php
if ((($_FILES["thumbfile"]["type"] == "image/gif")
|| ($_FILES["thumbfile"]["type"] == "image/jpeg")
|| ($_FILES["thumbfile"]["type"] == "image/pjpeg"))
&& ($_FILES["thumbfile"]["size"] < 20000))
{
if ($_FILES["thumbfile"]["error"] > 0)
{
move_uploaded_file($_FILES["thumbfile"]["tmp_name"],
"http://www.divethegap.com/update/z-images/admin/upload/" . $_FILES["thumbfile"]["name"]);
$filelocation = "http://www.divethegap.com/update/z-images/admin/upload/" . $_FILES["thumbfile"]["name"];
echo '<script type="text/javascript">
parent.document.getElementById("thumbprogress").innerHTML = "Archiving"</script>Archiving';
}
}
else
{
echo '<script type="text/javascript">
parent.document.getElementById("thumbprogress").innerHTML = "Invalid File Format"</script>Invalid File Format';
}
?>
谁能看到问题?
奇妙
move_uploaded_file()
并非旨在将URL作为目标。 本质上,您是在尝试上传文件,然后再次上传。 您要使用的是本地文件路径,其中没有URL。
最重要的是,您正在使用$ _FILES数组中提供的“类型”和“大小”数据进行验证。 这些字段是用户提供的,可以被颠覆。 没什么说恶意用户无法上载“ hackme.exe”或“ subvert_my_server.php”并将其标记为图像/ jpeg类型上载的,并且您的脚本会很乐意尝试存储在服务器上。
对于正确的处理,类似以下的方法会更好:
if ($_FILES['thumbfile']['error'] === UPLOAD_ERR_OK) {
$info = getimagesize($_FILES['thumbfile']['tmp_name']);
if (($info[2] !== IMG_GIF) && ($info[2] !== IMG_JPEG)) { // whoops. had || initially.
die("not a gif/jpg");
}
if (filesize($_FILES['thumbfile']['tmp_name']) > 20000) {
die("larger than 20000");
}
move_uploaded_file($_FILES['thumbfile']['tmp_name'], '/some/directory/on/your/server/filename.jpg');
}
问题未解决?试试以下方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.