shopxo在phpenv上运行必须修改三处:nginx需补全fastcgi_pass、script_filename和fastcgi_params;runtime目录须手动设置用户“修改+写入”权限并启用继承;.env中app_debug=true会导致windows路径解析错误,应暂设为false。

phpEnv 是 Windows 下轻量级 PHP 开发环境,但 ShopXO 在其上运行会遇到路径、重写、权限三类硬性问题,直接套用 Linux 部署文档基本不可行。关键不是“能不能装”,而是“哪些配置必须改、不改就卡在 install.php 或 500 错误”。
phpEnv 的 Nginx 配置必须补全 fastcgi_pass 和 SCRIPT_FILENAME
phpEnv 自带的 Nginx 配置默认只处理静态文件,index.php 请求进不来,浏览器访问直接 404 或下载 PHP 源码。你得手动编辑 phpenv/nginx/conf/vhost/your-site.conf,补上 PHP 解析块:
location ~ .php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
注意三点:
-
fastcgi_pass端口必须和 phpEnv 中 PHP-FPM 实际监听端口一致(默认是 9000,可在phpenv/php/php-version/etc/php-fpm.d/www.conf查listen = 127.0.0.1:9000) -
$document_root不能写成绝对路径,否则 ThinkPHP8 的路由解析会失败 - 别漏掉
include fastcgi_params,否则$_SERVER['REQUEST_URI']为空,install.php会报“非法请求”
Windows 下 runtime 目录写权限实际靠“继承”而非 chmod
Linux 里 chmod -R 755 runtime 有效,但在 Windows + phpEnv 下,这个命令无效,且 runtime 目录若被系统标记为“只读”或父目录没给当前用户“修改”权限,ShopXO 启动时就会报 file_put_contents(runtime/log/xxx.log): failed to open stream。
正确做法是右键 runtime 文件夹 → 属性 → 安全 → 编辑 → 添加当前登录用户(如 DESKTOP-XXXYourName),勾选“修改”和“写入”;同时确认“继承自父项的权限”已启用。别信 CMD 里跑 attrib -r,它不解决 NTFS 权限链问题。
install.php 卡在“检测环境”多半是 PDO 扩展没真正加载
phpEnv 界面显示“PDO MySQL 已启用”,不代表它真能连数据库。常见原因是:
-
php.ini里extension=php_pdo_mysql.dll前有分号,但 phpEnv 的“扩展管理”开关只是改 ini 里的注释,没重启 PHP-FPM 就不生效 - 你改的是
phpenv/php/php-version/lib/php.ini,但 PHP-FPM 实际加载的是phpenv/php/php-version/etc/php.ini(两个位置) - MySQL 服务没开,或
DB_HOST=127.0.0.1在 Windows 下有时比localhost更可靠(尤其用了命名管道)
验证方式:在 phpEnv 控制台点“PHP Info”,搜索 pdo_mysql,看到“enabled”且下方列出 MySQL 相关参数才算真正就绪。
.env 文件中的 APP_DEBUG=true 会导致 Windows 路径分隔符报错
ThinkPHP8 在调试模式下会把异常堆栈路径全打出来,而 Windows 默认用反斜杠 ,某些日志组件或缓存驱动会把它当转义符处理,导致 RuntimeException: Unable to write in the "D:phpenvwwwshopxo
untimecache" directory 这类错误——其实目录存在且可写,只是路径字符串被误解析了。
临时解法:把 .env 里 APP_DEBUG=true 改成 false,装完再开;长期方案是在 config/app.php 里加一行:'default_timezone' => 'Asia/Shanghai', 并确保所有路径操作都走 realpath() 或 str_replace('\', '/', __DIR__) 标准化。
最易忽略的一点:phpEnv 的“网站根目录”必须指向 shopxo/public,不是项目根目录。设错后 public/index.php 进不了入口,所有路由都崩,但错误页面可能只显示空白或 500,连日志都不写——因为连 runtime 目录都没机会初始化。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











