我正在尝试编写一些PHP以将文件上传到Web服务器上的文件夹。 这是我所拥有的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| <?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>
Dump Upload
</head>
<body>
Upload a File
<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> |
我收到这些错误:
Warning: move_uploaded_file(./test.txt) [function.move-uploaded-file]: failed to open stream: Permission denied in E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php on line 3
Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move 'C:\WINDOWS\Temp\phpA30E.tmp' to './test.txt' in E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php on line 3
Warning: Cannot modify header information - headers already sent by (output started at E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php:3) in E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php on line 4
PHP版本4.4.7
在Windows框上运行IIS。 该特定文件/文件夹具有777权限。
有任何想法吗?
我的天啊
1
| move_uploaded_file($_FILES['file']['tmp_name'], './' . $_FILES['file']['name']); |
不要那样做$_FILES['file']['name']可能是../../../../boot.ini或许多坏东西。您永远不要相信这个名字。您应该将文件重命名为其他名称,并将原始名称与您的随机名称相关联。至少使用basename($_FILES['file']['name'])。
由于它是Windows,所以没有真正的777。如果您使用的是chmod,请检查与Windows相关的注释。
检查IIS帐户是否可以访问(读取,写入,修改)这两个文件夹:
1 2
| E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\
C:\WINDOWS\Temp\ |
尝试添加路径。以下代码对我有用:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| <?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;
}
?> |
将IIS用户添加到"转储"文件夹安全权限组中,并授予其读/写访问权限。
要观察的另一个想法是,您在Windows框中使用/来分隔目录。
警告:move_uploaded_file()[function.move-uploaded-file]:无法将E: inetpub vhosts mywebsite.com 中的'C: WINDOWS Temp phpA30E.tmp'移动到'./people.xml'第3行上的httpdocs dump upload.php
是重要的一行,它表明您不能将文件放在所需的位置,这通常意味着权限问题
检查运行该应用程序的进程(通常是php的webservers进程)是否有权在其中写入文件。
编辑:
稍等一下
我稍微跳了一下枪,第一行中文件的路径正确吗?
我们发现使用下面的路径
{['DOCUMENT_ROOT'] + 'path to folder'
并向所有人授予对该文件夹的完全访问权限,从而解决了该问题。
确保不要在地址栏中显示位置。放弃位置毫无意义。
创建具有文件夹权限777的名为" image"的文件夹
1 2 3
| <?php
move_uploaded_file($_FILES['file']['tmp_name'],"image/".$_FILES['file']['name']);
?> |