经常我们在访问php的页面的时候会出现500,那么我们应该怎么解决这个问题呢?
首先,我们先来看下http 500 状态码的意义(以下摘抄自网络):
HTTP 500 – 内部服务器错误
HTTP 500.100 – 内部服务器错误 – ASP 错误
HTTP 500-11 服务器关闭
HTTP 500-12 应用程序重新启动
HTTP 500-13 – 服务器太忙
HTTP 500-14 – 应用程序无效
HTTP 500-15 – 不允许请求 global.asa
我们可以看出,出现500状态码是由于服务器内部出现了问题,所以才导致了服务器无法正确返回数据进行服务。
当php网页出现的问题的时候,我们可以通过查看网站容器的日志来定位问题所在,然后解决问题:
下面是我在平时使用时遇到的两个php 500的问题,然后通过检查日志解决了问题:
一、
[Mon Feb 29 05:30:01 2016] [error] [client 104.**.**.83] Directory index forbidden by Options directive: /var/www/html/ [Mon Feb 29 05:30:02 2016] [error] [client 104.**.**.83] File does not exist: /var/www/html/favicon.ico, referer: http://*****/ [Mon Feb 29 05:30:37 2016] [error] [client 104.**.**.83] PHP Fatal error: Call to undefined function phpinf() in /var/www/html/info.php on line 1 [Mon Feb 29 05:30:39 2016] [error] [client 104.**.**.83] PHP Fatal error: Call to undefined function phpinf() in /var/www/html/info.php on line 1
我们可以发现,是由于info.php的代码出现了问题,我把phpinfo()函数写错了,系统无法识别该函数,导致服务器内部错误,返回500状态码,更正后,访问正常。
二、
[root@gwbtest ~]# tail /etc/httpd/logs/error_log [Wed Jan 07 17:47:12 2015] [error] [client 192.168.3.2] PHP Fatal error: Call to undefined
function mb_detect_encoding() in /var/www/phpmyadmin/libraries/php-gettext/gettext.inc on line 177
我们发现是缺少mb_detect_encoding()这个函数,这个是由于缺少mbstring.so文件导致的,安装php-mbstring:
yum install -y php54w-mbstring
(注:对于这里使用php54w,请参见CentOS/RHEL 上使用YUM安装高版本的php这篇文章)
安装完成后,如果还有问题的话:
到/etc/php.ini文件中添加 extension这个值,我的是
xtension_dir = /usr/lib64/php/modules
extension=/usr/lib64/php/modules/mbstring.so
我们可以看到当网站遇到问题了,查看日志是个很好的方法,当然前提是你开启了日志记录功能。并且日志可以帮你查出被攻击的方法和手段,说不定能抓到0day哦~~