PHP版本过低会触发Deprecated警告大量出现、Composer安装失败报错、框架启动时抛出ParseError三类明确告警信号;需分CLI、FPM、Apache场景验证真实版本;监控须按项目级composer.json要求检测并自动告警。

PHP版本过低会触发哪些明确告警信号
PHP版本过低不是抽象风险,而是会直接暴露在日志、错误和兼容性断点上。最典型的三类信号:Deprecated警告大量出现(如mysql_connect()被弃用)、Composer安装失败报Your PHP version is too old、Laravel/Symfony等框架启动时抛出ParseError: syntax error, unexpected 'string'(因不支持PHP 7.4+的类型声明)。这些不是“可能有问题”,而是“已经失效”的明确证据。
用php -v和php --ini确认真实运行版本
运维中常见误判:Web服务器显示的是CLI版本,而fpm或apache模块用的是另一套安装。必须分场景验证:
- CLI环境:执行
php -v,注意输出首行的版本号(如PHP 7.2.34) - FPM环境:查
php --ini返回的配置路径,再看ps aux | grep php-fpm确认加载的是哪个php.ini - Apache模块:访问
phpinfo()页面,重点核对Loaded Configuration File和Server API字段
三者版本不一致时,监控脚本必须按实际Web入口路径调用对应PHP二进制(例如/usr/bin/php-fpm7.4 -v),否则告警永远滞后。
Shell脚本主动检测并触发企业微信/钉钉告警
单纯查版本没用,关键是要在低于阈值时自动通知。以下是一个生产可用的检测逻辑:
立即学习“PHP免费学习笔记(深入)”;
#!/bin/bash
PHP_BIN="/usr/bin/php"
MIN_VERSION="7.4"
CURRENT=$( $PHP_BIN -r "echo PHP_VERSION;" 2>/dev/null )
if [[ "$(printf '%s\n' "$MIN_VERSION" "$CURRENT" | sort -V | head -n1)" != "$MIN_VERSION" ]]; then
curl -X POST https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text", "text": {"content": "PHP版本过低:当前$CURRENT,要求>= $MIN_VERSION"}}'
fi
注意两点:sort -V做语义化版本比较(避免7.10 这种字符串误判);$PHP_BIN必须指向实际Web服务所用的PHP可执行文件,不能硬写php。
监控粒度要落到具体项目而非全局PHP
一个服务器跑多个项目时,“全局PHP 8.1”不代表所有项目安全。比如A项目用Laravel 9(需PHP 8.0+),B项目用ThinkPHP 5.1(只支持到PHP 7.4)。此时必须在每个项目根目录下检查composer.json里的require.php字段,并用composer check-platform-reqs验证运行时匹配度。漏掉这点,监控就只是自我安慰。











