Windows下ZIP安装PHP需解压至无中文/空格路径、复制修改php.ini、添加PATH;Linux/macOS编译用--prefix指定根目录;Homebrew不支持自定义路径但可软链;务必用php --ini和php -i验证实际加载的php.ini。

Windows 下用 ZIP 包安装 PHP 到自定义目录
PHP 官方不提供 Windows 图形化安装器,直接下载 ZIP 包解压到任意路径即可运行,但必须手动配置环境变量和 php.ini。常见错误是解压后双击 php.exe 闪退,或执行 php -v 报“不是内部或外部命令”——本质是路径没加进系统 PATH,或缺少 php.ini。
- 去 windows.php.net/download/ 下载非 Thread Safe(TS)的 ZIP 包(如
php-8.3.6-Win32-vs16-x64.zip) - 解压到目标路径,例如:
D:\dev\php-8.3.6(路径中不要含中文、空格、特殊符号) - 复制
php.ini-development并重命名为php.ini,编辑它:取消注释extension_dir = "ext"行,并确认该目录存在(即D:\dev\php-8.3.6\ext) - 将
D:\dev\php-8.3.6加入系统环境变量PATH(需重启终端生效) - 在 CMD 中执行
php -v和php --ini,确认版本和配置文件路径正确
Linux/macOS 编译安装时指定 prefix 目录
源码编译是最可控的自定义路径方式,--prefix 决定所有文件的根目录,包括二进制、扩展、配置、文档等。误设会导致 php 找不到 php.ini 或扩展,报错如 Unable to load dynamic library 'mysqli'。
- 解压源码后进入目录,运行
./configure --prefix=/opt/php-8.3.6 --with-openssl --with-curl(按需添加其他--with-选项) -
--prefix必须是绝对路径,且当前用户需有写权限;不要设为/usr/local这类系统路径,除非你明确要覆盖系统 PHP - 执行
make && sudo make install后,可执行文件在/opt/php-8.3.6/bin/php,配置模板在/opt/php-8.3.6/lib/php.ini - 首次运行前,需复制
php.ini-production到/opt/php-8.3.6/lib/php.ini,并检查extension_dir是否指向/opt/php-8.3.6/lib/php/extensions/no-debug-zts-20230831/ - 建议用完整路径调用:
/opt/php-8.3.6/bin/php -c /opt/php-8.3.6/lib/php.ini -v,避免依赖默认查找逻辑
macOS 用 Homebrew 安装到非默认路径?不行,但可软链绕过
Homebrew 默认把 PHP 装在 /opt/homebrew/Cellar/php@8.3/8.3.6,再软链到 /opt/homebrew/bin/php。它不支持 --prefix 自定义,强行改 brew 目录会破坏包管理。想“看起来”装在别处,只能靠符号链接 + 环境变量。
- 先用
brew install php@8.3安装(注意带版本号,否则装最新版) - 查看真实路径:
brew --prefix php@8.3→ 得到类似/opt/homebrew/Cellar/php@8.3/8.3.6 - 创建目标目录并软链:
mkdir -p /usr/local/php-8.3.6 ln -sf /opt/homebrew/Cellar/php@8.3/8.3.6/bin/php /usr/local/php-8.3.6/bin/php ln -sf /opt/homebrew/Cellar/php@8.3/8.3.6/lib/php.ini /usr/local/php-8.3.6/lib/php.ini
- 把
/usr/local/php-8.3.6/bin加入PATH,优先级高于 Homebrew 的bin目录 - 验证:
which php应返回/usr/local/php-8.3.6/bin/php,php --ini显示配置路径是否匹配
PHP 配置文件 php.ini 不生效的三个关键点
无论路径怎么设,php.ini 找不到或加载失败是高频问题。PHP 按固定顺序查找配置文件,--ini 输出的“Loaded Configuration File”才是实际生效的那个。
立即学习“PHP免费学习笔记(深入)”;
- Windows 下:如果解压目录里没有
php.ini,PHP 会尝试从C:\Windows\php.ini加载——这个行为容易被忽略,导致改了本地php.ini却没效果 - Linux/macOS 编译安装:若 configure 时没加
--with-config-file-path=/opt/php-8.3.6/lib,PHP 会默认查/usr/local/lib,即使你指定了--prefix - CLI 和 Web SAPI(如 Apache、FPM)可能加载不同
php.ini:用php -i | grep "Configuration File"查 CLI,用phpinfo()页面查 Web 环境,二者必须分别确认
php --ini 和 php -i 反复验证实际加载的是哪个文件。











