У меня на хосте загадочная ошибка PHP SOAP, но я не могу дублировать ее локально.

StackOverflow https://stackoverflow.com/questions/426747

  •  06-07-2019
  •  | 
  •  

Вопрос

Я столкнулся с интересной ошибкой PHP/SOAP, которая поставила меня в тупик.После поиска я не нашел правдоподобного объяснения, и буду признателен за вашу помощь.Вот предыстория:

У меня есть сайт, построенный на PHP/КодИгнитер который использует SOAP для связи через SSL с внутренней системой, предоставленной третьей стороной (назовем ее «Компания X», чтобы защитить невиновных), не находящейся под моим контролем.В духе хорошего MVC я поместил код, предназначенный для взаимодействия с этим источником данных, в отдельную модель (system/application/models/company_x.php).Я разрабатывал локально, используя MAMP на своем Mac, и практически все прошло относительно гладко во время тестирования и разработки;включая вызов веб-службы компании X через SSL.Вероятно, мне следует упомянуть, что их веб-сервис имел странный WSDL, который не нравился SOAP PHP 5.Такие вещи, как обязательные параметры, которых там не было.Было немного странно вызывать методы SOAP очень явно, но я справился с этим, и это сработало благодаря тестированию.Я даже развернул его на тестовом полигоне в Моссо, и я мог бы поклясться, что какое-то время это работало и там.

Каково же было мое удивление, когда каждый вызов веб-службы SOAP начинал выдавать такие ошибки:

    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() сообщает, что сворачивание разрешено;странный!

Это было полезно?

Решение 3

Хорошо, небольшое обновление по этой проблеме: ошибка таинственно исчезла без каких-либо изменений от меня. Я должен предположить, что в Mosso была какая-то странная ошибка конфигурации, которая была незаметно исправлена. Также возможно, что возникла проблема с настройкой компании X. Это худший вид исправления ИМО! В любом случае, спасибо всем, кто смотрел на это.

Другие советы

У вас может быть этоhttp://us.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

отсутствующий.

Помните, что вы всегда можете использовать phpinfo() для визуального сравнения среды между машинами.

Еще одна возможность (из документации по PHP ):

Примечание. Когда включен безопасный режим, PHP проверяет, имеет ли каталог, в котором работает сценарий, такой же UID (владельца), как и выполняемый сценарий.

РЕДАКТИРОВАТЬ: Хмм .. Я не вижу безопасного режима в ваших опциях компиляции PHP, так что, вероятно, это не так.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top