PHP file_put_contents:failed to open stream: Permission denied

clipboard.png

环境:
PHP:5.6.31
系统:Ubuntu
THinkPHP5
LNMP一键安装包

问题描述:
经常出现这个没有缓存文件没有权限打开

已经尝试过:
chown -R www.www 目录

chmod -R 777 目录

但只能一时生效,过段时间还会出现

错误原因推测:
我写了一些定时任务,不知道是不是定时任务生成的缓存文件

阅读 6.3k
5 个回答

应该是定时任务执行后对权限进行了更改,例如你的定时文件 start.sh 可操作用户是 user,当他执行的时候,所有被操作的文件夹及文件都会归属用户都会变成user,或者无法操作。

查看你的定时任务是否需要写入文件,如果有,那么使用用户权限是什么?

web目录权限一般会设置为www,如果定时任务是有root执行的,那么定时任务操作过的文件www用户是没有权限修改的

定时任务如果没有特殊需求,只需要执行web目录里的代码和修改该目录的文件,那么定时任务的执行用户可以修改为www

定时任务crontab指定执行用户

定时任务执行的时候估计你是root用户执行,php-fpm用户不同的话是不可以写入的。建议定时任务写入完之后执行

chmod($filename,666);

运行其他用户读取和写入

Permission denied:没有权限
虽然你

chown -R www.www

但是你PHP的运行用户是www嘛?
定时任务的话,你可能手动php task.php了,那php的用户可能是root了

我是用laravel 的php artisan config:cache和php artisan config:clear,在删除缓存文件后运行,就解决了,当初大体原因是在开发的时候,本地开发后把整个项目上传上去,导致服务器记录的缓存文件不存在,删除并重置后就解决了,菜鸟一枚,答案不知道对不对,你可以尝试去查下这方面tp有没有解决办法

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题