我的 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,或者使用绝对路径。