php - move_uploaded_file 返回 false 但 $_FILES 错误为 0

标签 php linux file-upload upload

我正在尝试在 Linux 机器上部署一个使用 CodeIgniter 框架构建的 PHP 项目。

由于某种原因无法将上传的文件从临时文件移动到指定目录。

信息

  • PHP 7.2.19
  • 中央操作系统 7
  • CodeIgniter 3.0.6

注释

  • 我已检查目标包含目录是否存在(不存在与要移动的文件同名的重复文件)。
  • 我已经检查了目录的权限,应该没问题(我将组设置为 apache,权限 = 所有者用户)
  • 查看ACL,与普通权限一致。
  • $_FILES['file']['error'] = 0(调用 move_uploaded_file 前后)
  • file_exists$_FILES['file']['tmp_name'] 返回 true
  • is_uploaded_file$_FILES['file']['tmp_name'] 返回 true
  • open_basedir 未设置
  • 上传的文件小于帖子和文件上传限制。

最后要提的是,振作起来,该站点存在另一个副本(部署在具有不同目录名称的同一服务器上)并且上传工作正常。区分两个目录以捕捉不同但没有发现任何东西(除了一些带有一些更新的 View ,与配置无关,.htacess 无论如何)。

关于我应该看什么的任何线索?

更新1

代码:

    $createdFileName = NULL;
    $files = $_FILES;
    if (count($files) > 0) {
        $createdFileName = $this->GUID();
        $target_file = './upload/' . $createdFileName;
        $path_info = pathinfo($files["file"]["name"]);
        if (isset($path_info['extension'])) {
                $ext = $path_info['extension'];
        } else /*if (!$ext)*/ {
            $ext = substr($files['file']['type'], strrpos($files['file']['type'], '/') + 1);
        }
        $success = move_uploaded_file($files["file"]["tmp_name"], $target_file);
        if (!$success) {
            $result = json_encode(array('result' => FALSE, 'message' => 'Couldn\'t upload image file'));
        }
    }

这是与其他项目一起工作的代码,而不是与我正在处理的项目一起工作的代码。

我通过远程调试项目了解了 error 和其他值。

更新2

以下是上传目录的权限

drwxrwxr-x. 2 demoroot apache 4.0K Jun  9 14:06 upload/

下面是getfacl的输出:

# file: upload/
# owner: demoroot
# group: apache
user::rwx
group::rwx
other::r-x

最佳答案

解决方案是运行以​​下命令

chcon -R --type httpd_sys_rw_content_t /path/to/upload/directory

我完全不知道这是干什么的,也不知道为什么在 getfacl 输出看起来没问题但没有运行命令的情况下我必须运行它。

关于php - move_uploaded_file 返回 false 但 $_FILES 错误为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56516116/

相关文章:

PHP 警告 : PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/memcached.so' -/usr/lib64/php/modules/memcached. 所以

linux - GDB 没有在 SIGSEGV 上中断

reactjs - 如何使用strapi上传文件并获取URL?

file-upload - Yii 文件字段为空

php - Codeigniter 多个文件上传困惑文件扩展名

php - Bootstrap Toggle 使用 AJAX 无需刷新页面即可更改 MySQL TINYINT

PHP mysql查询判断不回显重复部分

linux - 命令行打开一个窗口

PHP $_POST 验证

linux - 如何运行一个 shell 来停止当前进程?