【问题标题】:File doesn't upload to localhost via PHP文件不通过 PHP 上传到本地主机
【发布时间】:2012-07-11 14:39:35
【问题描述】:

我无法使用 PHP 将文件上传到本地主机。我创建了简单的 html 表单和 php 脚本。但是我收到了这些错误消息。

'import.html'

<html>
    <body>
        <form action="import.php" method="POST" enctype="multipart/form-data">
            <p>
                <label for="file">Choose import.xml</label><br/>
                <input type="file" name="import" id="import" /></p>
            <p><input type="submit" name="submit" value="Submit" /></p>
        </form>
    <body>
</html>

'import.php'

<?php
    if ($_FILES["import"]["error"] > 0)
    {
        echo "Return Code: " . $_FILES["import"]["error"] . "<br />";
    }
    else
    {
        echo "Upload: " . $_FILES["import"]["name"] . "<br />";
        echo "Type: " . $_FILES["import"]["type"] . "<br />";
        echo "Size: " . ($_FILES["import"]["size"] / 1024) . " Kb<br />";
        echo "Temp file: " . $_FILES["import"]["tmp_name"] . "<br />";

        if (file_exists("upload/" . $_FILES["import"]["name"]))
        {
            echo $_FILES["import"]["name"] . " already exists. ";
        }
        else
        {
            move_uploaded_file($_FILES["import"]["tmp_name"],
            "upload/" . $_FILES["import"]["name"]);
            echo "Stored in: " . "upload/" . $_FILES["import"]["name"];
        }
    }

?>

错误信息:

警告:move_uploaded_file(upload/import.xml) [function.move-uploaded-file]:打开流失败:没有这样的文件或 第 20 行 C:\xampp\htdocs\teecom\admin\import.php 中的目录

警告:move_uploaded_file() [function.move-uploaded-file]:无法 将 'C:\Windows\Temp\phpD02C.tmp' 移动到 'upload/import.xml' 中 第 20 行 C:\xampp\htdocs\teecom\admin\import.php 存储在: 上传/import.xml

【问题讨论】:

  • 所以它会告诉你问题出在哪里。您是否质疑该目录存在且可写?
  • 我猜是(a)您的网络服务器在上传目录中没有写入权限,或者(b)您需要为上传目录使用绝对路径而不是"upload/"跨度>
  • C:\xampp\htdocs\teecom\admin\upload\ 目录是否存在??
  • 临时目录为:C:\Windows\Temp\phpD02C.tmp。但是,我认为 apache 没有读取/写入该目录的权限。我找不到可以更改该目录的位置。
  • 嗯,C:\xampp\htdocs\teecom\admin\upload\ 存在。 C:\windows\temp\ 也是如此。但是,我认为问题出在临时目录 C:\windows\temp\ 上。我认为我无权访问此目录。这就是为什么我想改变它。我已经更改了我能找到的所有 php.ini 文件。但它仍然上传到这个目录

标签: php html


【解决方案1】:

您似乎使用的是 Windows。

如果可能,我会将目标路径从相对路径更改为绝对路径。例如:

move_uploaded_file($_FILES["import"]["tmp_name"],
            "C:/upload/" . $_FILES["import"]["name"]);

或者试试路径:

$_SERVER['DOCUMENT_ROOT'] . '/upload/' . $_FILES['import']['name']

还可以先尝试创建 C:\upload\ 或 C:\xampp\htdocs\upload\ 目录,然后再尝试上传。

【讨论】:

    【解决方案2】:

    好吧,根据你的本地主机目录,你可以试试这个:

    if (!file_exists("teecom/upload"))
    {
        mkdir("teecom/upload", 0777, true);
    }
    if (file_exists("teecom/upload/" . $_FILES["import"]["name"]))
    {
        echo $_FILES["import"]["name"] . " already exists. ";
    }
    else
    {
        move_uploaded_file($_FILES["import"]["tmp_name"],
        "teecom/upload/" . $_FILES["import"]["name"]);
        echo "Stored in: " . "upload/" . $_FILES["import"]["name"];
    }
    

    【讨论】:

      【解决方案3】:

      您的文件显然没有上传到move_uploaded_file 函数应该从中移动它的临时文件夹。发生这种情况的原因有很多,最常见的原因是您没有对 PHP 正在使用的临时文件夹的写入权限。

      【讨论】:

      • @Waygood,好点子!但我在临时文件夹中找不到该文件。
      • @holdoc,我更改了 php.ini 文件,以便我有权访问临时文件夹。但是,错误消息仍然指向 C:\windows\temp\ 目录
      • 检查file_uploads、安全模式、最大帖子大小和upload_max_filesize。我发现以前在 Windows 上工作(现在是 linux),有时我不得不重新启动电脑,因为 apache 重新启动并不总是有效。
      • 还有一件事 - 不要试图在临时文件夹中查找临时上传文件,因为您找不到它们。请求完成后,所有临时上传文件都将被删除。
      • @holodoc 你是对的!现在我正在本地主机上测试这个上传问题。如果我快速从浏览器切换到文件管理器,该文件会出现在上传的文件目录中(文件大小也正确),但一秒钟后,当脚本完成时,它会被删除。是的,整个问题只是不存在目标目录。
      【解决方案4】:

      这是旧的,但是对于将来遇到此问题的人,我为我的 localhost (wamp) 所做的只是单击服务器图标,转到 PHP,PHP 设置,然后选择文件上传。

      这对我有用。

      【讨论】:

      • 如果您尝试上传大文件,请同时检查 php.ini 中的 upload_max_filesize = 2M
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 2016-12-14
      相关资源
      最近更新 更多