gpt4 book ai didi

php - 外部 wsdl 的 file_get_contents 权限被拒绝

转载 作者:可可西里 更新时间:2023-11-01 16:25:14 27 4
gpt4 key购买 nike

我的网络中有三个盒子

Box#1 - 带有 apache 和 php 的 RHEL box(基本上是 LAMP box)
Box#2 - 带有使用 apache axis 2 托管 WSDL 的 JBoss 的 Windows box
Box#3 - 另一个 Windows 框(基本上是一个 XAMPP 框——稍后会详细介绍第三个框)

当我尝试在 box#1 上运行 PHP 脚本时,它使用 SoapClient 对象在浏览器中访问 box#2 的 WSDL,它返回:

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://XXX.XXX.XXX.XXX:8080/axis2/services/TheService?wsdl' : failed to load external entity

然后我尝试在 box#2 上简单地获取我返回的 wsdl 文件的 file_get_contents:

Warning: file_get_contents(http://XXX.XXX.XXX.XXX:8080/axis2/services/TheService?wsdl): failed to open stream: Permission denied in /application/test.php on line 4

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

--

我尝试在 Windows 框(框 #3)上运行相同的代码,其中的 PHP.ini 设置看起来与框 #2 非常相似,如果不是尽可能相同的话,我能够使用 wsdl 和毫无问题地获取 WSDL 文件的内容。

--

我搜索(stackoverflow 和谷歌)并看到其他人遇到了同样的问题并尝试了列出的解决方案,包括:

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

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

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

最佳答案

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

关于php - 外部 wsdl 的 file_get_contents 权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10147253/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com