我有以下代码尝试将用户表单输入文件,并将其上传到网络服务器。
这段代码可以在Apache服务器上运行,但我现在正尝试在我的Windows IIS 6 Web服务器上运行相同的代码,该服务器安装并运行了PHP(版本5.2.3)。我已经设置了PHP.INI文件以便
file_uploads = On
upload_tmp_dir =“C:\ Temp”
我的表单是
<form method="POST" action="do_upload.php" enctype="multipart/form-data">
<input type="file" name="img1" size="30">
<input type="submit" name="BtnUpload" value="Click To Upload Now">
</form>
我上传的PHP代码是
$abpath = "C:\MyWebs\Website1\httdocs\images";
@copy($img1, "$abpath/$img1_name") or $log .= "Couldn't copy image 1 to server";
if (file_exists("$abpath/$img1_name"))
{
$log .= "File 1 was uploaded";
}
else
{
$log .= "File 1 is not an image";
}
出于某种原因,当我检查$ img1的值时,例如echo $ img1;它是空的。因此我尝试使用$ _FILES ['img1'] ['name']获取文件。这工作正常,但我仍然无法上传任何文件
为什么会发生这种情况的任何想法。
答案 0 :(得分:1)
您的代码应为:
move_uploaded_file($_FILES['img1']['tmp_name'], "$abpath/$img1_name");
不要copy()
上传文件。有一些边缘情况,上传的文件可以被篡改,这就是move_uploaded_file()存在的原因 - 它检查那些特定类型的篡改。
同样,非常小心处理上传时如何创建文件名。如果直接使用$ _FILES中提供的ANYTHING作为文件的目标路径/名称的一部分,则会在服务器上打开错误的安全漏洞,恶意用户可以利用它在您的服务器上随意编写文件。 / p>