J'ai une mystérieuse erreur PHP SOAP sur mon hôte, mais je ne peux pas dupliquer localement

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

  •  06-07-2019
  •  | 
  •  

Question

J'ai rencontré une erreur PHP / SOAP intéressante qui m'a bloqué. Après avoir cherché, je n’ai trouvé aucune explication plausible, et j’apprécierais votre aide. Voici le fond:

J'ai un site construit en PHP / CodeIgniter qui utilise SOAP pour communiquer via SSL avec un système dorsal fournies par un tiers (appelons-les "société X" pour protéger l'innocent) ne sont pas sous mon contrôle. Dans l’esprit du bon MVC, j’ai mis le code spécifique à l’interaction avec cette source de données dans un modèle distinct ( système / application / models / company_x.php ). J'ai développé localement en utilisant MAMP sur mon Mac, et à peu près tout était relativement lisse grâce aux tests et au développement; y compris l'appel du service Web de la société X via SSL. Je devrais probablement mentionner que leur service Web avait un WSDL étrange que SOAP de PHP 5 n'aimait pas. Des choses comme des paramètres requis qui n'étaient pas là. Il a été un peu étrange d'appeler les méthodes SOAP de manière très explicite, mais j'ai réussi et les tests ont fonctionné. Je l'ai même déployée sur un site de test à l'adresse Mosso , et j’aurais juré que cela fonctionnait pendant un certain temps. là aussi.

Imaginez ma surprise lorsque chaque appel du service Web SOAP commence à générer des erreurs telles que:

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

Les journaux d'erreur ne contenaient pas d'autres informations que le chemin d'accès complet au fichier de modèle sur le serveur. Cela fonctionne localement et je pensais que cela fonctionnait auparavant sur Mosso. Peut-être que Mosso a modifié leurs paramètres et désactivé SOAP ou quelque chose du genre. Un petit phpinfo () plus tard, et ils en ont plus qu'assez. Je pensais que mon Mac était peut-être plus tolérant envers le certificat SSL. Après tout, c’est un certificat GoDaddy * .domain.com, peut-être que fopen a du mal à s’enfuir. J'ai préparé un fichier de test pour la connexion via SSL, puis je l'ai mis sur Mosso et tout a fonctionné.

Je me demande pourquoi l'accès à fopen est-il soudainement un problème pour SOAP? Qu'est-ce qui rend cette tâche difficile chez Mosso? Dois-je remplacer certains paramètres php.ini ? Cela pourrait-il être, comme c'est souvent le cas avec des erreurs inutiles comme celle-ci, quelque chose de complètement différent?

Mise à jour: voici la commande de configuration 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- rép_expat = / 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 '

Remarque : Mon commentaire ci-dessous indique que phpinfo () indique que furl est autorisé. bizarre!

Était-ce utile?

La solution 3

OK, une petite mise à jour sur ce problème: l'erreur mystérieusement a disparu sans aucun changement de ma part. Je vais devoir supposer qu'il y a eu une erreur de configuration étrange sur Mosso qui a été corrigée silencieusement. Il est également possible qu'il y ait eu un problème avec la configuration de la société X. C’est le pire type de correctif IMO! Merci quand même à tous ceux qui ont regardé à ce sujet.

Autres conseils

Vous pourriez avoir ceci http://us.php.net/ manual / fr / filesystem.configuration.php # ini.allow-url-fopen

manquant.

N'oubliez pas que vous pouvez toujours utiliser phpinfo () pour comparer visuellement l'environnement entre les machines.

Autre possibilité (issue de la documentation PHP ):

Note: Lorsque le mode sans échec est activé, PHP vérifie si le répertoire dans lequel le script fonctionne a le même UID (propriétaire) que le script en cours d'exécution.

EDIT: Hmm .. Je ne vois pas le mode sans échec dans vos options de compilation PHP, donc ce n’est probablement pas ça.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top