18

我正在尝试编写一些 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]:无法将 'C:\WINDOWS\Temp\phpA30E.tmp' 移动到 E:\inetpub\vhosts\mywebsite.com\ 中的 './test.txt'第 3 行的 httpdocs\dump\upload.php

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

PHP 版本 4.4.7 在 Windows 机器上运行 IIS。这个特定的文件/文件夹有 777 权限。

有任何想法吗?

4

8 回答 8

17

我的天啊

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

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

于 2008-12-13T17:17:01.657 回答
9

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

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

E:\inetpub\vhosts\mywebsite.com\httpdocs\dump\
C:\WINDOWS\Temp\
于 2008-08-06T16:16:01.667 回答
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;
}
?>
于 2008-08-07T12:06:45.817 回答
1

警告:move_uploaded_file() [function.move-uploaded-file]:无法将 'C:\WINDOWS\Temp\phpA30E.tmp' 移动到 E:\inetpub\vhosts\mywebsite.com\ 中的 './people.xml'第 3 行的 httpdocs\dump\upload.php

是重要的一行,它说你不能把文件放在你想要的地方,这通常意味着权限问题

检查运行应用程序的进程(通常是 php 的 webservers 进程)是否有权在其中写入文件。

编辑:

稍等一下,我有点过分了,第一行文件的路径是否正确?

于 2008-08-06T16:15:21.637 回答
1

另一个需要注意的是您的目录分隔符,您在 Windows 框中使用 / ..

于 2009-02-12T17:14:23.050 回答
1

在“转储”文件夹安全权限组中添加 IIS 用户,并为其授予读/写访问权限。

于 2009-12-03T04:12:43.020 回答
0

使用文件夹权限创建一个名为“image”的文件夹777

<?php
    move_uploaded_file($_FILES['file']['tmp_name'],"image/".$_FILES['file']['name']);
?>
于 2012-11-16T12:51:29.290 回答
0

我们发现使用以下路径

{['DOCUMENT_ROOT'] + 'path to folder'

并让每个人都可以完全访问该文件夹,从而解决了这个问题。

确保不要在地址栏中显示位置。放弃位置没有任何意义。

于 2019-12-05T17:59:49.113 回答