【问题标题】:file_get_contents permission denied for external wsdl外部 wsdl 的 file_get_contents 权限被拒绝
【发布时间】:2012-04-26 04:43:18
【问题描述】:

我的网络中有三个盒子

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 设置为开启

只是想看看它是否适用于 box#1,我尝试使用 cURL 来获取文件的内容,但它没有返回任何内容。

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

【问题讨论】:

  • 如果您从浏览器打开http://XXX.XXX.XXX.XXX:8080/axis2/services/TheService?wsdl,您的浏览器会显示什么?
  • 显示 WSDL 的内容
  • 我建议您使用网络嗅探器连接并检查当您使用 PHP 请求时在 HTTP 协议级别上发生了什么。是 200 OK 还是其他请求(不是浏览器,而是 PHP)。您也可以尝试:var_dump($http_response_header); 直接在 file_get_contents 行之后。见php.net/manual/en/reserved.variables.httpresponseheader.php
  • 警告:file_get_contents(XXX.XXX.XXX.XXX:8080/axis2/services/TheService?wsdl):无法打开流:第 4 行 /application/test.php 中的权限被拒绝 注意:未定义变量:第 5 行 /application/test.php 中的 http_response_header空
  • 做网络嗅探。可能会证明根本没有执行 HTTP 请求。逐字粘贴您的代码(只需掩盖 IP 的数字)。

标签: php http


【解决方案1】:

我今天遇到了同样的问题,几个小时后,在我的 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

【讨论】:

    猜你喜欢
    • 2018-07-28
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    相关资源
    最近更新 更多