服务器环境:LNMP
PHP:7.1
linux:centos
mysql:5.5
需要说明的是,环境配置成功后,网站已经可以访问了,由于我的根目录直接指定到public的,因此,public下的其它txt文件,ico图标都可以访问,我也新建了一个phpinfo.php文件,同样也可以访问。只有访问index.php的时候才出现“http error 500";
500:服务器内部错误,原因也很多!
一、首先我先检查环境
php和nginx都是启动正常,而且php和nginx日志都没有报任何的错误;从而说明不是php和nginx的原因;
二、重新修改nginx.conf根目录位置:
记住,这里修改时,一定不要把根目录定到public下,因为有时候直接定到public也有一些问题,具体为什么我也不知道;经验吧!
- server
- {
- listen 80 default_server;
- #listen [::]:80 default_server ipv6only=on;
- server_name _;
- index index.html index.htm index.php;
- root /home/wwwroot/www.webtuzi.com;
- ......
- }
注意:一定要重启nginx;
三、php.ini 开启错误调试
由于我的日志不报任何错误,而且打开index.php也不报任何错误,只报500,这怎么能行?不知道错误又如何解决问题呢?
打开php.ini,在合适位置添加“display_errors:On”
- display_errors:On
- ; display_errors
- ; Default Value: On
- ; Development Value: On
- ; Production Value: Off
注意:一定要重启php,php.ini配置才会生效。
三、再次访问index.php出现:
“scandir() has been disabled for security reasons”;
解决“scandir() has been disabled for security reasons”方法:
出现这个问题,那是因为php禁用了scandir()这个函数,我们只需要不禁用它即可。
可以通过查看phpinfo(),确认scandir()函数是否被禁用?下图则是禁用状态:
1、打开php.ini,一般默认位置是在/usr/local/php/etc/php.ini
2、找到“disable_functions”,并删除后面的“scandir”;
3、保存并退出,重启php-fpm即可!
五、再次去访问“http://www.webtuzi.com/public/index.php”已经成功!
六、再重新把根目录定到public下看看如何?
- server
- {
- listen 80 default_server;
- #listen [::]:80 default_server ipv6only=on;
- server_name _;
- index index.html index.htm index.php;
- root /home/wwwroot/www.webtuzi.com/public;
- ......
- }
我们重启nginx后,再去访问网站,发现又出现了“500”错误。看来是不能直接定到public下面了。
如果这一步你可以成功,那就恭喜你了!
有很多人会问:为什么我就可以直接定到public上,你就不行呢?
具体为什么,我是真不知道。但是我相信还是有很多人不能直接把根目录定到public上吧。我多多少少还是遇到到这样的事情的!这不,今天又让我遇到到了这种情况吗?