题
我正在尝试编写一些 PHP 来将文件上传到我的网络服务器上的文件夹。这是我所拥有的:
<?php
if ( !empty($_FILES['file']['tmp_name']) ) {
move_uploaded_file($_FILES['file']['tmp_name'], './' . $_FILES['file']['name']);
header('Location: http://www.mywebsite.com/dump/');
exit;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html>
<head>
<title>Dump Upload</title>
</head>
<body>
<h1>Upload a File</h1>
<form action="upload.php" enctype="multipart/form-data" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000000" />
Select the File:<br /><input type="file" name="file" /><br />
<input type="submit" value="Upload" />
</form>
</body>
</html>
我收到这些错误:
警告:move_uploaded_file(./test.txt) [function.move-uploaded-file]:无法打开流:第 3 行 E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php 中的权限被拒绝
警告:move_uploaded_file() [function.move-uploaded-file]:无法将第 3 行上的 E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php 中的“C:\WINDOWS emp\phpA30E.tmp”移动到“./test.txt”
警告:无法修改标头信息 - E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\ 中已发送的标头(输出从 E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php:3 开始) upload.php 第 4 行
PHP版本4.4.7在Windows盒上运行IIS。这个特定的文件/文件夹有 777 权限。
有任何想法吗?
解决方案
因为是Windows,所以没有真正的777。如果您正在使用 chmod, ,查看Windows相关注释。
检查 IIS 帐户是否可以访问(读、写、修改)这两个文件夹:
E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\
C:\WINDOWS\Temp\
其他提示
我的天啊
move_uploaded_file($_FILES['file']['tmp_name'], './' . $_FILES['file']['name']);
不要那样做。 $_FILES['file']['name']
可能 ../../../../boot.ini
或许多坏事。你永远不应该相信这个名字。您应该将该文件重命名为其他名称,并将原始名称与您的随机名称相关联。最少使用 basename($_FILES['file']['name'])
.
尝试添加路径。以下代码对我有用:
<?php
if ( !empty($_FILES['file']) ) {
$from = $_FILES['file']['tmp_name'];
$to = dirname(__FILE__).'/'.$_FILES['file']['name'];
if( move_uploaded_file($from, $to) ){
echo 'Success';
} else {
echo 'Failure';
}
header('Location: http://www.mywebsite.com/dump/');
exit;
}
?>
警告:move_uploaded_file() [function.move-uploaded-file]:无法将第 3 行的“C:\WINDOWS emp\phpA30E.tmp”移动到 E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php 中的“./people.xml”
是重要的一行,它表示您无法将文件放在您想要的位置,这通常意味着权限问题
检查运行应用程序的进程(通常是 php 的网络服务器进程)是否有权在那里写入文件。
编辑:
稍等一下,我跳了一点点,在第一行中通往文件的路径正确吗?
另一个需要观察的地方是你的目录分隔符,你在 Windows 框中使用 / 。
将 IIS 用户添加到“转储”文件夹安全权限组中,并授予其读/写访问权限。
创建一个名为“image”的文件夹,并具有文件夹权限 777
<?php
move_uploaded_file($_FILES['file']['tmp_name'],"image/".$_FILES['file']['name']);
?>