为何PHP 5.4.45服务器仍可运行eregi函数及无引号SESSION代码?
PHP 5.4版本兼容问题解析
1. eregi函数警告差异问题
- 原因:
eregi()在PHP 5.3.0被标记为弃用,但并未直接从PHP 5.4版本中移除,是否触发警告完全由error_reporting配置决定。服务器的PHP 5.4.45大概率关闭了E_DEPRECATED错误级别,所以运行时不会弹出警告;而本地PHP 5.4.25的error_reporting包含了E_DEPRECATED,因此会触发弃用提示。 - 解决:直接替换为
preg_match(),注意eregi()是不区分大小写匹配,所以preg_match()要加上/i修饰符,示例:
原代码:eregi('test', $content)
替换后:preg_match('/test/i', $content)
2. $_SESSION数组键无引号的报错问题
- 原因:PHP中未加引号的数组键(如
$_SESSION[newsession])会被优先解析为常量,找不到对应常量时才会降级当作字符串处理。本地环境的error_reporting开启了E_NOTICE级别,会抛出“Undefined constant newsession”的警告;服务器环境可能关闭了该级别,所以不会报错。这种写法本身属于不规范语法,PHP 7+版本会直接报错。 - 解决:严格给数组键添加单引号或双引号,规范写法为
$_SESSION['newsession']或$_SESSION["newsession"]。
内容的提问来源于stack exchange,提问作者ที ที
相关产品推荐
相关产品推荐

