代码之家  ›  专栏  ›  技术社区  ›  Max Kielland

无法将文件上载到Apache 2.2

  •  0
  • Max Kielland  · 技术社区  · 8 年前

    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升级到新版本,因为这是一个生产中的应用程序,客户不会冒险升级。

    1 回复  |  直到 8 年前
        1
  •  1
  •   jszobody    8 年前

    临时文件仅在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

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