PHP常见的6个错误提示及解决方法
在php开发过程中,由于不知道向谁求助而心慌意乱地判断以为自己不适合学php。其实错误在每个人学习过程中都会碰到的,千万不要妄自菲薄。很多错误在报错的代码提示中已经告诉我们了,仔细看,不会就百度。现总结一些常见的php错误,以共享php新人。
Php常见错误提示
一、Fatalerror:Calltoundefinedfunction……
函数不存在,可能的原因:
1、系统不存在这个函数且你也没自定义
2、有人会问,我在别的机器上就不报错。那是因为环境不同,这个函数在本机没开,怎么开?你百度函数名字,就能查到这个函数属于哪个dll,去php.ini里开启。
实例讲解:PHPFATALERROR:CALLTOUNDEFINEDFUNCTIONBCMUL()解决办法
在一台处理网络支付的服务器迁移的时候,发现不能支付。
PHP环境:
PHP版本为5.3.3
系统为RedHat4.1.2-54
查看apache的错误日志,发现是加密文件中一个函数bcmul()报错:
PHPFatalerror:Calltoundefinedfunctionbcmul()in/php_rsa.phponlinexxx
解决办法:
使用如下命令:
yuminstallphp-bcmath
就安装好了。
如果出现下面这种情况:
Loadedplugins:fastestmirror Loadingmirrorspeedsfromcachedhostfile *base:mirrors.yun-idc.com *extras:mirrors.yun-idc.com *rpmforge:ftp.riken.jp *updates:mirrors.yun-idc.com SettingupInstallProcess ResolvingDependencies -->Runningtransactioncheck --->Packagephp-bcmath.x86_640:5.1.6-40.el5_9settobeupdated -->ProcessingDependency:php-common=5.1.6-40.el5_9forpackage:php-bcmath -->Runningtransactioncheck --->Packagephp-common.x86_640:5.1.6-40.el5_9settobeupdated -->ProcessingConflict:php53-commonconflictsphp-common -->FinishedDependencyResolution php53-common-5.3.3-13.el5_9.1.x86_64frominstalledhasdepsolvingproblems -->php53-commonconflictswithphp-common Error:php53-commonconflictswithphp-common Youcouldtryusing--skip-brokentoworkaroundtheproblem Youcouldtryrunning:package-cleanup--problems package-cleanup--dupes rpm-Va--nofiles--nodigest
就需要使用yumupdate之后再yuminstallphp53-bcmath就好了
顺便了解了一下,bcmath这个函数是PHP数学扩展中的一个。可以使用bcscale()来设置全局默认的小数位数,具体用法如下:
stringbcmul(string$left_operand,string$right_operand[,int$scale])
例子:
<?php echobcmul('1.34747474747','35',3);//47.161 echobcmul('2','4');//8 ?>
此函数在php.ini中的选项:
[bcmath] ;Numberofdecimaldigitsforallbcmathfunctions. ;http://www.php.net/manual/en/bc.configuration.php#ini.bcmath.scale bcmath.scale=0
二、syntaxerror,unexpectedT_STRING,expecting……
严重语法错误,例如syntaxerror,unexpectedT_STRING,expecting','or';'inF:\phpnow\htdocs\index.phponline4
后边标着行号,自己去检查那一行的标点就行
如果是第三行echo1后边没加;,报错会报online4,online4,就是第四行
实例讲解:
其实,这是一个非常容易解决掉的问题。在我看来,似曾相识,呵呵,最近学JavaScript可是学会了使用var声明变量。
其实,
在外部使用var就报错Parseerror:syntaxerror,unexpectedT_VARin...,例如我的出错信息:
Parseerror:syntaxerror,unexpectedT_VARinD:\Apache2.2\htdocs\shirdrn\page\p2\pageUtil.inconline34
我在测试:在一个类的内部,使用一个自己定义的类对象作为这个类的成员时,出错了。
Address类对应的address.inc代码:
<?php classAddress{ var$road; functionAddress(){} functionsetRoad($road){ $this->road=$road; } } ?>
Person类及其测试代码为person.php如下:
<?php require("address.inc"); classPerson{ var$name; var$address; functionPerson(){ } functiondisplay(){ echo"Name:".$this->name."<BR>"; echo"Road:".$this->address->road."<BR>"; } } var$p=newPerson(); $p->address=newAddress(); $p->address->setRoad("ChagnchunRoad"); $p->name="Shirdrn"; $p->display(); ?>
测试输出现异常:
Parseerror:syntaxerror,unexpectedT_VARinD:\Apache2.2\htdocs\shirdrn\page\p2\pageUtil.inconline34
呵呵:-)
其它网友的补充方法:
问题解决:syntaxerror,unexpectedT_STRING,expectingT_OLD_FUNCTIONorT_FUNCTIONorT_VARor前两天开始自己php之旅,做一个很普通的网站,结果我们的php是5.0版本,服务器是4.0版本,纳闷死咯。昨天忙了一天,今天早上一来,在一篇文章发现了,解决方法。Parseerror:syntaxerror,unexpectedT_STRING,expectingT_OLD_FUNCTIONorT_FUNCTIONorT_VARor'}',如果有“public”,就将“public”去掉。就不会出错,如果“public”是定义变量的话,将“public”改为“var”。
三、Parseerror:syntaxerror,unexpectedT_VARIABLEinXXX.phponlineXXX
这条语句是PHP常见的报错,一般是在XXX行的上一行,或者是XXX行,缺少分号。或者在双引号中使用双引号,且没有转义等等。
解决方法:找到XXX.php的XXX行,按照上面的分析,找到自己的错误,改正即可。
贴士:作为编程人员,要做到代码严谨,思维清晰,并且细心。人非圣贤孰能无过,但尽量避免这些因为粗心出现的错误,这样才能成为合格的程序员。
四、Parseerror:syntaxerror,unexpected'X'inXXX.phponlineXXX
这条语句依然是PHP常见的报错,报错原因是在XXX.php的XXX行,出现了PHP无法识别的字符。常常是因为function,if等需要‘{'、‘}'的地方没有闭合,或者在编程的时候,不小心在‘;'的后面误打了几个字符。
解决方法:找到XXX.php的XXX行,删除多出的字符,添加缺少的字符即可。
五、syntaxerror,unexpected$end
逻辑忘了闭合 这个报错还有个特征,他会提示你最后一行代码报错,譬如你一共30行,他就告诉你online30,这时候你别检查第三十行,你要把30行挨个,检查一遍,看看哪个标签没闭合。
一共3000行,他就告诉你online3000,这时候你别检查这3000行了,如果你程序排版很乱,在3000行里找哪个括号是个很麻烦的事……我教你一招:ctrl+actrl+dalt+f4
好了,你现在可以重写了。
另一种思路:
Parseerror:syntaxerror,unexpected$endinscript.phponlinexx
调试了一会后发现产生错误的行是文件中间某行
//$str.="?>\n";
想起来了PHP解释器允许的结尾标记那行还可以用单行注释,即//$str.="?>\n";被解释成结尾标记前有注释,注释的内容是//$str.=",而?>后面的\n";会被解释作PHP块外的内容按HTML输出出去!结果是给$str.="?>\n";这行添加//成注释后,反而多了个?>的结束标记,造成原来真正的结束标记成了意料之外的(unexpected)了。
解决办法就是直接删掉这一行即可。
PHP开始和结束标记所在行别写其它东西,是个好习惯。
六、Notice:Undefinedvarialbe:……
这是一个比较常见的错误,解决方法:error_reporting调整错误级别,
以上就是为大家分享的PHP常见的6个错误提示,给大家提供了大概的解决思路和方向,希望对大家的学习有所帮助。