近期使用Thinkphp5.1做项目,在本地测试完好的代码,放到服务器上就500错误,开启显示PHP错误日志也不会有任何信息显示出来。最后发现是文件夹读写权限的问题(罪魁祸首是TP5.1的ROOTPATH识别有误)。我的thinkphp路径是/wwwroot/thinkphp/,入口文件路径是/wwwroot/web2/index.php,TP5的ROOTPATH会判断为/wwwroot/。而TP5加载时需要访问2个目录EXTEND_PATH 扩展类库目录(默认为 ROOT_PATH . ‘extend/’) 和VENDOR_PATH 第三方类库目录(默认为 ROOT_PATH . ‘vendor/’) 就会出错。本来应该是/wwwroot/thinkphp/extend,它却要去访问/wwwroot/extend,自然就要出错了。vendor目录也是这样。
解决方法:
1、把整个/wwwroot/目录的访问权限赋予给整个站点。但是如果整个目录下有多个站点,会有一定的安全隐患。
2、在/wwwroot/目录下建立vendor和extend两个目录,并且给站点增加访问/wwwroot/vendor/ 、/wwwroot/extend/这两个目录的的权限。
3、打开thinkphp下thinkphp/library/think/Loader.php文件,找到getRootPath()整个函数(在60行附近)。这个函数目前的逻辑是如果入口文件所在目录内有think这个文件名,rootpath就是当前目录(对应入口文件在TP框架根目录的情形);如果入口文件所在目录内没有think整个文件名,rootpath就取值为它的父目录(对应入口文件在TP框架public目录内的情形)。然而它没有考虑到入口文件不在TP框架内的情形。可以根据自己的需要修改以下这个函数。
4、暂时没有验证,不知道TP5能不能自定义EXTEND_PATH、VENDOR_PATH、ROOT_PATH 的路径。
最新评论