我的网络中有三个盒子
方框#1 - 一个带有apache和php的RHEL盒子(基本上是一个LAMP盒子)
盒子#2 - 一个带有JBoss的窗口盒,使用apache轴2托管一个WSDL
盒子#3 - 另一个窗口盒子(基本上是一个XAMPP盒子 - 更多关于第三个方框后)
当我尝试在#1框架上运行PHP脚本时,它使用SoapClient对象在浏览器中访问框#2的WSDL,它返回:
致命错误:未捕获的SoapFault异常:[WSDL] SOAP-ERROR:解析WSDL:无法从'http://XXX.XXX.XXX.XXX:8080/axis2/services/TheService?wsdl'加载:无法加载外部实体
然后我尝试了#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)并看到其他人遇到了同样的问题并尝试了列出的解决方案,包括:
只是为了看看它是否适用于#1框我尝试使用cURL来获取文件的内容并且它没有返回任何内容.
如果有人能给我任何见解,我将不胜感激.我确定PHP.ini中有一个我缺少的设置或者非常小的设置.
我今天遇到了同样的问题,几个小时后,在尝试file_get_contents我的WSDL URL后,我注意到我的apache错误日志中出现了权限被拒绝错误.我发现SELinux是罪魁祸首.我相信默认情况下,SELinux会阻止httpd发出自己的网络请求(至少在Fedora上).
修复程序是:setsebool -P httpd_can_network_connect 1,然后允许Apache连接到远程服务(它适用于SSL和非SSL请求).
这里也回答:SOAP-ERROR:解析WSDL:无法从url加载
| 归档时间: |
|
| 查看次数: |
2350 次 |
| 最近记录: |