外部wsdl的file_get_contents权限被拒绝

时间:2012-04-13 19:38:55

标签: php http

我的网络中有三个方框

Box#1 - 带有apache和php的RHEL盒子(基本上是一个LAMP盒子)
方框#2 - 一个Windows框,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设置为

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

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

1 个答案:

答案 0 :(得分:7)

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

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

此处也回答:SOAP-ERROR: Parsing WSDL: Couldn't load from url

相关问题