我的网络中有三个盒子
Box#1 - 一个带有 apache 和 php 的 RHEL 盒子(基本上是一个 LAMP 盒子)
Box#2 - 一个带有 JBoss 的 windows 盒子,它使用 apache 轴 2 托管一个 WSDL
Box#3 - 另一个 windows 盒子(基本上是一个 XAMPP 盒子——更多关于之后的第三个盒子)
当我尝试在 box#1 上运行 PHP 脚本时,该脚本使用 SoapClient 对象在浏览器中访问 box#2 的 WSDL,它返回:
致命错误:未捕获的 SoapFault 异常:[WSDL] SOAP-ERROR:解析 WSDL:无法从“http://XXX.XXX.XXX.XXX:8080/axis2/services/TheService?wsdl”加载:无法加载外部实体
然后我尝试使用 box#2 只是为了简单地返回我返回的 wsdl 文件的 file_get_contents:
警告:file_get_contents(http://XXX.XXX.XXX.XXX:8080/axis2/services/TheService?wsdl):无法打开流:第 4 行 /application/test.php 中的权限被拒绝
然而!当我以运行 apache 的同一用户身份登录时通过 telnet(命令行)运行最后一个脚本(file_get_contents)时,它返回 WSDL 的内容......(!)
--
我尝试在 Windows 框(框 #3)上运行相同的代码,如果 PHP.ini 设置与框 #2 不太相同,我可以使用 wsdl 并获取内容WSDL 文件没有问题。
--
我搜索了(stackoverflow 和 google),发现其他人也有同样的问题,并尝试了列出的解决方案,包括:
- 我的 PHP.ini 的 max_file_size 设置为 128M(大于 wsdl)
- allow_url_fopen 设置为 on
只是为了看看它是否适用于 box#1,我尝试使用 cURL 来获取文件的内容,但它没有返回任何内容。
如果有人能给我任何见解,将不胜感激。我确定在 PHP.ini 中有一个我缺少的设置或一些非常小的设置。