【发布时间】:2026-01-25 00:55:02
【问题描述】:
所以错误是:
PHP Fatal error: Procedure 'sup:set_availability' not present in XMLSoapServer.php
我在开发环境 (MAMP) 上收到此错误。
这是由无效的 XML 字符串引起的,其中未定义 'sup' 命名空间:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<SOAP-ENV:Envelope xmlns:SOAPSDK1="http://www.w3.org/2001/XMLSchema"
xmlns:SOAPSDK2="http://www.w3.org/2001/XMLSchema-instance"
xmlns:SOAPSDK3="http://schemas.xmlsoap.org/soap/encoding/"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<sup:set_availability>
<SetAvailability>
...
</SetAvailability>
</sup:set_availability>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
(这是一个外部请求,所以我不能只是去纠正来源 - 我可以,但至少不是在短时间内。)
问题是我有 2 台服务器正在处理相同的请求。没有错误。所以我的任务是找出原因:)
一些细节:
- 服务器 1:php 5.3.2
- 服务器 2:php 5.4
- 开发:php 5.4
到目前为止我检查过的事情:
- 代码是一样的svn-checkout
- 没有隐藏的开发或仅生产设置
- apache 配置是一样的
- wsdl 缓存被禁用,缓存的 wsdl 被清除
- php.ini 设置相同,libxml2 除外:
服务器 1 的版本为 2.6.26 服务器 2 的版本为 2.7.7 - 请求在该版本上运行就像一个魅力 我的开发环境有 lixml2 版本 2.8.0 - 并且确实抛出了致命错误。
我的猜测是(或曾经是)libxml2 导致了错误 - 但我找不到有关此主题的任何资源 - 我也没有成功将本地 libxml2 版本降级到 2.6 或 2.7。
那么...对此有什么想法吗?
【问题讨论】:
-
您是否在所有 3 台服务器上或仅在您的开发服务器上禁用缓存并清除缓存的 wsdl?也许服务器 1 和 2 正在使用不存在此问题的缓存版本?
-
在两台服务器上禁用清除;没有解决问题。
标签: php fault soapserver