php为了安全性考虑,有一项 open_basedir 的设置。该项配置限制require()访问的路径。 open_basedir
将php所能打开的文件限制在指定的目录树中,包括文件本身。当程序要使用例如fopen()或file_get_contents()打开一个文件时,这个文件的位置将会被检查。当文件在指定的目录树之外,程序将拒绝打开
出现以下错误:
解决该项问题,需要增加open_basedir配置,具体有以下两种解决办法:
1. 在php.ini中配置。
此项配置针对所有项目
;open_basedir =
如果发现配置项前是有分号,表明php.ini中没有该设置。
那就很可能是在 php-fpm 中的 fastcgi.conf中配置了。php-fpm中的配置会覆盖php.ini的配置。
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root:/tmp/:/proc/:/you_web_path";
/you_web_path 是你要添加的让php可以访问的路径。多个路径直接分号隔开
2.项目根目录中通过 .user.ini 进行配置。
此项配置只针对单个项目
step1 : 要使.user.ini生效,要设置php.ini 中的
user_ini.filename = ".user.ini"
user_ini.cache_ttl = 300
关于这两个配置的意义,请看php手册 http://php.net/manual/zh/configuration.file.per-user.php
step2 :注释掉 fastcgi.conf 中的 open_basedir 的配置。
step 3: 在项目根目录 创建 .user.ini文件,写入如下内容
open_basedir=/tmp/:/proc/:/you_web_path
/you_web_path 是你要添加的让php可以访问的路径。多个路径直接分号隔开
step4: 重启一下php-fpm 服务即可。
注:
php-fpm的配置 php_admin_value[*] 会覆盖php.ini中的配置。
如果在lamp架构中浏览器访问php文件的php_info()函数,如果在php-fpm相关配置文件中配置了与php.ini相同的参数,那么local
value和master value都会显示该php-fpm覆盖掉php.ini之后的值。
参考文档:https://www.jianshu.com/p/a862ce3d13fb
http://www.884358.com/open_basedir/