php从windows往linux迁移注意事项

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 ?>, <script language=”php”></script>, <% %>(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()) 这样来处理,以便更准确的定位错误。

转载请注明原作者,如果你觉得文章对你有帮助或启发,也可以来请我喝咖啡

点赞

发表评论

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