Domanda

Ho riscontrato un interessante errore PHP / SOAP che mi ha ostacolato. Dopo aver cercato non ho trovato una spiegazione plausibile e apprezzerei il tuo aiuto. Ecco lo sfondo:

Ho un sito integrato in PHP / CodeIgniter che utilizza SOAP per comunicare su SSL con un sistema back-end fornito da una terza parte (chiamiamoli "Azienda X" per proteggere gli innocenti) non sotto il mio controllo. Nello spirito del buon MVC, ho inserito il codice specifico per interagire con quella fonte di dati in un modello separato ( system / application / models / company_x.php ). Ho sviluppato localmente utilizzando MAMP sul mio Mac e praticamente tutto è stato relativamente fluido attraverso test e sviluppo; inclusa la chiamata al servizio Web della società X su SSL. Dovrei probabilmente menzionare che il loro servizio web aveva strani WSDL che a SOP di PHP 5 non piacevano. Cose come parametri richiesti che non c'erano. È stato un po 'strano chiamare i metodi SOAP in modo molto esplicito, ma ci sono riuscito e ha funzionato attraverso i test. L'ho persino distribuito in un sito di prova all'indirizzo Mosso e avrei giurato che avrebbe funzionato per un po ' anche lì.

Immagina la mia sorpresa quando ogni chiamata al servizio web SOAP inizia a produrre errori come il seguente:

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

I log degli errori non hanno fornito ulteriori informazioni oltre al percorso completo del file modello sul server. Funziona localmente e ho pensato che prima funzionasse su Mosso. Forse Mosso ha cambiato le loro impostazioni e disabilitato SOAP o qualcosa del genere. Un po ' phpinfo () in seguito, e ne hanno più che sufficienti. Ho pensato che forse il mio Mac è più tollerante con il certificato SSL. Dopotutto, è un certificato GoDaddy * .domain.com, forse fopen sta incontrando problemi. Ho preparato un file di prova per connettermi tramite SSL, e l'ho messo su Mosso e ha funzionato.

Mi chiedo perché l'accesso fopen all'improvviso sia un problema per SOAP? Cosa c'è nel Mosso che sta rendendo tutto questo improvvisamente difficile? Devo sostituire alcune impostazioni php.ini ? Potrebbe essere, come spesso accade con errori inutili come questo, qualcosa di completamente diverso?

Aggiornamento: ecco il comando configure da 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 = condiviso, / 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 '' --with-unixODBC '' --disable-pdo '' --disable-xmlreader '' --disable-xmlwriter '' --disable-json '

Nota : il mio commento qui sotto che phpinfo () riporta che è consentito il furl; strano!

È stato utile?

Soluzione 3

OK, un piccolo aggiornamento su questo problema: l'errore misteriosamente è scomparso senza alcuna modifica da parte mia. Dovrò supporre che ci sia stato qualche strano errore di configurazione su Mosso che è stato riparato silenziosamente. È anche possibile da remoto che si sia verificato un problema con l'installazione della società X. Questo è il peggior tipo di correzione IMO! Grazie comunque a tutti coloro che hanno esaminato questo aspetto.

Altri suggerimenti

Potresti avere questo http://us.php.net/ manuale / it / filesystem.configuration.php # ini.allow-url-fopen

mancante.

Ricorda, puoi sempre usare phpinfo () per confrontare visivamente l'ambiente tra macchine.

Un'altra possibilità (da i documenti PHP ):

Nota: quando la modalità provvisoria è abilitata, PHP verifica se la directory in cui opera lo script ha lo stesso UID (proprietario) dello script in esecuzione.

EDIT: Hmm .. Non vedo la modalità sicura nelle opzioni di compilazione di PHP, quindi probabilmente non è così.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top