PHP 8.1 的 soap 扩展默认不启用,需手动取消 php.ini 中 extension=soap 的注释、确认 extension_dir 指向含 php_soap.dll 的目录、重启 phpEnv 的 PHP 服务,并验证 php -m | grep soap 或 phpinfo() 显示 Soap Client/Server 已启用。

PHP 8.1 的 soap 扩展默认不启用,必须显式开启才能使用 SoapServer 和 SoapClient —— 否则运行时直接报 Class 'SoapServer' not found 或 Call to undefined function soap_version()。
确认当前 PHP 8.1 的 php.ini 路径是否正确
phpEnv 用户常改错文件:比如编辑了 C:\Windows\php.ini 或 Apache 的 conf/extra/php.ini,这些对 phpEnv 完全无效。真实路径由 phpEnv 界面右下角「当前 PHP:8.1.22」提示决定,典型路径是 C:\phpenv\php\8.1.22\php.ini。可在主界面点「PHP」→「配置文件」,它会自动用记事本打开正确的那个;或进 C:\phpenv\php\8.1.22\ 目录,找未带 .bak 后缀的 php.ini。
取消 ;extension=soap 的注释并验证 extension_dir
在正确打开的 php.ini 中搜索 ;extension=soap,删掉前面的分号,改为 extension=soap。别漏掉检查 extension_dir 值是否指向实际存在 php_soap.dll 的目录(如 ext 子目录)。phpEnv 自带包通常已包含该 DLL,但极少数精简版可能缺失 —— 可手动进入 extension_dir 指向的路径,确认 php_soap.dll 文件存在。
修改后必须点 phpEnv 主界面「PHP」→「重启」(不是重启整个软件),否则 php -m | findstr soap 仍看不到 soap。
立即学习“PHP免费学习笔记(深入)”;
Linux 下用 apt 安装 php8.1-soap 并注意配置位置差异
Ubuntu/Debian 系统执行:sudo apt install php8.1-soap,然后重启服务(sudo systemctl restart apache2 或 sudo systemctl restart php8.1-fpm)。但注意:PHP 8.1 在较新发行版中,扩展启用逻辑已从 php.ini 移到 /etc/php/8.1/cli/conf.d/ 或 /etc/php/8.1/apache2/conf.d/ 目录下的独立 ini 文件(如 20-soap.ini)。直接改 php.ini 可能无效,应检查该目录下是否有 20-soap.ini,内容为 extension=soap。
验证命令统一可用:php -m | grep soap(CLI 模式)或建 info.php 访问后搜「soap」,看到「Soap Client» enabled」和「Soap Server» enabled」两行才算真正就绪。
SoapServer 构造时 location 必须是客户端可访问的真实 URL
phpEnv 内置 Apache 默认监听 80 端口,所以 location 写 http://localhost/server.php 没问题;但若你启用了 Nginx 模式、改过端口(如 8080)、或开了 HTTPS,location 就必须同步更新,否则客户端调用卡住或返回 404。例如端口是 8080,就得写 'location' => 'http://localhost:8080/server.php'。
另外,phpEnv 的 Apache 默认关闭 AllowOverride All,无法靠 .htaccess 重写 SOAP 请求;SOAP 服务必须通过明确的 PHP 文件路径访问(如 http://localhost/server.php),不能依赖伪静态路由。文件也得放在 phpEnv 的默认站点根目录(如 C:\phpenv\www\),放错层级会导致 404。



















