0

我有以下代码尝试将用户表单输入文件,并将其上传到网络服务器。

这段代码在 Apache 服务器上运行,但是我现在正试图让相同的代码在我的 Windows IIS 6 Web 服务器上运行,该服务器安装了 PHP(版本 5.2.3)并且可以运行。我已经设置了 PHP.INI 文件,以便

文件上传 = 开

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'] 获取文件。这工作正常,但我仍然无法上传任何文件

任何想法为什么会发生这种情况。

4

1 回答 1

1

您的代码应该是:

move_uploaded_file($_FILES['img1']['tmp_name'], "$abpath/$img1_name");

不要copy()上传文件。在少数情况下,上传的文件可能会被篡改,这就是 move_uploaded_file() 存在的原因——它会检查那些特定类型的篡改。

同样,在处理上传时要非常小心如何创建文件名。如果您直接使用 $_FILES 中提供的任何内容作为文件的目标路径/名称的一部分,那么您将在您的服务器上打开严重的安全漏洞,恶意用户可以利用它在您的服务器上任意位置随意涂抹文件。

于 2013-11-01T14:49:05.187 回答