file_put_contents权限被拒绝 - 没有777的任何解决方案?

时间:2014-07-22 10:37:39

标签: php file-permissions user-permissions

我正在处理用户可以使用表单上传图片/视频的页面。代码包括以下行:

  

move_uploaded_file($ tempfile,$ newfile)

然后从该图像/视频自动创建缩略图并上传到服务器,如下所示:

  

file_put_contents($ thumbname,$ thumbnail)

现在上传图片效果很好但缩略图无法保存,我得到了回复:

  

警告:file_put_contents(缩略图/ 1.jpg):失败了   开放流:权限被拒绝   第17行的SITEURL / upload.php

我的两个问题:

  1. 为什么用户有权通过move_uplaoded_file上传图片,但是通过file_put_contents上传缩略图会被拒绝?请注意,文件,图像和缩略图都会上传到同一文件夹。用户不应该同时允许同时执行这两项操作吗?

  2. 我确实已经知道有这样的线程,但建议的答案是运行chmod 777。但我读到将文件夹设置为777 始终存在安全风险。有没有办法解决这个问题没有777?
    同样,我不明白为什么我必须将file_put_contents的权限更改为777,而move_uploaded_file在755时工作正常。

1 个答案:

答案 0 :(得分:2)

使用:

// PHP code:
echo `whoami`;

找出用户运行PHP的用户。

然后检查拥有thumbnails

的服务器
# log in via SSH and run:
ls -l | grep thumbnails

这应该显示这样一行(取自我自己的服务器):

drwxr-xr-x 8 niet niet 4096 Jul 15 12:12 thumbnails

在上面的示例中,该文件夹归用户niet所有,位于组niet中。如果它与ealier中的whoami不同,则需要更改该文件夹的所有者。例如,如果whoami给了user3041398,你会这样做:

chown user3041398 thumbnails

再次运行ls行,您现在应该在输出中看到您的用户名,PHP应该能够写入该文件夹。