Was soll ich tun, wenn PHP Python nicht aufrufen kann?
Lösung für PHP-Fehler beim Aufrufen von Python
Angenommen, es gibt eine Datei: php_test.php python_test.py
Führen Sie Python im aus PHP-Datei:
exec("python python_test.py", $array, $ret);
Wenn beim Ausführen von Python ein Fehler auftritt, kann dieser nicht im Array gespeichert werden, daher sollte der Standardfehler in eine Datei umgeleitet werden. Der obige Code wird wie folgt umgeschrieben:
exec("python python_test.py 2>error.txt", $array, $ret);
0,1, in Bash stehen die drei Zahlen 2 für STDIN_FILENO, STDOUT_FILENO und STDERR_FILENO, die Standardeingabe (normalerweise die Tastatur), Standardausgabe (normalerweise der Bildschirm oder genauer gesagt die Benutzerterminalkonsole) sind Standardfehler (Fehlerinformationsausgabe).
Sie können Standardfehler auch wie folgt in die Standardausgabe umleiten und im $array speichern:
exec("python python_test.py 2>error.txt 2>&1", $array, $ret);
Dann können Sie basierend auf der Fehlermeldung Lösungen finden.
Im Allgemeinen können Sie die Fehlermeldung sofort sehen, wenn Sie die PHP-Datei über den Terminalbefehl ausführen. Wenn Sie die PHP-Datei jedoch über den Browser ausführen, können Sie die Fehlermeldung nur mit der oben genannten Methode ausgeben. Daher besteht das Problem darin, dass PHP Python-Dateien erfolgreich über die Befehlszeile ausführen kann, aber nicht erfolgreich über den Browser ausgeführt werden kann. Dies liegt daran, dass die von den beiden Methoden aufgerufenen dynamischen Bibliotheken inkonsistent sind!
Was über die Befehlszeile aufgerufen wird, ist die vorhandene dynamische Bibliothek im System, und was über den Browser aufgerufen wird, ist die dynamische Bibliothek im Webserver. (Ich habe XAMPP installiert, daher wird die dynamische Bibliothek in lampp/lib über den Browser aufgerufen).
Lösung:
1. Finden Sie die falsche dynamische Bibliothek in der Ausgabefehlermeldung
2. Suchen Sie die relevante dynamische Bibliothek über den Ortungsbefehl „Location“. : Suchen Sie libxxx.so
3. Löschen Sie die gleichnamige dynamische Bibliothek auf dem Webserver oder benennen Sie sie um
4. Verknüpfen Sie die im System gefundene dynamische Bibliothek über Schritt 2 mit
Beispiel im lib-Verzeichnis des Webservers:
Bei der Verwendung des Hashlib-Moduls in Python können zwei Fehler auftreten:
<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' not found (required by /opt/lampp/lib/libssl.so.1.0.0)</span>
1. Finden Sie heraus, dass das System libcrypto.so enthält. Alle Pfade zu 1.0.0: Suchen Sie 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. Benennen Sie die dynamische Bibliothek mit demselben Namen im Webserver um:
sudo mv /opt/lampp/lib/libcryto.so.1.1 /opt/lampp/lib/libcryto.so.1.1.bak
3. Ändern Sie libcryto.so.1.1 im System Link zum lib-Verzeichnis des Webservers:
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 Die Lösungsschritte sind die gleichen wie oben.
Weitere PHP-Kenntnisse finden Sie im PHP-Tutorial!
Das obige ist der detaillierte Inhalt vonWas tun, wenn PHP Python nicht aufrufen kann?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!