1

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

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

想象一下,当每次调用 SOAP Web 服务都开始产生如下错误时,我会感到惊讶:

    遇到 PHP 错误
    严重性:警告
    消息:SoapClient::__doRequest() [soapclient.--dorequest]:
    警告:URL fopen 访问
    文件名:models/company_x.php
    行号: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()报告说允许卷曲;奇怪的!

4

3 回答 3

1

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

失踪。

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

于 2009-01-09T02:10:46.663 回答
0

另一种可能性(来自PHP 文档):

注意:启用安全模式后,PHP 会检查脚本运行所在的目录是否与正在执行的脚本具有相同的 UID(所有者)。

编辑:嗯..我在您的 PHP 编译选项中看不到安全模式,所以可能不是那样。

于 2009-01-13T23:10:41.277 回答
0

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

于 2009-01-24T23:33:45.207 回答