php脚本在windows 11下必须由php.exe解释执行或经web服务器处理,不可双击运行;cli模式用于命令行执行,web sapi模式需通过http://localhost访问,两者配置与php.ini独立。

PHP 脚本在 Windows 11 下不能像 .exe 或 .bat 那样双击运行,也不能直接拖进浏览器打开——它必须由 php.exe 解释执行,或经由 Web 服务器(如 Apache)处理后输出。关键判断:你想要的是命令行运行(CLI),还是浏览器中访问(Web SAPI),两者路径完全不同。
用命令行直接执行 PHP 脚本(CLI 模式)
这是最轻量、最常用于自动化、调试和本地开发的方式。前提是 php.exe 已加入系统 PATH,且能被识别。
- 确认 PHP 是否可用:打开 PowerShell 或 CMD,输入
php -v;若提示“不是内部或外部命令”,说明环境变量没配好(需将 PHP 安装目录如C:\php或C:\xampp\php加入PATH) - 执行脚本:进入脚本所在目录,运行
php your-script.php;也可用绝对路径,如php C:\projects\test.php - 传参支持:脚本内可通过
$argv获取参数,例如运行php script.php hello world,$argv[1]就是hello - 注意工作目录:PHP CLI 默认以当前命令行所在路径为
getcwd(),相对路径文件操作(如include 'config.php')依赖于此,别误设成 Apache 根目录
在浏览器中访问 PHP 文件(Web SAPI 模式)
这是 Web 开发的标准流程,但极易因访问方式错误导致“显示源码”。根本原因:浏览器只负责展示 HTML,不执行 PHP;PHP 必须由 Web 服务器调用解释器生成结果后再返回。
- ❌ 绝对不要双击 .php 文件,也不要右键 → “在浏览器中打开”——这走的是
file://协议,Apache 和 PHP 均未介入 - ✅ 正确做法:把文件放进 Web 服务器根目录(XAMPP 是
C:\xampp\htdocs\,WAMP 是C:\wamp64\www\),启动 Apache,然后在浏览器访问http://localhost/your-script.php - 验证是否生效:新建
info.php,内容为<?php phpinfo(); ?>,访问http://localhost/info.php应看到配置页,而非源代码 - 常见错觉:“我改了文件关联,.php 现在默认用 Chrome 打开”——这毫无意义,
file://下 Chrome 永远只当它是文本
让 PHP 脚本定时自动运行(Task Scheduler)
Windows 内置任务计划程序是稳定可靠的选择,比写批处理或 PowerShell 包一层更可控。
- 核心命令行格式:
C:\php\php.exe -f "C:\scripts\task.php";-f参数明确指定文件模式执行 - 在“任务计划程序”中创建基本任务 → 操作选“启动程序” → “程序或脚本”填
php.exe全路径,“添加参数”填-f "C:\scripts\task.php",“起始于”填脚本所在目录(影响__DIR__和相对包含) - 务必勾选“不管用户是否登录都要运行”并“只在本地运行”,否则任务可能静默失败;建议启用日志重定向(如加
> C:\logs\task.log 2>&1) - 测试前先在 CMD 中手动运行一遍完整命令,确认无报错、路径可读、权限足够(尤其涉及数据库连接或文件写入时)
把 PHP 脚本做成 Windows 服务长期运行(NSSM 方式)
适合需要后台持续监听、不依赖用户会话的场景(如简易 API 服务、队列消费者),但复杂度明显上升,别为简单定时任务折腾这个。
- 必须用管理员权限运行 NSSM GUI(如
nssm install MyService),否则服务无法注册 - “Path”填
php.exe或php-cgi.exe路径,“Arguments”填脚本路径(如C:\service\daemon.php),若脚本本身含无限循环(while(true){...sleep(60);}),就不用额外参数 - “Startup directory”必须设为脚本所在目录,否则
require 'vendor/autoload.php'这类语句大概率失败 - 日志配置不可跳过:在 NSSM 的 I/O 页设置
stdout和stderr输出路径,否则服务崩溃时你连错误都看不到
最容易被忽略的一点:CLI 和 Web 模式使用的是两套独立的 php.ini 配置(CLI 通常读 php.ini,Apache 模块读 php.ini 但受 PHPIniDir 指向控制)。同一段代码在命令行能跑,在浏览器里报 undefined function curl_init(),八成是 Web 模式下 extension=curl 没启用,别急着重装 PHP。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











