Maison  >  Article  >  développement back-end  >  Que faire si php ne parvient pas à appeler python

Que faire si php ne parvient pas à appeler python

藏色散人
藏色散人original
2019-12-13 14:33:534946parcourir

Que faire si php ne parvient pas à appeler python

Que dois-je faire si php ne parvient pas à appeler python ?

Solution à l'échec de PHP lors de l'appel de Python

Supposons qu'il existe un fichier : php_test.php python_test.py

Exécutez Python dans le php file :

exec("python python_test.py", $array, $ret);

Si une erreur se produit lors de l'exécution de Python, elle ne peut pas être enregistrée dans le tableau, l'erreur standard doit donc être redirigée vers un fichier. Le code ci-dessus est réécrit comme suit :

exec("python python_test.py 2>error.txt", $array, $ret);
<.>0,1, en bash, les trois chiffres 2 représentent STDIN_FILENO, STDOUT_FILENO et STDERR_FILENO, qui sont une entrée standard (généralement le clavier), une sortie standard (généralement l'écran d'affichage, ou la console du terminal utilisateur pour être précis), et erreur standard (sortie d’informations d’erreur).

Vous pouvez également rediriger l'erreur standard vers la sortie standard et l'enregistrer dans $array de la manière suivante :

exec("python python_test.py 2>error.txt 2>&1", $array, $ret);

Vous pouvez ensuite trouver des solutions basées sur le message d'erreur.

Généralement, vous pouvez voir le message d'erreur immédiatement lorsque vous exécutez le fichier PHP via la commande du terminal. Cependant, lorsque vous exécutez le fichier PHP via le navigateur, vous ne pouvez afficher le message d'erreur que par la méthode ci-dessus. Par conséquent, le problème est que PHP peut exécuter avec succès des fichiers Python sous la ligne de commande, mais il ne peut pas s'exécuter correctement via le navigateur. C'est parce que les bibliothèques dynamiques appelées par les deux méthodes sont incohérentes !

Ce qui est appelé via la ligne de commande est la bibliothèque dynamique existante dans le système, et ce qui est appelé via le navigateur est la bibliothèque dynamique dans le serveur Web. (J'ai installé XAMPP, donc la bibliothèque dynamique dans lampp/lib est appelée via le navigateur).

Solution :

1. Recherchez la mauvaise bibliothèque dynamique dans le message d'erreur de sortie

2. Recherchez la bibliothèque dynamique appropriée via la commande de localisation Emplacement : localisez libxxx.so

3. Supprimez ou renommez la bibliothèque dynamique du même nom dans le serveur Web

4. Liez la bibliothèque dynamique trouvée dans le système via l'étape 2 à

Exemple dans le répertoire lib du serveur web :

Deux erreurs peuvent survenir lors de l'utilisation du module hashlib en Python :

<span style="font-family:Arial, Helvetica, sans-serif;">relocation error: python: symbol OpenSSL_add_all_digests, version OPENSSL_1.0.0 not defined in file libcrypto.so.1.0.0 with link time reference</span>
<span style="font-family:Arial, Helvetica, sans-serif;">python: /opt/lampp/lib/libcrypto.so.1.0.0: version `OPENSSL_1.0.2&#39; not found (required by /opt/lampp/lib/libssl.so.1.0.0)</span>

1. Découvrez que le système contient libcrypto.so. Tous les chemins vers 1.0.0 : localisez libcryto.so.1.1

/home/ubuntu/.cache/vmware/drag_and_drop/52091a33-81b7-cc30-d88c-574c47558e32/ndk/libimobiledevice-android-master/openssl/libcrypto.so.1.0.0
/home/ubuntu/.cache/vmware/drag_and_drop/52091a33-81b7-cc30-d88c-574c47558e32/ndk/libimobiledevice-android-master/out/fsroot/lib/libcrypto.so.1.0.0
/lib/x86_64-linux-gnu/libcrypto.so.1.0.0
/opt/lampp/lib/libcrypto.so.1.0.0

2. Renommez la bibliothèque dynamique du même nom dans le serveur Web :

sudo mv /opt/lampp/lib/libcryto.so.1.1 /opt/lampp/lib/libcryto.so.1.1.bak

3. dans le système Lien vers le répertoire lib du serveur web :


sudo ln -s  /lib/x86_64-linux-gnu/libcrypto.so.1.0.0  /opt/lampp/lib/libcryto.so.1.1

libssl.so.1.0.0 Les étapes de solution sont les mêmes que ci-dessus.

Pour plus de connaissances sur PHP, veuillez visiter le

Tutoriel PHP !

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn