我正在尝试在 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']
返回 trueis_uploaded_file
为$_FILES['file']['tmp_name']
返回 trueopen_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/