王志勇 发表于 2019年06月21日 16:17
经过几天的持续调试,我的电脑终于完成PHP 7.X的环境安装+一键还原。昨晚排查出了PHP 5.X和PHP 7.X写法的不同,主要是由于从PHP 7.1开始,其报错规则非常严格。只要一个变量不存在,当调用它时,就会报错。数组的名称,也不能与已有的变量同名(如果有,PHP 7.X必须先清除数组)。这种严格的报错规则,多见于其它的语言。PHP之所以让开发者感到轻松,就是因为无需每次都声明变量。
接下来的工作,需要对所有的程序都逐一排查,对于需要声明变量的地方,全部进行修补。
几个PHP 5.X和PHP 7.X不同的例子。
实例1:比如Feedval的表头文件/t/h.php,在这个位置,$a='';$a[$c1]=' style=background-color:#08AD45;color:#FEFFF8';
原来PHP 5.X只要这样写一句:$a='';就可以防止数组与变量同名。
但在PHP 7.X这样写会报错,因为$a[]这个数组,共有4个值,这4个值代表的是表头的4个导航按钮的背景色,当某个值存在时,背景色为绿色,其余3个值为空。这时,PHP 7对这种空值会报错。修改后,只能这样写,给这4个值都填充上:
$a=array();for ($i=1;$i<=4;$i++) $a[$i]='';
实例2:高频常用的语句,例如需要写入Cookies,需要先获取当前域名,用来给整个域名写入Cookies,PHP 5.X只要这样写,不会有任何报错:
$h=explode('.',$_SERVER['HTTP_HOST']);$i=count($h);$cka='.'.$h[$i-2].'.'.$h[$i-1];
到了PHP 7.1,如果在本机调试,就会报错。因为$_SERVER['HTTP_HOST']是获取域名,本机的域名称为localhost,而explode检测不到域名中含有的点,于是报错,所以PHP 7.X的语句只能改成这样,防止域名中的点不存在:
$a=$_SERVER['HTTP_HOST'];$cka=$a;if (strpos($cka,'.')){$t=explode('.',$a);$i=count($t);$cka='.'.$t[$i-2].'.'.$t[$i-1];}
在PHP 7.1,变量不存在而引用,引起的报错,可以用error_reporting(0);来屏蔽,程序可正常运行。这种报错,我还是需要一一全部修改,而不用error_reporting(0);来解决。因为即使使用了error_reporting(0);语句,在广大用户的主机上的Apache、或PHP错误日志上,可能会频繁写入,使错误日志文件迅速增大。所以,完美的程序需要避免所有的报错写法。
但是数组与变量同名,而未清除引起的报错,PHP 7.X无法用error_reporting(0);屏蔽,程序无法运行。
置顶的文章:
股骨头坏死的中早期修复方法
Windows流畅度300%以上体感的操作
超低价享受i7-7700的体验
家用电脑理性优化升级天梯图之2026
服务器版Linux系统的选择之2026
秒会+实战PHP程序设计培训(2)
如何快速自制CPU天梯图?
我不明白你明不明白我明白(明白不)
最好的音乐播放硬件
如何打造全静音台式电脑之2026
近期的主题:
年度网络焦点人物黄仁勋/AI行业
重要测试:Debian 13.0
人生讨论(29):判断装修瓦匠是不是×德的方法
Nginx与.htaccess(2)
最漂亮的女华人是谁?
测试http3、Debian 11/12/13
DIY(35-5):干扰源终于找到
https利弊(7):建站税
博客又有活儿得干了:双服务器备份
支架设计(2):功放机+航空头的支架
数码评测(81):停电引起电脑损坏如何防止?
Debian 12.0的“致命”bug
数码评测(80):最好用的平价鼠标和维修/改装
这次的PHP大漏洞/淡定的PHPer们
“明白不”的心理机制(2)
博客/网页有没有必要做访问量统计?
数码评测(79):如何打造全静音台式电脑之2026
AI编程和人工编程的差别
世界上最好的二级域名
数码评测(78):最好的音乐播放硬件
版权声明:本博客所有文章,均符合原创的定义,禁止转载,违者将必究;正确的方法是贴原文的标题和网址即可。
与此相关的链接
自由勇专栏
Blog存档 Archives
2025年-2026年03月(10)
2024年(13)
2023年 +