php脚本执行需路径、权限、解释器三者匹配;cli模式适合调试和定时任务,web模式依赖服务器正确配置php处理器,且cli与web环境的php.ini独立,php 7.2已停止支持存在安全风险。

php 命令能直接执行脚本,但前提是路径、权限、解释器三者都对得上——不是“装了就能跑”,而是“配对了才跑通”。
命令行执行 php 脚本(CLI 模式)
这是最可控的方式,适合调试、定时任务或数据迁移。
- 先确认
php命令可用:终端输入php -v,应输出PHP 7.2.x;若报错,说明没加环境变量或路径不对(如 Windows 下需手动把D:\php7.2加进系统 PATH) - 脚本第一行加 shebang(Linux/macOS 推荐):
#!/usr/bin/env php,然后运行chmod +x script.php,再执行./script.php - Windows 不认 shebang,老实用
php script.php;别用双击或资源管理器打开,那会触发浏览器下载源码 - 常见错误
Could not open input file:多数是当前工作目录不对,建议脚本开头加echo getcwd();确认实际路径 - 参数通过
$argv获取,$argv[0]是命令本身(如php script.php中为script.php),$argv[1]开始才是传入参数
Web 服务器中执行(Apache/Nginx + PHP-FPM)
浏览器访问空白页、下载 .php 源码,基本等于 Web 服务器根本没把请求交给 PHP 处理。
- Apache:确认启用了
mod_php或配置了SetHandler,且.php后缀被正确映射;改完配置必须sudo systemctl reload apache2 - Nginx:关键看
location ~ \.php$块是否存、是否含fastcgi_pass(如unix:/var/run/php/php7.2-fpm.sock或127.0.0.1:9000);改完要sudo nginx -s reload - PHP-FPM 必须在运行:
sudo systemctl status php7.2-fpm,状态不是active (running)就得sudo systemctl start php7.2-fpm并设开机自启 - 快速验证:建个
info.php,内容仅<?php phpinfo(); ?>,能显示页面说明链路通;若下载文件,问题一定出在 Web 服务器配置层
CLI 和 Web 环境的 php.ini 完全不同
别假设两个环境共用同一份配置——它们通常加载的是两套独立文件,连扩展都可能不一样。
- 查 CLI 配置路径:
php --ini,输出类似Loaded Configuration File: /etc/php/7.2/cli/php.ini - 查 Web 配置路径:在
phpinfo()页面里找Loaded Configuration File,通常是/etc/php/7.2/fpm/php.ini或/etc/php/7.2/apache2/php.ini - 典型差异:
display_errors在 CLI 默认关闭,Web 开发环境常开;memory_limitCLI 常设为-1,Web 端多为128M;$_SERVER['DOCUMENT_ROOT']在 CLI 下根本不存在,要用__DIR__定位路径
PHP 7.2 的兼容性与废弃警告
PHP 7.2 已于 2020 年 11 月结束官方支持,现在运行它意味着主动承担安全风险和扩展兼容问题。
- 某些新扩展(如
mysql_xdevapi)虽支持 PHP 7.2,但依赖libprotobuf、zstd等较新系统库,CentOS 7 默认源可能不满足版本要求 - 编译安装时,
libzip必须 ≥ 0.11,否则configure直接失败;Ubuntu 18.04 可用apt install libzip-dev,CentOS 7 需手动升级 -
session.cookie_httponly和session.cookie_samesite在 PHP 7.2.0 后默认值变化,若依赖旧行为,需显式在php.ini中设值
真正麻烦的不是“怎么跑起来”,而是跑起来后发现 CLI 和 Web 行为不一致、扩展加载失败、或某天突然因底层库更新而崩掉——这些坑往往藏在配置分离和版本边界里,而不是脚本第一行。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











