PHP错误-上传文件
时间:2020-03-05 18:38:04 来源:igfitidea点击:
我正在尝试编写一些PHP,以将文件上传到Web服务器上的文件夹。这是我所拥有的:
<?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>
我收到这些错误:
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权限。
有任何想法吗?
解决方案
回答
警告: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进程)是否有权在其中写入文件。
编辑:
稍等一下
我稍微跳了一下枪,第一行中文件的路径正确吗?
回答
由于它是Windows,所以没有真正的777. 如果我们使用的是chmod,请检查与Windows相关的注释。
检查IIS帐户是否可以访问(读取,写入,修改)这两个文件夹:
E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\ C:\WINDOWS\Temp\
回答
尝试添加路径。以下代码对我有用:
<?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($_FILES['file']['tmp_name'], './' . $_FILES['file']['name']);
不要那样做$ _FILES ['file'] ['name']可以是" ../../../../boot.ini"或者许多坏东西。我们永远不要相信这个名字。我们应该将文件重命名为其他名称,并将原始名称与随机名称相关联。至少使用
basename($ _ FILES ['file'] ['name'])`。
回答
要观察的另一种想法是目录分隔符,我们在Windows框中使用/。
回答
将IIS用户添加到"转储"文件夹安全权限组中,并授予其读/写访问权限。