【问题标题】:Can't upload file to Apache 2.2无法将文件上传到 Apache 2.2
【发布时间】:2016-06-09 01:52:55
【问题描述】:

Apache/2.2.15 (Win32) PHP/5.3.2

我正在尝试将文件上传到 Apache,我的 PHP 脚本告诉我一切正常(状态代码 0),但该文件不在临时目录中。无论文件大小如何,PHP 的答案总是会立即出现。 PHP 错误日志根本不显示任何错误。

Apache 服务器在其自己的用户帐户上运行,具有对日志和文档文件夹的完全访问权限。

PHP.ini

file_uploads = On
upload_tmp_dir =
upload_max_filesize = 10M
upload_tmp_dir="C:\WINDOWS\Temp"

发送.html

<!DOCTYPE html>
<html>
  <body>

  <form enctype="multipart/form-data" action="upload.php" method="post" >
    <input type="hidden" name="MAX_FILE_SIZE" value="10000000" />
    Send this file: <input name="userfile" type="file" />
    <input type="submit" value="Send File" />
  </form>

  </body>
</html>

上传.php

<?php
  // In PHP versions earlier than 4.1.0, $HTTP_POST_FILES should be used instead
  // of $_FILES.

  echo '<pre>';
  print_r($_FILES);
  echo '</pre>';
?>

结果是这样的

Array
(
    [userfile] => Array
        (
            [name] => strings.lua
            [type] => application/octet-stream
            [tmp_name] => C:\WINDOWS\Temp\phpC0.tmp
            [error] => 0
            [size] => 9935
        )

)

文件 C:\WINDOWS\Temp\phpC0.tmp 不存在。

还有其他我遗漏的注意事项/配置吗? Apache 服务器已经使用 PHP 运行了 5 年以上,并且在所有其他方面都运行良好。我无法将 Apache 或 PHP 升级到较新版本,因为这是生产中的应用程序,客户不会冒险升级。

【问题讨论】:

    标签: php apache2 uploading windows-server-2003


    【解决方案1】:

    临时文件只存在于您的 PHP 脚本 upload.php 结束之前。这确实是暂时的。

    您应该立即使用move_uploaded_file 移动文件:

    http://www.php.net/move_uploaded_file

    类似:

    $savePath = "path/where/you/really/wantit/" . $_FILES['userfile']['name'];
    
    move_uploaded_file($_FILES['userfile']['tmp_name'], $savePath);
    

    从此链接:

    http://us3.php.net/manual/en/features.file-upload.post-method.php

    如果文件没有被移走或重命名,该文件将在请求结束时从临时目录中删除。

    【讨论】:

    • 所以 PHP 脚本结束后文件从临时目录中删除?
    • @MaxKielland 是的。你必须马上处理它,否则它就消失了。
    猜你喜欢
    • 2019-11-03
    • 2020-10-05
    • 2020-06-12
    • 1970-01-01
    • 2020-01-08
    • 2017-10-14
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多