PHP 错误 - 上传文件
Posted
技术标签:
【中文标题】PHP 错误 - 上传文件【英文标题】:PHP Error - Uploading a file 【发布时间】:2010-09-05 10:33:44 【问题描述】:我正在尝试编写一些 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]:无法打开流:E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php 中的权限被拒绝第 3 行
警告:move_uploaded_file() [function.move-uploaded-file]:无法将 'C:\WINDOWS\Temp\phpA30E.tmp' 移动到 E:\inetpub\vhosts\mywebsite 中的 './test.txt' .com\httpdocs\dump\upload.php 在第 3 行
警告:无法修改标头信息 - 标头已由 E:\inetpub\vhosts\mywebsite.com 中的(输出开始于 E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php:3)发送\httpdocs\dump\upload.php 在第 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'])
。
【讨论】:
【参考方案2】:因为是 Windows,所以没有真正的 777。如果您使用的是chmod,请检查与 Windows 相关的 cmets。
检查 IIS 帐户是否可以访问(读取、写入、修改)这两个文件夹:
E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\
C:\WINDOWS\Temp\
【讨论】:
【参考方案3】:尝试添加路径。以下代码适用于我:
<?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;
?>
【讨论】:
【参考方案4】:警告:move_uploaded_file() [function.move-uploaded-file]:无法将 'C:\WINDOWS\Temp\phpA30E.tmp' 移动到 E:\inetpub\vhosts\mywebsite 中的 './people.xml' .com\httpdocs\dump\upload.php 在第 3 行
是重要的一行,它说你不能把文件放在你想要的地方,这通常意味着权限问题
检查运行应用程序的进程(通常是 php 的 webservers 进程)是否有权在其中写入文件。
编辑:
稍等一下 我有点过分了,第一行文件的路径正确吗?
【讨论】:
【参考方案5】:另一个需要注意的是你的目录分隔符,你在 Windows 框中使用 /..
【讨论】:
【参考方案6】:在“转储”文件夹安全权限组中添加 IIS 用户,并为其授予读/写访问权限。
【讨论】:
【参考方案7】:创建一个名为“image”的文件夹,文件夹权限为777
<?php
move_uploaded_file($_FILES['file']['tmp_name'],"image/".$_FILES['file']['name']);
?>
【讨论】:
【参考方案8】:我们发现使用下面的路径
['DOCUMENT_ROOT'] + 'path to folder'
并授予每个人对该文件夹的完全访问权限解决了该问题。
确保不要在地址栏中显示位置。泄露位置是没有意义的。
【讨论】:
以上是关于PHP 错误 - 上传文件的主要内容,如果未能解决你的问题,请参考以下文章
php文件上传在php.ini中都设置了 post为150M 上传100M 时间设置0,为啥我上传5M文件还是显示错误1,