现在市面上流行的php框架(如thinkphp,yaf,ci等)都有统一的入口文件index.php,且一般都是都是放在public文件下,(public可能还有静态资源,方便权限控制)。nginx部署项目的时候,指向的根目录就是在public,
nginx配置:
root /www/xxxxx/public;
在PHP项目的入口文件index.php里面使用了realpath函数,一般是为了获取项目的真实路径,定义项目路径,如下:
realpath函数获取到/www/xxxxx/public的文件是正常,然而崩溃的事情的出现了,APP_PATH下的其他文件都是获取不到的,一直返回的是false,无权限访问。
原因:出于安全考虑,nginx做了跨站访问限制。
解决方案:
只需在 location ~ .*\.(php|php5)下添加如下配置:
fastcgi_param PHP_ADMIN_VALUE "open_basedir=/www/xxxx:/tmp/:/proc/";
/www/xxxx 即项目的根目录。