首页 > 解决方案 > 为什么我不能用 PHP 上传文件?

问题描述

我无法在 CentOS 服务器上上传 PHP 文件。这是脚本的一个非常基本的版本。它没有显示错误,但上传的文件在 /tmp 中不存在。

<?php
  echo "<pre>";
  print_r($_FILES);
  echo "</pre>";            
  move_uploaded_file($_FILES['image']['tmp_name'],"/tmp/uploaded");
?>

<html>
   <body>
      <form action="" method="POST" enctype="multipart/form-data">
         <input type="file" name="image" />
         <input type="submit"/>
      </form>
   </body>
</html>

/tmp由具有权限 drwxrwxrwt 的 root 所有。SELinux 是允许的。我验证了 apache 用户可以在这里写sudo -u apache touch /tmp/asdf

upload_tmp_dir未在 php.ini 中定义,因此我希望它使用系统默认值/tmp。我用 验证了这一点sys_get_temp_dir()

$_FILES变量看起来不错:

Array
(
    [image] => Array
        (
            [name] => antergos.jpeg
            [type] => image/jpeg
            [tmp_name] => /tmp/phpqhhhxL
            [error] => 0
            [size] => 924202
        )

)

我尝试添加一个sleep(10),以便在脚本完成之前有时间检查,并且它没有向/tmp.

标签: php

解决方案


您必须在 php.ini 中定义 upload_tmp_dir 否则它将不起作用。


推荐阅读