天天看点

php file_put_contents 根目录权限,关于php:file_put_contents权限被拒绝-没有777的解决方案吗?...

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

move_uploaded_file($tempfile, $newfile)

然后,将根据此图像/视频自动创建缩略图,并将其上传到服务器,如下所示:

file_put_contents($thumbname, $thumbnail)

现在,图像的上传可以正常工作,但是缩略图无法保存,我得到以下响应:

Warning: file_put_contents(thumbnails/1.jpg): failed to

open stream: Permission denied in

SITEURL/upload.php on line 17

我的两个问题:

为什么用户具有通过move_uplaoded_file上传图像但通过file_put_contents上传缩略图的权限?请注意,图像和缩略图这两个文件都被上载到同一文件夹。用户是否应该既没有权限又没有权限?

我确实意识到已经有一个这样的线程,但是建议的答案是运行chmod 777。但是我读到将文件夹设置为777始终存在安全风险。没有777,有没有办法解决此问题?

同样,我不明白为什么我必须将file_put_contents的权限更改为777,而move_uploaded_file在755才能正常工作。

chmod -R u+rwx,g-rw,o-x thumbnails向所有者授予读取,写入和执行权限,但拒绝对组和其他用户执行执行访问。 chmod足够强大,可以更仔细地管理权限。 比777更仔细,那可以肯定

@EliasVanOotegem是chmod -R 766的老手吗?

@NiettheDarkAbsol:是的,但是我发现u+rwx和g-wx表示法更加清晰:_U_ser,_G_roup,_O_ther,_A_ll,+用于授予,-用于拒绝和_R_ead,_W_rite,e_X_ecute。 ..(当然,您知道这一点,但是此说明是针对OP ;-P的)

@EliasVanOotegem足够公平-也许我只是一个"数字"人物,因为我发现766更容易理解XD

@NiettheDarkAbsol:对于每个人,只要我们都同意最好避免使用chmod -R 777,那么一切都很好

@EliasVanOotegem同意。 chmod -R 777与eval差不多是"问题解决" ...

采用:

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

php代码给了我www-data,所以我将缩略图的用户从root更改为www-data。 而且有效! 非常感谢!!

@ user3041398很高兴我可以帮助您:)请考虑接受此答案^ _ ^