从本地 LAMP 访问 SoapClient 和 file_get_contents

Posted

技术标签:

【中文标题】从本地 LAMP 访问 SoapClient 和 file_get_contents【英文标题】:Access SoapClient and file_get_contents from local LAMP 【发布时间】:2012-06-30 00:16:47 【问题描述】:

我在 ubuntu 12.04 下工作。 我有一个经典的本地主机设置。 apache + mysql + php

file_get_contents 在外部 url 上失败,但适用于本地文件或 'localhost'

file_get_contents('http://google.com');
PHP Warning:  file_get_contents(http://google.com): failed to open stream: HTTP request failed!

soapClient 在外部 url 上失败,但适用于本地文件或“localhost”

$wsdl = "http://test.webservices.delijn.be/wsrise/services/travel/WEB-INF/wsdl/RiseWebservices.wsdl";
$client = new SoapClient($wsdl,
array(
        'trace'                 => true,
        'exceptions'            => true,
        'soap_version'          => SOAP_1_1,
        'connection_timeout'    => 600,
        'compression' => SOAP_COMPRESSION_ACCEPT ,
        'encoding'=> 'UTF-8', //ISO-8859-1',
        //'cache_wsdl' => WSDL_CACHE_BOTH,
        //'host'     => "localhost",
        //'proxy_host'     => "localhost",
        //'proxy_port'     => 8080,
    ));

SOAP-ERROR: Parsing WSDL: Couldn't load from 
'http://test.webservices.delijn.be/wsrise/services/travel/WEB-INF/wsdl/RiseWebservices.wsdl' : failed to load external entity "http://test.webservices.delijn.be/wsrise/services/travel/WEB-INF/wsdl/RiseWebservices.wsdl"

allow_url_fopen 和 allow_include_url 在 phpinfo() 中打开(在 /etc/php5/apache2/php.ini 中设置) 防火墙被禁用 apparmor被禁用

已安装 suhosin 补丁,我在 php.ini 中将 suhosin.simulation 设置为 true

代码在我的生产和登台服务器上运行良好

我没有想法,没有找到可以检查问题的有趣日志或命令:'(

感谢您的帮助!

【问题讨论】:

@Quasdunk 数组中的尾随逗号不会引发语法错误,并且有时是某些编码标准所要求的。 您是否尝试过从 shell 访问这些站点?就做curl http://test.webservices.delijn.be/wsrise/services/travel/WEB-INF/wsdl/RiseWebservices.wsdl @MikeB 什么.... 我的一生都是谎言:-D 感谢您的评论,我并没有真正意识到这一点! (不过,如果只有逗号,它会抛出异常。) curl 和 GET 在 shell 中效果很好。 【参考方案1】:

好的!我找到了让它工作的方法。

安装 de suhosin-php 包以便能够使用模块 suhosin。 在 /etc/php5/con.d/suhosin.conf 中将 suhosin.simulation 指令设置为 on sudo service apache2 重启

Soap 调用仍然非常慢,但现在可以正常工作

感谢您的帮助!

【讨论】:

以上是关于从本地 LAMP 访问 SoapClient 和 file_get_contents的主要内容,如果未能解决你的问题,请参考以下文章

使用 SOAP 访问 Web 服务 - 在 soapclient() 上失败

使用php soapclient工具包显示访问netsuite wsdl无法加载wsdl

尝试访问本地 LAMP 服务器上的 localhost 时出现 404 Not Found 错误

如何从远程计算机(不是本地主机)访问 MySQL?

SoapClient无法从SimpleXMLObject渲染正确的xml

从局域网中的另一台计算机访问 Zend 应用程序(使用 LAMP)