PHP 错误 - 上载文件

2022-08-30 22:04:37

我正在尝试编写一些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>

我收到以下错误:

警告: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]: 无法将 E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php 第 3 行中的 “C:\WINDOWS\Temp\phpA30E.tmp” 移动到 “./test.txt”

警告:无法修改标头信息 - 已由 E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php:3)中的第 4 行中的 E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\upload.php 发送的标头

PHP 版本 4.4.7 在 Windows 机箱上运行 IIS。此特定文件/文件夹具有 777 个权限。

有什么想法吗?


答案 1

天哪

move_uploaded_file($_FILES['file']['tmp_name'], './' . $_FILES['file']['name']);

别这样。 可能是或任何数量的坏事。您永远不应该相信这个名字。您应该将文件重命名为其他名称,并将原始名称与您的随机名称相关联。至少使用 。$_FILES['file']['name']../../../../boot.inibasename($_FILES['file']['name'])


答案 2

因为它是Windows,所以没有真正的777。如果您使用的是 chmod,请检查与 Windows 相关的注释。

检查 IIS 帐户是否可以访问(读取、写入、修改)以下两个文件夹:

E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\
C:\WINDOWS\Temp\

推荐