外部wsdl的file_get_contents权限被拒绝

Tig*_*ond 2 php http

我的网络中有三个盒子

方框#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)并看到其他人遇到了同样的问题并尝试了列出的解决方案,包括:

  • 我的PHP.ini的max_file_size设置为128M(大于wsdl)
  • allow_url_fopen设置为on

只是为了看看它是否适用于#1框我尝试使用cURL来获取文件的内容并且它没有返回任何内容.

如果有人能给我任何见解,我将不胜感激.我确定PHP.ini中有一个我缺少的设置或者非常小的设置.

Dav*_*ves 8

我今天遇到了同样的问题,几个小时后,在尝试file_get_contents我的WSDL URL后,我注意到我的apache错误日志中出现了权限被拒绝错误.我发现SELinux是罪魁祸首.我相信默认情况下,SELinux会阻止httpd发出自己的网络请求(至少在Fedora上).

修复程序是:setsebool -P httpd_can_network_connect 1,然后允许Apache连接到远程服务(它适用于SSL和非SSL请求).

这里也回答:SOAP-ERROR:解析WSDL:无法从url加载