Php 外部wsdl的文件\u获取\u内容权限被拒绝

Php 外部wsdl的文件\u获取\u内容权限被拒绝,php,http,Php,Http,我的网络中有三个盒子 盒子#1-一个带有apache和php的RHEL盒子(基本上是一个灯箱) Box#2-一个windows Box,JBoss使用ApacheAxis2托管WSDL 框#3-另一个windows框(基本上是一个XAMPP框——稍后将在第三个框中详细介绍) 当我尝试在box#1上运行PHP脚本,该脚本使用SoapClient对象在浏览器中访问box#2的WSDL时,它返回: 致命错误:未捕获的SoapFault异常:[WSDL]SOAP-error:解析WSDL:无法从加载'h

我的网络中有三个盒子

盒子#1-一个带有apache和php的RHEL盒子(基本上是一个灯箱)
Box#2-一个windows Box,JBoss使用ApacheAxis2托管WSDL
框#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文件的内容:

警告:文件\u获取\u内容(http://XXX.XXX.XXX.XXX:8080/axis2/services/TheService?wsdl):无法打开流:第4行的/application/test.php中的权限被拒绝

然而!当我以运行apache的同一用户身份登录时,通过telnet(命令行)运行最后一个脚本(file_get_contents)时,它返回WSDL的内容。。。(!)

--

我尝试在windows box(box#3)上运行相同的代码,PHP.ini设置似乎与box#2非常相似(如果不尽相同的话),并且我能够使用wsdl并毫无问题地获取wsdl文件的内容

--

我搜索了(stackoverflow和google),发现其他人也有同样的问题,并尝试了下列解决方案:

  • ini的最大文件大小设置为128M(大于wsdl)
  • allow\u url\u fopen设置为on
为了看看它在box#1上是否有效,我尝试使用cURL获取文件的内容,但它没有返回任何内容


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

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

修复方法是:
setsebool-p httpd\u can\u network\u connect 1
,它允许Apache连接到远程服务(它同时适用于SSL和非SSL请求)


也在这里回答:

如果打开
http://XXX.XXX.XXX.XXX:8080/axis2/services/TheService?wsdl
从浏览器?它显示WSDL的内容。我建议您使用网络嗅探器,并在使用PHP请求时检查HTTP协议级别上发生的情况。对于请求(不是浏览器,而是PHP),这是200还可以吗。您也可以尝试:
var\u dump($http\u response\u header)直接位于文件获取内容行之后。请参阅警告:文件\u get\u contents():未能打开流:第4行/application/test.php中的权限被拒绝注意:第5行/application/test.php中的未定义变量:http\u response\u头执行网络嗅探。结果可能是根本没有执行HTTP请求。一字不差地粘贴代码(只需屏蔽IP的数字)。