排除故障费了很大的劲编写出来的程序,却只生成了令人困惑、意料不到的错误,显示了一串

headersalreadysentby  时间:2021-04-12  阅读:()
不能理解的错误信息,没有比这更头痛的了.
许多开发人员都经历过这种头痛.
所以本章将讨论一些读者可能遇到的问题,提出几个排除故障的策略.
18.
1安装故障的排除假定要访问PHP、MySQL或Apache,但却遇到了许多问题.
可能它们由于某种原因不能很好地合作,并显示出奇怪的错误.
也可能它们没有按照安装指令来工作.
在许多情况下,常见的错误或故障都在AMP中每个组件的网站上讨论过了.
网站还为用户使用的系统提供了详细的指导,读者最好仔细阅读它们,确保完全按照指令来安装.
如果配置PHP时遇到服务器找不到某个库的错误,建议检查如下内容:验证在配置命令中指定了正确的路径确保在机器上安装了该库及其所有从属文件确保在修改php.
ini或httpd.
cof文件后,重启动了Apache网络服务器(修改.
htaccess文件不需要重启动)18.
2解析错误读者肯定常常见到下面的信息:Parseerror:parseerror,expecting","or";"in/foo/public_html/forum/index.
phponline25这是该死的解析错误.
这很常见,甚至即使是有经验的编程人员也常常遇到它们.
即使使用最好的彩色编码PHP文本编辑器来帮助检查语法,也肯定会漏掉一两个解析错误.
这些错误非常令人沮丧,但它们通常是最容易改正的错误,因为它们常常是由于语法错误引起的,而不是逻辑错误.
可以通过检查是否遗漏了分号、逗号,或引号的位置有错误来第章18Web开发入门经典——使用PHP6、Apache和MySQL580改正这些错误.
18.
2.
1清理第16行,但其实第94行有错PHP显示解析错误时,会包含行号,这提供了解决问题的第一个线索.
但有时行号也会误导我们.
实际上,有时有错误的行会出现在服务器指定的行的前面几行.
例如,考虑某个遗漏的分号,由于没有分号告诉服务器语句已结束,服务器就会把后续的行串在一起.
服务器在数行代码后才发现问题,于是就在错误的行上发出一个解析错误.
遗漏了引号或括号,也会出现相同的情况.
例如下面的代码(已经添加了行号,以演示上述情况):1运行这个测试代码,得到的错误如下:Parseerror:parseerror,unexpectedT_VARIABLEinC:\Programfiles\ApacheSoftwareFoundation\Apache2.
2\HTDOCS\error.
phponline5为了便于演示,把上述脚本命名为error.
php,可以看出,服务器指出第5行有错,但实际上错误发生在第4行.
因为我们在第4行末遗漏了分号,所以第5行就被看作第4行的续行,因此,PHP被搞糊涂了.
18.
2.
2基本常识有时最简单的答案就是正确的答案.
确保完成了如下所有的工作:每个语句都以分号结尾所有的左引号、括号和花括号都有对应的右引号、括号和花括号匹配.
所有的单引号和双引号都正确嵌套和/或转义.
如果在编写代码时,定期检查语法,就会大大减少解析错误.
可以使用熟悉的PHP编辑器,在编写代码时,给程序显示彩色代码.
在拼错了函数名或者忘记关闭引号时,语法的突出显示就会使我们更容易识别这些错误.
我们用一个表格来比较了各种文本编辑器,其中一些支持对语法的突出显示,这个表格参见附录E.
18.
3空变量我们建立了一个很大的页面,从用户处收集了50个字段的信息,其中没有解析错误.
然后在线填充表单,并点击提交按钮.
下一个页面也正常加载,但唯一的问题是似乎没有把变量传送到新表单上.
第18章排除故障581这其实很常见.
第一个可能的原因是希望传送值,但忘记在表单上使用method="post".
因为表单默认使用的是get方法.
如何解决这个问题检查一下第二个页面的地址.
这些变量在查询字符串中吗如果在,就肯定在使用GET方法,此时就需要返回,把方法改为POST.
问题解决了.
18.
3.
1一致而有效的变量名首先应根据命名规则,确保变量名是合适而有效的,如第2章所述.
应该确保所有变量名都不以数字开头,也不应使用预定义的变量作为变量名,例如$php_errormsg.
预定义变量的完整列表可以在PHP手册www.
php.
net/manual/en/reserved.
variables.
php中找到.
另外应检查引用变量时名字的大小写,因为变量名是区分大小写的.
数据库和表名也是如此.
一定要确保正确、一致地引用它们.
如果修改了某个变量名,就应修改该变量名的所有实例.
如果在脚本中一直遵循某个命名规则,就很容易保证变量名的一致性.
这与第2章中讨论的优秀编码规则有关.
18.
3.
2打开一个新浏览器有时,如果在会话中工作,且处于脚本的测试阶段,就有外来的会话设置妨碍我们获得希望的结果,并修改变量值.
只有关闭网络浏览器,再打开一个新的浏览器,才可以清除所有的会话变量(假定没有修改配置文件,如第2章所述).
18.
4"标题已发送"错误用户可能会遇到如下错误消息:Warning:Cannotmodifyheaderinformation–headersalreadysentby(outputstartedatC:\Programfiles\ApacheSoftwareFoundation\Apache2.
2\htdocs\headererror.
php:1)inC:\Programfiles\ApacheSoftwareFoundation\Apache2.
2\htdocs\headererror.
phponline2在使用会话和cookie时,这是一个常见错误.
如果试图在给服务器发送HTML代码后设置它们,就会出现这个错误.
服务器必须在给浏览器发送HTML输出之前处理会话和cookie,也就是说,这些代码行必须放在HTML代码或echo语句的前面.
甚至在第一行代码如果不使用函数ob_start()和ob_end_flush(),则在重定向用户时,就会出现"标题已发送"错误.
这是由header.
php文件中的代码造成的.
可以看出,是逻辑出现了错误,因为我们把连接变量放在了一个单独的文件中,而没有和HTML代码放在一起,但这不是使网站不工作的致命设计错误.
因此我们可以欺骗系统.
初学者最好不要这么做,因为学习编写好的代码和遵循规则是最重要的,但比较有经验的编程人员则可以使用这组有用的函数.
如果要学习更多的输出缓冲区函数,可以参考附录C中的完整列表,或者访问www.
php.
net.
18.
5一般调试提示即使遇到最困难的错误我们也可以通过一定的方法,用无比的耐心来将其改正.
毕竟这只是代码,没有什么可怕的.
对于一般的调试,下面给出了一些提示,有助于解决许多讨厌的错误.
18.
5.
1使用echo显然,我们希望知道服务器的想法,看看它是如何考虑问题的.
一种方式是在代码中定期显示变量的内容,来验证服务器是否正确解析了代码.
可以在使用变量的过程中通过echo逐步显示变量的值,看看服务器如何在代码中处理值.
如果要对变量的值执行复杂的数学计算,但输出了错误的答案,这种方法就会很有帮助.
我们需要找出问题出在哪里,所以在数学计算的每一步中插入echo语句,验证服务器在执行数学计算时是否正确.
于是,我们会看到不断变化的变量值.
echo命令还可以用于if语句、foreach语句、函数等,以确保这些循环正确调用或处理.
第18章排除故障583下面是一个简单的例子,演示了echo如何帮助我们.
假定有如下脚本:在浏览器上运行这段代码,就得到数字38.
如果希望得到是40,或者想查看$abc变量是否正确,就可以通过在处理过程中显示变量的值,来检查程序是如何工作的,于是:';}echo$abc;>现在就会看到数字1~20和最初的答案38.
很容易看出,尽管$curr_var达到了20,但答案只处理了19次,所以会得到38.
此时,应把while语句改为:while($curr_var<=20){现在当$curr_var=20时,while语句也会处理,所以结果为40.
可以使用注释来提醒自己,在解决了问题后删除调试行,以避免在页面激活后给浏览器输出不想要的结果.
数组和对象引用虽然是变量,但显示它们时有点区别.
例如,如果使用echo输出一个数组,屏幕上就只会显示Array().
所以要查看数组的内容,应使用print_r()而不是echo.
print_r()会输出数组的每个成员,甚至多维数组也是如此.
对于对象引用,print_r()会显示对象的所有成员.
可以使用的另一个类似函数是var_dump().
18.
5.
2分而治之处理大问题的另一个好方法是把问题分解为基本的步骤,通过测试每个步骤,来确保每一步都得到正确的结果.
在复杂语句块的开头,一个小错误可能导致滚雪球效应,最终完全改变结果.
所以逐个步骤地检查,就可以找出这些小错误,最终得到希望的结果.
有时我们可以注释掉一段代码,看看脚本没有这段代码的运行情况,或者隔离出某个有问题的代码段来看看脚本的运行情况.
Web开发入门经典——使用PHP6、Apache和MySQL58418.
5.
3测试、测试、再测试许多编码人员都会在自己的系统上测试代码,只要这些代码可以在他们的设置下正常工作,他们就认为代码没有错误.
我们应尽可能使用每个不同的环境来测试代码,即不同的浏览器、不同的配置、不同的计算机系统等,以达到全面测试代码的目的.
如果知道相应的方法,甚至可以通过攻击自己的系统,来查找出某个对自己不太友好的人可能利用的安全漏洞.
18.
5.
4用Xdebug调试PHP有非常多的内省函数,可帮助我们调试系统,如var_dump()和print_r().
另外,还有Xdebug,这是PHP的一个强大扩展,它添加了额外的调试和配置功能.
Xdebug可以查看堆栈跟踪(PHP执行各种函数,到达某个点的路径)和代码覆盖信息,甚至可以与理解DBGp协议的调试客户机一起交互式调试脚本.
如前所述,Xdebug是一个扩展,默认不能用作PHP的一部分.
必须正确安装和配置Xdebug,才能使用它的功能.
Xdebug网站www.
xdebug.
org上有Xdebug的更多信息.
18.
6寻求帮助PHP、Apache和MySQL的用户社区非常有活力.
在其中可以在线获得许多资源,并在遇到问题时获得帮助.
前面曾经多次提到其中的一些资源,这里再次提及它们.
18.
6.
1www.
wrox.
com本书在一个附加的网站中提供了在线帮助,如果遇到问题,建议访问本书的姊妹网站www.
wrox.
com.
18.
6.
2PHPBuilder.
com网上有许多PHP帮助网站,但这里推荐PHPBuilder.
com.
在这个网站上,有许多文章、归档文件、有用的代码片段,最重要的是有一个发展成熟的、非常有帮助的在线社区,其中的编码人员来自世界各地,有不同的能力,用户可以很快地获得帮助.
其他地方也有活跃的、友好的社区,用户可以在他们的论坛上发贴子.
本书的一位作者也常常光顾PHPBuilder.
com,我们都是常规的撰写人,其中一些是协调员.
18.
6.
3源网站我们曾经多次提到这个建议,但与其他建议一样,无论怎样强调这个建议都不过分.
只要有问题,答案就可能在源网站上找到.
这些网站提供了非常全面的手册,包括软件的第18章排除故障585几乎所有信息.
下面再复习一下这些网站:PHP:www.
php.
net(提示:如果要查找函数的帮助,例如echo,就可以在浏览器中输入www.
php.
net/echo,这样就会进入echo页面)PHP还提供了MicrosoftWindowsHelp(CHM)格式的手册,这对Windows用户非常有用.
可以从www.
php.
net上下载该手册,并在本地机器上安装它.
Apache:httpd.
apache.
orgMySQL:www.
mysql.
com18.
6.
4搜索和求助如果在脚本中遇到问题,但并不是第一次遇到该问题,就可以使用搜索引擎,查找Internet上的文章、论坛上的贴子、教程或讨论该问题的其他信息.
这是一种非常快速、方便的方式,不需要推倒重来.
18.
6.
5IRC通道如果需要问题的即时帮助,IRC资源就是很好的解决方案.
有许多PHPIRC通道:例如,quakenet网络上的#php和#phphelp就是其中的两个.
18.
7小结错误总是会发生的,但在遇到错误时,一定不要气馁,而应耐心地检查代码,找出错误.
希望读者在遇到困难时,本章给出的提示能有助于读者调试程序,从而改正其中的错误.

RangCloud19.8元/月,香港cn2云主机,美国西雅图高防云主机28元/月起

rangcloud怎么样?rangcloud是去年年初开办的国人商家,RangCloud是一家以销售NAT起步,后续逐渐开始拓展到VPS及云主机业务,目前有中国香港、美国西雅图、韩国NAT、广州移动、江门移动、镇江BGP、山东联通、山东BGP等机房。目前,RangCloud提供香港CN2线路云服务器,电信走CN2、联通移动直连,云主机采用PCle固态硬盘,19.8元/月起,支持建站使用;美国高防云...

ReadyDedis:VPS全场5折,1G内存套餐月付2美元起,8个机房可选_服务器安装svn

ReadyDedis是一家2018年成立的国外VPS商家,由印度人开设,主要提供VPS和独立服务器租用等,可选数据中心包括美国洛杉矶、西雅图、亚特兰大、纽约、拉斯维加斯、杰克逊维尔、印度和德国等。目前,商家针对全部VPS主机提供新年5折优惠码,优惠后最低套餐1GB内存每月仅需2美元起,所有VPS均为1Gbps端口不限流量方式。下面列出几款主机配置信息。CPU:1core内存:1GB硬盘:25GB ...

hypervmart:英国/荷兰vps,2核/3GB内存/25GB NVMe空间/不限流量/1Gbps端口/Hyper-V,$10.97/季

hypervmart怎么样?hypervmart是一家国外主机商,成立于2011年,提供虚拟主机、VPS等,vps基于Hyper-V 2012 R2,宣称不超售,支持linux和windows,有荷兰和英国2个数据中心,特色是1Gbps带宽、不限流量。现在配置提高,价格不变,性价比提高了很多。(数据中心不太清楚,按以前的记录,应该是欧洲),支持Paypal付款。点击进入:hypervmart官方网...

headersalreadysentby为你推荐
iprouteip route-static 192.168.1.0 255.255.255.0 3.3.3.2什么意思centos6.5centos7和centos6.5的区别企业ssl证书公司购买SSL证书需要提交什么资料?一般要多久才能拿到证书flashfxp下载怎么用flashFXP下载空间内容ipad代理想买个ipad买几代性价比比较高传奇域名谁能帮忙查查传奇的IP和域名小型汽车网上自主编号申请如何从网上自选车牌号pintang俏品堂是干什么的?很多论坛都有他们的踪迹。qq头像上传失败昨天和今天QQ头像上传失败,是怎么回事?开源网店开源网店iWebMall中会员管理包括哪些只要内容呢?
紧急升级请记住新域名 vps优惠码 warez 老鹰主机 isatap sub-process ixwebhosting 云图标 anylink 可外链相册 tna官网 ca187 drupal安装 台湾google 路由跟踪 什么是web服务器 国内域名 测速电信 godaddy空间 存储服务器 更多