




PHP 5.3 以下版本的 json_encode 不支持 JSON_UNESCAPED_UNICODE 等标志,传入会返回 false 且不报错;5.2 及更早版本无 json_last_error 函数,难以排查错误。
json_encode 报错或行为异常PHP 5.3 以下版本的 json_encode 不支持 JSON_UNESCAPED_UNICODE 等标志,传入会直接返回 false,且不报错,容易误判为数据为空。更老的版本(如 5.2)甚至没有 json_last_error 函数,无法排查失败原因。
php -v 或在脚本中用 PHP_VERSION_ID 判断JSON_INVALID_UTF8_IGNORE 等 7.2+ 才支持的选项,低版本可先用 mb_convert_encoding($data, 'UTF-8', 'UTF-8') 预清洗arr
ay_column 和 password_hash 缺失怎么办这两个函数分别在 PHP 5.5 和 5.5.0 引入,低版本直接调用会触发 Fatal error: Call to undefined function。不能靠条件判断绕过,必须提前补全或替换实现。
array_column 可用 foreach 手动提取,注意键名保留逻辑(是否用原数组键作新数组键)password_hash 推荐引入 ircmaxell/password-compat Composer 包(兼容 PHP 5.3.7+),它会在运行时自动降级到 crypt + 盐值生成md5 或 sha1 自行“模拟”密码哈希——安全性归零__DIR__ 的兼容写法PHP 5.2.6 开始支持 __DIR__,但部分老旧环境(如某些共享主机)仍禁用或未更新。命名空间在 5.3 才引入,5.2 项目强行升级到新版框架(如 Laravel 5.1+)会直接无法启动。
__DIR__:用 dirname(__FILE__),两者语义等价且 5.0 就存在Database_MySQL_Connector),并配合 __autoload(5.1.2+)或 spl_autoload_register(5.1.2+)加载mysql_*)又不能升级 PHP 怎么办PHP 7.0 彻底移除了 mysql_connect 等函数,但很多老站还跑在 PHP 5.2 上,此时不是“能不能用”,而是“该不该继续用”。即使能运行,也已无安全更新、无漏洞修复。
立即学习“PHP免费学习笔记(深入)”;
mysqli 或 PDO:二者在 PHP 5.0 就已内置,只需重写数据库操作层,不依赖 PHP 版本升级db_query),内部根据 PHP 版本选择驱动,把 mysql_* 调用隔离出去mysqli 面向对象写法在 5.0+ 可用,但过程式写法(mysqli_connect)更接近旧习惯,迁移成本更低intl 或 mbstring 扩展,而旧服务器根本没启用。上线前务必用 php -m 核对扩展列表,别只盯着 PHP 主版本。