Pregunta

Me he encontrado con un interesante error PHP / SOAP que me ha bloqueado. Después de buscar, no he encontrado una explicación plausible, y agradecería su ayuda. Aquí está el fondo:

Tengo un sitio construido en PHP / CodeIgniter que usa SOAP para comunicarse a través de SSL con un sistema de fondo proporcionado por un tercero (llamémosles "Compañía X" para proteger a los inocentes) que no están bajo mi control. En el espíritu del buen MVC, puse el código específico para interactuar con esa fuente de datos en un modelo separado ( system / application / models / company_x.php ). He estado desarrollando localmente usando MAMP en mi Mac, y casi todo fue relativamente fácil durante las pruebas y el desarrollo; incluyendo llamar al servicio web de la Compañía X a través de SSL. Probablemente debería mencionar que su servicio web tenía un WSDL extraño que a SOAP de PHP 5 no le gustaba. Cosas como los parámetros requeridos que no estaban allí. Ha sido un poco extraño llamar a los métodos SOAP de manera muy explícita, pero lo puse en marcha y funcionó a través de las pruebas. Incluso lo implementé en un sitio de prueba en Mosso , y podría haber jurado que funcionó por un tiempo allí también.

Imagine mi sorpresa cuando cada llamada al servicio web SOAP comienza a producir errores como los siguientes:

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

Los registros de error no proporcionaron más información que la ruta completa al archivo del modelo en el servidor. Funciona localmente, y pensé que funcionaba en Mosso antes. Tal vez Mosso cambió su configuración e inhabilitó SOAP o algo así. Un poco de phpinfo () más tarde, y tienen más que suficiente. Pensé que tal vez mi Mac es más tolerante con el certificado SSL. Después de todo, es un certificado GoDaddy * .domain.com, tal vez fopen está teniendo problemas para pasar. Preparé un archivo de prueba para conectarme a través de SSL, lo puse en Mosso y funcionó.

Me pregunto por qué el acceso fopen de repente es un problema para SOAP. ¿Qué tiene Mosso que hace que esto sea difícil de repente? ¿Debo anular alguna configuración de php.ini ? ¿Podría ser, como sucede a menudo con errores inútiles como este, algo completamente diferente?

Actualización: aquí está el comando de configuración de 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 '

Nota : Mi comentario debajo de que phpinfo () informa que furl está permitido; raro!

¿Fue útil?

Solución 3

OK, una pequeña actualización sobre este problema: el error misteriosamente desapareció sin ningún cambio por mi parte. Tendré que suponer que hubo un extraño error de configuración en Mosso que se solucionó en silencio. También es remotamente posible que haya un problema con la configuración de la Compañía X. Ese es el peor tipo de solución IMO! Gracias de todos modos a todos los que vieron esto.

Otros consejos

Puede que tengas esto http://us.php.net/ manual / es / filesystem.configuration.php # ini.allow-url-fopen

falta.

Recuerde, siempre puede usar phpinfo () para comparar visualmente el entorno entre máquinas.

Otra posibilidad (de los documentos PHP ):

Nota: cuando el modo seguro está habilitado, PHP comprueba si el directorio en el que opera el script tiene el mismo UID (propietario) que el script que se está ejecutando.

EDITAR: Hmm .. No veo el modo seguro en las opciones de compilación de PHP, así que probablemente no sea eso.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top