windows 搭建 php 框架环境的关键是确保 php 来源唯一、path 干净、php.ini 配置正确、扩展启用到位,并通过 where php、php --ini 和 phpinfo() 三处输出严格对齐,避免命令行与 web 服务器使用不同配置。

Windows 下搭 PHP 框架环境,核心不是“能不能”,而是“别被默认配置和路径细节坑”。多数失败不是 PHP 装不了,是 composer 找不到 php.exe、ext-opcache 没启用导致 Laravel 启动慢、或 PATH 里混了多个 PHP 版本造成命令行和 Web 服务器用的不是同一套扩展。
确认 PHP 安装方式与 PATH 是否干净
Windows 上 PHP 有三种常见来源:官方二进制包(windows.php.net)、XAMPP/WAMP 等集成包、通过 scoop 或 choco 安装。关键点是:只保留一种来源,且确保 php -v 和 php --ini 输出的路径与你实际想用的一致。
- 运行
where php查看所有可执行文件路径,删掉多余项(尤其注意C:\xampp\php和C:\php同时存在时) -
php --ini显示加载的php.ini位置,打开它检查extension_dir是否指向当前 PHP 版本的ext目录(如C:\php\ext),路径含空格要加引号 - 确认
date.timezone已设(如date.timezone = "Asia/Shanghai"),否则 Laravel 等框架日志可能报时区警告
启用必要扩展:opcache、mbstring、curl、pdo_mysql
框架启动失败或报“Class not found”“mb_strlen() undefined”,大概率是扩展没开。Windows 下扩展启用靠的是 php.ini 中取消注释对应行,且 DLL 文件必须真实存在。
- 检查
php -m | findstr "opcache mbstring curl pdo_mysql"(PowerShell 可用php -m | Select-String "opcache") - 若缺失,打开
php.ini,去掉这些行前的分号:;extension=php_opcache.dll→extension=opcache(PHP 8+ 可直接写扩展名,不带.dll和php_前缀) -
opcache.enable=1和opcache.enable_cli=1都要设为1,否则php artisan optimize或composer dump-autoload不生效 - 重启命令行终端(不是仅重启服务),再运行
php -m确认
Composer 安装后必须校验 PHP 关联
Composer 默认调用系统 PATH 中第一个 php.exe,但很多人装完 Composer 后直接跑 composer create-project laravel/laravel 却提示 “The requested PHP extension mbstring is missing”,其实是因为 Composer 调用的是另一个旧版 PHP(比如 WAMP 自带的)。
立即学习“PHP免费学习笔记(深入)”;
- 运行
composer diagnose,重点看 “PHP binary” 和 “PHP version” 行,确认它指向你刚配好的 PHP - 若不对,用
composer config --global bin-dir查路径,再手动改系统 PATH,把正确 PHP 目录放在最前面 - 避免用
php composer.phar临时绕过 —— 这容易掩盖 PATH 问题,后续artisan命令仍可能出错 - Laravel 10+ 要求 PHP 8.1+,用
php -v核对小版本号,别只看主版本
Web 服务器用 Apache/Nginx 时,php.ini 加载路径易混淆
命令行 php -i 显示的 Loaded Configuration File 和 Apache 模块加载的 php.ini 往往不是同一个 —— 这是 Windows 下最隐蔽的坑。浏览器访问 phpinfo() 页面才能看到 Web 服务器实际读的配置。
- 在 Web 根目录放一个
info.php,内容为<?php phpinfo(); ?>,用浏览器打开,搜索 “Loaded Configuration File” - 对比命令行输出,若不一致,需在 Apache 的
httpd.conf或 Nginx 的fastcgi_param中显式指定PHP_INI_SCAN_DIR或-c参数 - Apache 模块方式下,确认
LoadModule php_module "C:/php/php8apache2_4.dll"路径准确,且 DLL 名字与 PHP 版本严格匹配(PHP 8.2 对应php8apache2_4.dll,不是php7apache2_4.dll)
跨平台搭建真正的难点不在步骤多,而在 Windows 下每个环节都依赖路径和环境变量的手动对齐;Mac/Linux 有包管理器兜底,Windows 则要自己盯住 where php、php --ini、phpinfo() 三处输出是否一致 —— 少查一处,就可能花两小时调试“为什么命令行能跑,浏览器 500”。











