LNMPA环境下Thinkphp5.1莫名500错误的解决方法

近期使用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 的路径。

 

 

此条目发表在linux, WEB技术分类目录,贴了标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据