核心是将php.exe所在目录(如C:\php)加入系统PATH,并配置php.ini中memory_limit、max_execution_time、date.timezone三项及extension=扩展启用;CLI必须用NTS版,验证需通过php -v、php -r、php test.php和php -m四步。

Windows上让php命令在任意目录下可用,核心就一件事:把php.exe所在目录加进系统Path环境变量,并确认php.ini配置合理。其他所谓“安装向导”“服务注册”“自动配置”全是干扰项——PHP CLI本身不依赖任何服务或图形界面。
怎么确认你下载的是适合CLI的PHP版本
Windows下必须选非线程安全(NTS)版本,官网windows.php.net/download/提供的ZIP包里明确标有nts字样,比如php-8.3.12-nts-Win32-vs17-x64.zip。TS版本是给IIS用的,CLI模式下跑TS不仅多余,还可能触发Warning: Module 'xxx' already loaded这类扩展加载冲突。
- 别下错架构:x64系统优先选
x64包,x86(32位)包在Win11上已基本不可靠 - 解压后检查根目录是否存在
php.exe和php.ini-development——没有php.exe就说明你解压错了子目录 - 不要用XAMPP或WAMP里的
php.exe:它们默认指向Web SAPI,php -v输出里会带(apache2handler),不是CLI
Path环境变量配置后命令仍无效的常见原因
输入php -v报“不是内部或外部命令”,90%以上是环境变量没生效,而不是路径填错了。
- 必须新开一个CMD或PowerShell窗口:已打开的终端不会自动读取新
Path - 检查是否误加了
\php.exe结尾:Path里只填目录(如C:\php),不能带可执行文件名 - 多个PHP版本共存时,
where php能列出所有命中路径,优先级按Path顺序从上到下;删掉旧版本路径或调换顺序即可 - 如果用的是Git Bash,它不读Windows
Path,得手动在~/.bashrc里加export PATH="/c/php:$PATH"
php.ini必须改的三项配置(CLI专用)
CLI模式读取的是独立的php.ini文件,通常由php --ini命令显示位置。别直接改Apache或XAMPP里的那个。
立即学习“PHP免费学习笔记(深入)”;
-
memory_limit = 512M:CLI脚本常处理大文件或数据库导出,128M默认值容易Fatal error: Allowed memory size exhausted -
max_execution_time = 0:设为0表示不限时,避免Maximum execution time of 30 seconds exceeded中断长任务 -
date.timezone = "Asia/Shanghai":不设时区会导致strtotime()、date()等函数警告,且Composer等工具会拒绝运行
改完记得用php --ini确认加载的是你编辑的那个文件,再用php -m看mysqli、curl等扩展是否已启用——CLI和Web模式的扩展开关是分开控制的。
验证CLI环境是否真正可用
别只信php -v,那只能说明解释器存在。真实可用要过三关:
- 执行
php -r "echo 'OK';":绕过文件IO,验证解析器本身没问题 - 写个
test.php,内容<?php echo getcwd(); ?>,然后php test.php:确认脚本能读取、执行、输出 - 运行
php -m | findstr "openssl"(Windows)或php -m | grep openssl(Git Bash):验证关键扩展是否加载成功,很多Composer包或HTTP客户端依赖它
最易被忽略的是:PHP CLI默认不加载php.ini里的extension_dir指向的扩展,除非你在php.ini里显式启用了对应extension=行。哪怕.dll文件就在ext/目录下,不写那行extension=,php -m里也看不到。



















