Maison > développement back-end > Problème PHP > Que faire si php ne parvient pas à appeler python

Que faire si php ne parvient pas à appeler python

藏色散人
Libérer: 2023-02-28 17:30:01
original
5039 Les gens l'ont consulté

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);
Copier après la connexion

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);
Copier après la connexion
<. 🎜>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);
Copier après la connexion

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>
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion
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!

Étiquettes associées:
php
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal