我遇到了一个让我陷入困境的有趣的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'' - bindind = / usr / bin''--sbindir = / usr / sbin'' - sysconfdir = / etc'' - datadir = / usr / share'' - includel = / usr / include'' - libdir = / usr / lib64'' - libdcdir = / 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'' -

有帮助吗?

解决方案 3

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

其他提示

你可能有这个 http://us.php.net/手动/ EN / filesystem.configuration.php#ini.allow-URL-的fopen

丢失。

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top