Windows 上 PHP 扩展、php.ini 与 OPcache
只加载应用需要的扩展,每个 PHP 版本独立 php.ini,合理调 OPcache,并验证实际加载的配置。
测试环境Standard / Datacenter · 版本号 26100.33650 · x64
E1- 版本号
- 26100.33650
- 版本
- Standard / Datacenter
- 架构
- x64
- 支持
- 文档(E1)
- 证据
- E1官方文档
- 核验日期
- 2026-10-29
- 页面类型
- 任务
三个东西:
php.ini— 实际加载配置;ext\— 扩展 DLL;extension_dir— PHP 去哪找 DLL。
先验证再排障:
php --iniphp -mphp -i | Select-String "Loaded Configuration|extension_dir"Loaded Configuration File 不是你改的文件,后面都没意义。
extension_dir="ext"extension=curlextension=mbstringextension=opensslextension=pdo_mysqlextension=mysqli只开应用用的。每个扩展都是代码和补丁面。Windows DLL 一般 php_<name>.dll;extension=curl 会在 extension_dir 下找。
扩展加载失败查:
- DLL 在
ext吗; - 匹配 PHP 版本/TS-NTS/编译器吗;
- 依赖 DLL 在吗;
- PHP 错误日志说哪个失败。
每版本/每站点 php.ini
Section titled “每版本/每站点 php.ini”多 PHP 版本时,每个目录自己的 php.ini。不要把同一个 ini 跨大版本复制,扩展 ABI 可能不匹配。
站点专属 ini,可在 FastCGI 环境设 PHPRC 指向目录。显式设置;否则 PHP 可能加载 C:\Windows\php.ini 或旧版本文件。
OPcache
Section titled “OPcache”opcache.enable=1opcache.memory_consumption=128opcache.max_accelerated_files=10000opcache.validate_timestamps=1opcache.revalidate_freq=2validate_timestamps=1对开发和小编站安全;PHP 会检查文件 mtime。validate_timestamps=0更快,但部署后必须 reload/restart,否则跑旧代码。- 不要因为“更快”就开实验性 JIT;先测应用和指标。
验证:
php -i | Select-String "opcache.enable|opcache.memory"phpinfo 也能看,测完删。
expose_php=Offdisplay_errors=Offlog_errors=Onerror_log="C:\PHP\logs\php-error.log"date.timezone=UTCmemory_limit=256Mmax_execution_time=60upload_max_filesize=32Mpost_max_size=32Mpost_max_size 要 >= upload_max_filesize,IIS/Nginx 限制要 >= 两者。
php --iniphp -mphp -r "echo ini_get('memory_limit'), PHP_EOL;"再用一个真正调用扩展的页面(PDO/curl/mbstring)验证,不要只信 php -m。
E1。PHP 8.4.27 FastCGI 在 VM 361 验证;扩展/OPcache 设置在 Server 2025 上没有做加载测试。