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很高兴我可以帮助您:)请考虑接受此答案^ _ ^

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
`file_put_contents` 是一个 PHP 函数,用于将字符串写入文件中。该函数接受两个参数:第一个参数是要写入的文件名,第二个参数是要写入文件的内容。例如: ``` <?php $file = 'example.txt'; $data = '这是要写入文件的内容。'; file_put_contents($file, $data); ?> ``` 这段代码将字符串 `$data` 写入到名为 `example.txt` 的文件中。如果文件不存在,该函数会自动创建它。如果文件已经存在,该函数会覆盖原有的内容。 除了将字符串写入文件中,`file_put_contents` 还可以用来将数组和对象写入文件中。如果第二个参数是一个数组或对象,该函数会自动将它转换为字符串,然后写入文件中。例如: ``` <?php $file = 'example.txt'; $data = array('apple', 'banana', 'orange'); file_put_contents($file, $data); ?> ``` 这段代码将数组 `$data` 转换为字符串,然后写入到名为 `example.txt` 的文件中。注意,如果要写入的内容是数组或对象,需要在第三个参数中指定 `FILE_APPEND` 标志,以确保内容被追加到文件末尾,而不是覆盖原有的内容。例如: ``` <?php $file = 'example.txt'; $data1 = array('apple', 'banana', 'orange'); $data2 = array('pear', 'grape', 'kiwi'); file_put_contents($file, $data1); file_put_contents($file, $data2, FILE_APPEND); ?> ``` 这段代码先将数组 `$data1` 写入文件中,然后将数组 `$data2` 追加到文件末尾。最终,文件中的内容为: ``` apple banana orange pear grape kiwi ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值