windows上写好的php程序放linux服务器上,各种500错误,阿西吧~~
没办法,来一步一步排错吧。
开启php 500错误详情显示
服务器返回500 ( 服务器内部错误),而不是返回错误提示。这时候需要对开发环境做一些配置,帮助你快速查找问题原因,定位问题,解决问题。
1、找到 php的配置文件 /etc/php.ini
配置参数值:
display_errors = On
error_reporting = E_ALL | E_STRICT
2、再配置下 apache /etc/httpd/conf/httpd.conf
在 apache的配置文件最后添加 两行:
php_flag display_errors on
php_value error_reporting 2039
重启apache服务 service httpd restart
这个时候 浏览器已经可以输出错误信息了。
对php.ini 中参数的设置 也可用在php代码中完成。
调用:调用ini_set()函数
//开启php.ini中的display_errors指令
ini_set(‘display_errors’,1);
//通过error_reporting()函数设置,输出所有级别的错误报告
error_reporting(E_ALL);
这样可用动态的,在指定的php文件中,输出错误。
大小写问题
首要问题,别忘了linux下对大小写敏感啊,比如你的css,js的文件名和路径的大小写,你的conn文件等,还是乖乖用小写吧。
date.timezone没设置
“It is not safe to rely on the system’s timezone settings.”抛出了这一串东西。
如果使用PHP5.3以上版本时,如果没有正确的配置php.ini就会出现PHP日期函数的错误。
实际上,从PHP 5.1.0,当对使用date() 等函数时,如果 timezone 设置不正确,在每一次调用时间函数时,都会产生 E_NOTICE 或者 E_WARNING 信息。而又在 PHP 5.1.0 中,date.timezone 这个选项,默认情况下是关闭的,无论用什么PHP 命令都是格林威治标准时间,但是PHP 5.3 中好像如果没有设置也会强行抛出了这个错误的,解决此问题,只要本地化一下就行了。
一、在页头使用date_default_timezone_set()设置 date_default_timezone_set(‘PRC’); //东八时区 echo
date(‘Y-m-d H:i:s’);
二、在页头使用 ini_set(‘date.timezone’,’Asia/Shanghai’);
三、修改 php.ini(如果是 windows 系统,那么文件在 C 盘,Windows 目录下,假如系统是安装在 C 盘)。使用记事本打开 php.ini 查找 date.timezone 去掉前面的分号修改成为:date.timezone = PRC
重启http服务(如apache2或iis等)即可!
推荐使用第三种方法。
php开始结束标记不配对
一、PHP 遇到 syntax error, unexpected $end 错误时,查错思路其实还是看看文件里 PHP 的开始标记和结束标记是否配对,还要额外注意注释里是否出现过 ?> 哟。
Parse error: syntax error, unexpected $end in script.php on line xx
调试了一会后发现产生错误的行是文件中间某行
//$str .= “?>\n”;
想起来了 PHP 解释器允许的结尾标记那行还可以用单行注释,即 //$str .= “?>\n”; 被解释成结尾标记前有注释,注释的内容是 //$str .= “,而 ?> 后面的 \n”; 会被解释作 PHP 块外的内容按 HTML 输出出去!结果是给 $str .= “?>\n”; 这行添加 // 成注释后,反而多了个 ?> 的结束标记,造成原来真正的结束标记成了意料之外的(unexpected)了。
解决办法就是直接删掉这一行即可。
PHP 开始和结束标记所在行别写其它东西,是个好习惯。
二、注意有没有 ?>写法。
php的开启表识有 ?> (短标签), <?php ?>, , (asp风格)
提倡的是<?php ?>, 禁用 ?>,因为短标签会破坏原生xml模板,例如<?xml version=”1.0″ ?>会被当作php
?>这种写在php配置文件里php.ini法叫short_tags,默认是不打开的,在默认配置的php里,这样写法不被认为是php脚本的,除非设置short_tags=on。而<?php ?>是永远可以使用的。最好还是用<?php ?>吧。
mysql_fetch_array() expects
在mysql数据库连接时碰到Warning: mysql_fetch_array() expects …错误提示,是sql返回的query为空了,我们没有加己判断直接使用了.
mysql_fetch_array()函数导致的,一起来看问题解决方案,原本代码如下:
include(“conn.php”);
if(!empty($_GET[‘id’])){
$sql=”select * from news where `id`='”.$_GET[‘id’].”‘”;
$query=mysql_query($sql);
$rs = mysql_fetch_array($query);
}
提示错误了:Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in xxx on line 32
对代码进行升级,代码如下:
if(!empty($_GET[‘id’])){
$sql=”select * from news where `id`='”.$_GET[‘id’].”‘”;
$query=mysql_query($sql);
if( mysql_num_rows( $query )
{
$rs = mysql_fetch_array($query);
}
else
{
mysql_error();
}
}
这样就会看到mysql错误信息了,结果是sql语句有问题了,把sql语句进行修改就可以了.
提示:导致这类错误是我们语法不规范了,如果要处理只有对sql进行一条条输出处理或在mysql_query(sql) or die(mysql_error()) 这样来处理,以便更准确的定位错误。