下载Yii2 安装包到Liunx,发现如果用localhost/basic/web
是可以访问
但是如果用www.basic.com
就访问不了.页面会提示500,如下
www.basic.com is currently unable to handle this request
然后上Stack Overflow找了下发现只要修改下php.ini(注意保存源文件)
修改下面2个位置
display_errors = 1 //默认是 off
error_reporting = E_ALL //默认E_ALL & ~E_DEPRECATED & ~E_STRICT
然后就可以看到错误提示啦..开心!
Warning: require(): open_basedir restriction in effect. File(/home/wwwroot/default/basic/vendor/autoload.php) is not within the allowed path(s): (/home/wwwroot/default/basic/web/:/tmp/:/proc/) in /home/wwwroot/default/basic/web/index.php on line 9
Warning: require(/home/wwwroot/default/basic/vendor/autoload.php): failed to open stream: Operation not permitted in /home/wwwroot/default/basic/web/index.php on line 9
Fatal error: require(): Failed opening required '/home/wwwroot/default/basic/web/../vendor/autoload.php' (include_path='.:/usr/local/php/lib/php') in /home/wwwroot/default/basic/web/index.php on line 9
有提示错误就好办了,问题在open_basedir()这里
网上资料显示修改
usr/local/php/etc/php.ini
/usr/local/nginx/conf.fastcgi.conf //在这里修改
发现最底下有一行配置信息
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:tmp/:/proc/';
在这里后面加上我们需要修改的目录即可啦啦啦啦啦~
fastcgi_param PHP_ADMIN_VALUE "open_basedir=$document_root/:tmp/:/proc/:/home/wwwroot/default/basic/';
关于open_basedir()资料
将 PHP 所能打开的文件限制在指定的目录树,包括文件本身。本指令不受安全模式打开或者关闭的影响。
当一个脚本试图用例如 fopen() 或者 gzopen() 打开一个文件时,该文件的位置将被检查。
当文件在指定的目录树之外时 PHP 将拒绝打开它。
所有的符号连接都会被解析,所以不可能通过符号连接来避开此限制。
特殊值 . 指明脚本的工作目录将被作为基准目录。但这有些危险,因为脚本的工作目录可以轻易被 chdir() 而改变。
在 httpd.conf 文件中中,open_basedir 可以像其它任何配置选项一样用“php_admin_value open_basedir none”的方法关闭(例如某些虚拟主机中)。
在 Windows 中,用分号分隔目录。在任何其它系统中用冒号分隔目录。作为 Apache 模块时,父目录中的 open_basedir 路径自动被继承。
用 open_basedir 指定的限制实际上是前缀,不是目录名。
也就是说“open_basedir = /dir/incl”也会允许访问“/dir/include”和“/dir/incls”,如果它们存在的话。
如果要将访问限制在仅为指定的目录,用斜线结束路径名。例如:“open_basedir = /dir/incl/”。
总结下, 可以有几种方式设置限制包含目录
1)php.ini open_basedir = /home/wwwroot/
2)ini_set 注意:PHP >5.2.3+ PHP_INI_ALL ,不建议使用,这么设置太随意了。
3)apache 的 httpd.conf 中Directory配置
"php_admin_value open_basedir none" #关闭
php_admin_value open_basedir "/home/wwwroot/:/tmp/:/var/tmp/:/proc/"
httpd.conf中VirtualHost
php_admin_value open_basedir "/home/wwwroot/:/tmp/:/var/tmp/:/proc/"
4)nginx fastcgi.conf
fastcgi_param PHP_VALUE "open_basedir=$document_root:/tmp/";
5).user.ini 文件
设置方法同 1 .
备注: 可以用
chattr -i ./user.ini
进行解锁文件,然后修改里面的目录路径.这个我经常用.简单,只是缺陷也很明显 .
以上关于open_basedir()的资料来自简书,[作者:codefine 地址]..(http://www.jianshu.com/p/ac80cf3b5169)