我的主机上有一个神秘的PHP SOAP错误,但无法在本地复制

时间:2009-01-09 01:30:30

标签: php soap codeigniter mosso

我遇到了一个让我陷入困境的有趣的PHP / SOAP错误。搜索后我没有找到合理的解释,我很感激你的帮助。这是背景:

我有一个用PHP / CodeIgniter构建的网站,它使用SOAP通过SSL与第三方提供的后端系统进行通信(让我们称之为“公司X”以保护无辜者)不在我的网站中控制。本着良好的MVC的精神,我将特定的代码放在一个单独的模型(system/application/models/company_x.php)中与该数据源进行交互。我一直在我的Mac上使用MAMP进行本地开发,通过测试和开发,几乎所有东西都相对顺畅;包括通过SSL呼叫公司X的Web服务。我应该提一下,他们的Web服务有奇怪的WSDL,PHP 5的SOAP不喜欢。像那些不存在的必需参数之类的东西。非常明确地调用SOAP方法有点奇怪,但我得到了它并且它通过测试工作。我甚至将它部署到了Mosso的测试站点,我本可以发誓它在那里工作了一段时间。

想象一下,每次调用SOAP Web服务时都会出现如下错误:

    A PHP Error was encountered
    Severity: Warning
    Message: SoapClient::__doRequest() [soapclient.--dorequest]: 
    WARNING: URL fopen access
    Filename: models/company_x.php
    Line Number: 86

错误日志除了提供服务器上模型文件的完整路径之外,没有提供任何其他信息。它在当地工作,我以前认为它在Mosso上有效。也许Mosso改变了他们的设置,并禁用了SOAP或其他东西。稍稍phpinfo(),他们绰绰有余。我想也许我的Mac可以更容忍SSL证书。毕竟,这是一个GoDaddy * .domain.com证书,也许fopen无法通过。我掀起了一个测试文件,通过SSL进行连接,并把它放在Mosso上,然后就可以了。

我想知道为什么fopen突然出现SOAP问题?莫索的突然之处是什么呢?我是否需要覆盖某些php.ini设置?可能是,像这样经常出现无用的错误,有些完全不同吗?

更新:这是来自phpinfo()的配置命令:

'./configure' '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--target=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--localstatedir=/var' '--sharedstatedir=/usr/com' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--cache-file=../config.cache' '--with-libdir=lib64' '--with-config-file-path=/etc' '--with-config-file-scan-dir=/etc/php.d' '--disable-debug' '--with-pic' '--disable-rpath' '--without-pear' '--with-bz2' '--with-curl' '--with-exec-dir=/usr/bin' '--with-freetype-dir=/usr' '--with-png-dir=/usr' '--enable-gd-native-ttf' '--without-gdbm' '--with-gettext' '--with-gmp' '--with-iconv' '--with-jpeg-dir=/usr' '--with-openssl' '--with-png' '--with-pspell' '--with-expat-dir=/usr' '--with-pcre-regex=/usr' '--with-zlib' '--with-layout=GNU' '--enable-exif' '--enable-ftp' '--enable-magic-quotes' '--enable-sockets' '--enable-sysvsem' '--enable-sysvshm' '--enable-sysvmsg' '--enable-track-vars' '--enable-trans-sid' '--enable-yp' '--enable-wddx' '--with-kerberos' '--enable-ucd-snmp-hack' '--with-unixODBC=shared,/usr' '--enable-memory-limit' '--enable-shmop' '--enable-calendar' '--enable-dbx' '--enable-dio' '--with-ming' '--with-mime-magic' '--with-sqlite=shared' '--with-libxml-dir=/usr' '--with-xml' '--with-system-tzdata' '--with-apxs2=/usr/sbin/apxs' '--without-mysql' '--without-gd' '--without-odbc' '--disable-dom' '--disable-dba' '--without-unixODBC' '--disable-pdo' '--disable-xmlreader' '--disable-xmlwriter' '--disable-json'

注意:我的评论下面phpinfo()报告允许furl;怪异!

3 个答案:

答案 0 :(得分:1)

你可能有这个 http://us.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

丢失。

请记住,您始终可以使用phpinfo()直观地比较机器之间的环境。

答案 1 :(得分:0)

另一种可能性(来自the PHP docs):

注意:启用安全模式后,PHP会检查脚本运行的目录是否与正在执行的脚本具有相同的UID(所有者)。
编辑:嗯..我的PHP编译选项中没有安全模式,所以可能不是这样。

答案 2 :(得分:0)

好的,关于这个问题的一点点更新:错误神秘地消失了,没有任何改变。我将不得不假设在静音修复的Mosso上有一些奇怪的配置错误。公司X的设置也存在问题。这是最糟糕的修复IMO!非常感谢所有关注此事的人。