PHP move_uploaded_file 权限仅在 RHEL 上被拒绝

PHP move_uploaded_file 权限仅在 RHEL 上被拒绝

我的 PHP 脚本用于用他的照片注册新用户。

在 Debian 上,一切都很好,但是当我在我的服务器 RHEL 上安装时,问题就开始了。

目录 /tmp/ 权限为 777,“upload/”权限为 777,chown apache:apache。

下面是 httpd 的 error_log 的片段:

[Wed Jun 07 15:25:29.363766 2017] [:error] [pid 22867] [client 10.31.242.73:49624] PHP 警告: move_uploaded_file(upload/1268_org.jpg): 无法打开流: /var/ 中的权限被拒绝www/html/inc/classes/user.inc.php 第 76 行,引用地址:http://10.31.242.72/index2.php?mnu=10041

[Wed Jun 07 15:25:29.363808 2017] [:error] [pid 22867] [客户端 10.31.242.73:49624] PHP 警告:move_uploaded_file():无法将 '/tmp/phpmY6k8j' 移动到 'upload/1268_org.jpg ' 在 /var/www/html/inc/classes/user.inc.php 第 76 行,引用地址:http://10.31.242.72/index2.php?mnu=10041

我不知道有什么问题。也许我跳过了什么?

答案1

我找到了解决方案这个网站 这是SELinux罪魁祸首。我刚刚通过键入以下内容将 httpd_sys_rw_content_t 添加到上传目录:semanage fcontext -a httpd_sys_rw_content_t "/var/www/html/upload(/.*)?"

答案2

chdir()在移动文件之前有吗?如果您没有这样做,该文件将被移动到“upload/1268_org.jpg”,但相对于 /var/www/html/inc/classes,这会导致移动到/var/www/html/inc/classes/upload/1268_org.jpg, 并且绝对不是您想要的位置。

解决办法:移动前先chdir,或者使用绝对路径。

相关内容