php访问项目外文件

前言:docker中做日志服务,因为镜像会随build消失,日志如果在项目里,也会消失,临时解决方法,把日志写在项目外的根目录下的logs文件夹中,挂载出来,结果死活写不进。

以下是网上搜的19个关键字,解决办法随着搜索的逻辑一点点出来的

  1. php 无法写入非项目目录下的文件
  2. php 写项目外的目录
  3. php怎么访问本地根目录外的文件
  4. php读取站外目录
  5. php 如何访问网站根目录以外的文件
  6. php可以访问/tmp
  7. php 日志文件写入项目外
  8. php访问项目外文件
  9. php 写入项目外的文件夹
  10. php 项目外文件夹的权限
  11. linux下 php访问项目外文件夹
  12. nginx open_basedir不生效
  13. php设置open_basedir,重启服务后不生效
  14. lnmp中遇到open_basedir配置无效问题
  15. “message”: “opendir(): open_basedir restriction in effect. File
  16. File(/) is not within the allowed pat
  17. LNMP下防跨站、跨目录安全设置
  18. php 如何进行环境隔离
  19. laravel日志写到项目外

从不报错到报错

有的时候,不报错才是最难的,首先,文件写不进,肯定有异常,异常不显示,肯定是关闭了报错信息。

ini_set(‘error_reporting’,E_ALL);ini_set(‘display_errors’,1);
先把报错打印出来。

从nginx权限开始

接受参数的第一步是nginx提供服务的80端口,是否是nginx用户所在用户组没有权限呢?查看nginx.conf,发现一切正常,查看fastcgi.conf,最底部有PHP的配置,fastcgi_param PHP_ADMIN_VALUE “open_basedir=/logsa/”;。前面加个#号注釋掉,继续。

文件夹是否有写权限

chmod 777 /logs,这个权限安排的明明白白。

php.ini配置(解决方法)

[PATH=/home/www/shop] open_basedir=/home/www/shop/:/tmp/:/logs/
两种任选一种,上面是绝对路径,下面是host映射
[HOST=dianpu.cn] open_basedir=/home/www/shop/:/tmp/:/logs/

重启后解决。

难点在2个,1是很久不开debug了,2是我用的环境是docker,给排查增加了一层难度。刚开始还以为是挂载的问题呢。其实docker就是一个独立的系统,路径就是/home/root之类的。windows下的C:\D:\在docker里写入,肯定是not found。

打赏作者

发表评论

电子邮件地址不会被公开。