Windows 7 下 PHP 环境开机自启需将 Apache/Nginx/IIS 注册为系统服务并确保 PHP 正确集成:Apache 用 httpd.exe -k install;Nginx 需 sc create 或第三方工具;IIS 默认自动启动,需启用 CGI 并配置 FastCGI;所有路径须绝对,依赖 DLL 和 php.ini 配置必须完整,且服务以 SYSTEM 身份运行。

Windows 7 下 PHP 环境要实现开机自动启动 Web 服务,关键不是“启动 PHP”,而是让 Apache 或 Nginx(或 IIS)作为后台服务运行——PHP 本身不提供守护进程,它依附于 Web 服务器或 CGI/FastCGI 进程存活。
Apache 怎么注册为 Windows 服务并开机自启
Apache 自带 httpd.exe -k install 命令,可直接注册为系统服务。必须以管理员身份运行命令行,否则会提示“拒绝访问”。
- 进入 Apache 的
bin目录,例如:C:\Apache24\bin - 执行:
httpd.exe -k install -n "Apache2.4"(服务名可自定义,但不能含空格;若路径含空格,整个路径需用英文双引号包裹) - 打开
services.msc,找到刚注册的服务,右键 → 属性 → 启动类型设为“自动(延迟启动)”更稳妥(避开系统初始化资源争抢) - 确认 PHP 模块已正确加载:
httpd.conf中必须有LoadModule php7_module "C:/php/php7apache2_4.dll"和AddHandler application/x-httpd-php .php,且PHPIniDir指向正确的php.ini路径
Nginx 在 Win7 上无法直接注册为服务,得靠 sc 或第三方工具
官方 Nginx for Windows 不提供服务注册能力,nginx.exe -s start 只是前台进程。强行用 sc create 创建服务虽可行,但容易因工作目录、权限或配置路径错误导致启动失败,状态卡在“启动中”。
- 推荐用
sc create时显式指定binPath=和start= auto,例如:sc create Nginx binPath= "C:\nginx\nginx.exe" start= auto(注意等号后有空格) - 必须确保
nginx.conf中的pid和error_log路径是绝对路径,且目标目录对 SYSTEM 用户有写权限 - 更稳妥的做法是搭配
nginx-service.exe(社区封装工具),它会自动处理工作目录和日志重定向 - 若使用 PHP-FPM,它也不能注册为服务——需在 Nginx 启动后再手动或用脚本拉起
php-fpm.exe -c C:\php\php-fpm.ini
IIS + PHP 的开机自启本质是确保 IIS 服务自动运行
IIS 本身已是 Windows 内置服务(W3SVC),默认就是“自动”启动类型。只要 PHP 配置正确,IIS 启动后就能响应 .php 请求,无需额外操作。
立即学习“PHP免费学习笔记(深入)”;
- 确认 CGI 功能已启用:控制面板 → “打开或关闭 Windows 功能” → 勾选 “Internet Information Services” → “万维网服务” → “应用程序开发功能” → “CGI”
- 检查 FastCGI 设置是否持久:在 IIS 管理器 → “FastCGI 设置” 中,右键对应 PHP-CGI 路径 → “编辑”,勾选“监视句柄”和“活动超时”避免进程意外退出
-
php-cgi.exe路径必须写绝对路径(如C:\php\php-cgi.exe),不能依赖环境变量;php.ini必须放在C:\Windows或由PHPRC环境变量指定 - 如果改过
php.ini,务必重启 IIS(iisreset /restart),仅重启网站不够
别忽略 PHP 扩展依赖和运行时环境
服务能启动 ≠ PHP 能跑通。常见失败点不在 Web 服务器,而在 PHP 自身缺失依赖。
- PHP 7.3+ 需要
vcruntime140.dll(Visual C++ 2015–2019 Redistributable),缺这个会报错:'vcruntime140.dll' 14.0 is not compatible with this PHP build linked with 14.16 - 用
php -v测试命令行是否正常,若失败,说明环境变量或 DLL 依赖没配好;服务方式启动时不会显示这些错误,只能查 Windows 事件查看器里的 Application 日志 - 扩展启用后记得去掉
php.ini中对应行的分号,比如extension=php_mysqli.dll,且extension_dir必须指向真实存在的ext目录(路径斜杠用正斜杠或双反斜杠) - 时区必须显式设置:
date.timezone = "Asia/Shanghai",否则phpinfo()会警告,部分框架(如 Laravel)可能直接拒启
最易被忽略的是:服务启动时用户上下文是 SYSTEM,它看不到你用户账户下的 PATH 或临时设置的环境变量。所有路径必须绝对、所有依赖必须预装、所有配置必须写死——别指望“我桌面测试能跑,服务就一定行”。



















