必须安装php-cli而非仅php,因Debian 11默认源中php包不含命令行支持;验证用php -v和which php;crontab中须用绝对路径如/usr/bin/php,并确保脚本路径也为绝对路径。

直接用 php 命令运行脚本,但必须确认装的是 php-cli
Debian 11 默认源里装的 php 包不自动带命令行支持,只装 php 会发现 php script.php 报错:Command 'php' not found。真正需要的是 php-cli。
- 先检查是否已安装 CLI:运行
php -v,如果提示未找到命令,说明没装php-cli - 正确安装方式:
sudo apt install php-cli(不是只装php) -
php-cli会自动依赖并安装核心 PHP 运行时,无需额外装php包 - 验证:执行
which php应返回/usr/bin/php,且php -v显示版本号
crontab 里执行 PHP 脚本,路径必须写绝对路径
很多人在 crontab -e 里写 * * * * * php /home/user/script.php,结果脚本静默失败——因为 cron 环境里没有 $PATH,找不到 php 命令。
- 永远用
/usr/bin/php(运行which php确认路径) - 脚本路径也必须是绝对路径,不能用
~/script.php或相对路径 - 加日志重定向排查:
0 2 * * * /usr/bin/php /var/www/backup.php >> /var/log/backup.log 2>&1 - 注意权限:确保 cron 用户对脚本和所有包含文件有读取权限,对输出目录有写入权限
Web 方式访问时,php-fpm 和 Web 服务器配置要匹配 PHP 版本
Debian 11 默认装的是 PHP 7.4 或 8.x(取决于系统更新状态),但 Apache/Nginx 配置里写的 socket 路径或模块名可能对应旧版本,导致 502 或空白页。
- 查当前启用的 PHP-FPM 版本:
ls /var/run/php/,常见如php8.2-fpm.sock - Apache 用户需确认启用了对应模块:
sudo a2enmod php8.2(不是php7.4) - Nginx 配置中
fastcgi_pass必须指向实际存在的 socket 文件,比如unix:/var/run/php/php8.2-fpm.sock - 改完配置后,要分别重启服务:
sudo systemctl restart php8.2-fpm和sudo systemctl restart nginx(或apache2)
调试时别只看浏览器,先用 php -l 检查语法
PHP 脚本在 Web 下报 500,或 CLI 下直接退出没输出,大概率是语法错误。但浏览器不会告诉你哪一行错了,php -f 也不会默认显示解析失败细节。
立即学习“PHP免费学习笔记(深入)”;
- 用
php -l script.php快速检测语法:返回 “No syntax errors detected” 才算过第一关 - 开启错误显示(仅开发环境):
php -d display_errors=1 -d error_reporting=E_ALL script.php - Web 环境下,检查
error_log设置(php --ini找到php.ini,确认log_errors = On和error_log = /var/log/php_errors.log) - 注意:CLI 和 Web 使用的
php.ini文件通常不同,php --ini和php -i | grep 'Loaded Configuration File'结果可能不一样
实际执行中最容易被忽略的,是 CLI 和 Web 两套环境各自加载的 php.ini 完全独立——同一个扩展在 CLI 下可用,Web 下却没加载,这种问题不会报错,只会静默失效。



















