首页 文章

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

提问于
浏览
1

我正在使用一个页面,用户可以使用表单上传图像/视频 . 代码包括以下行:

move_uploaded_file($ tempfile,$ newfile)

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

file_put_contents($ thumbname,$ thumbnail)

现在上传图像效果很好,但缩略图无法保存,我得到了这样的响应:

警告:file_put_contents(缩略图/ 1.jpg):无法打开流:第17行的SITEURL / upload.php中的权限被拒绝

我的两个问题:

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

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

1 回答

  • 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应该能够写入该文件夹 .

相关问题