php调用python失败怎么办
php调用python失败怎么办?
假设有文件:php_test.php python_test.py
在php文件中运行Python:
exec("python python_test.py", $array, $ret);
如果运行Python出错并不能保存在数组array中,因此应该把标准错误重定向到文件中,以上代码改写如下:
exec("python python_test.py 2>error.txt", $array, $ret);
在bash中0,1,2三个数字分代表STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,即标准输入(一般是键盘),标准输出(一般是显示屏,准确的说是用户终端控制台),标准错误(出错信息输出)。也可以通过以下方式将标准错误重定向到标准输出保存到$array中:
exec("python python_test.py 2>error.txt 2>&1", $array, $ret);
然后就可以根据错误信息去寻求解决办法。
一般在终端通过命令运行PHP文件是可以马上看到错误信息的,但是通过浏览器运行PHP文件就只能上面所述方法去输出错误信息。因此问题也就是在命令行下PHP可以成功执行Python文件,而通过浏览器就不能成功运行,这是因为两种方式所调用的动态库不一致!通过命令行方式调用的是系统中的已有的动态库,而通过浏览器方式调用的是Web服务器中的动态库。(我安装的XAMPP,所以通过浏览器方式调用的就是lampp/lib中的动态库)。
解决办法:
1.在输出的错误信息中找到出错的动态库
2.通过locate命令找到相关的动态库所在的位置:locate libxxx.so
3.将web服务器中的同名动态库删除或重命名
4.将通过第2步在系统中找到的动态库链接到web服务器的lib目录中
实例:
Python中使用hashlib模块时可能出现两个错误:
<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.找出系统中包含libcrypto.so.1.0.0的所有路径:locate 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.将web服务器中的同名动态库重命名:sudo mv /opt/lampp/lib/libcryto.so.1.1 /opt/lampp/lib/libcryto.so.1.1.bak
3.将系统中libcryto.so.1.1链接到web服务器的lib目录中: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解决步骤同上。
更多相关知识,请访问PHP中文网!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

H5頁面需要持續維護,這是因為代碼漏洞、瀏覽器兼容性、性能優化、安全更新和用戶體驗提升等因素。有效維護的方法包括建立完善的測試體系、使用版本控制工具、定期監控頁面性能、收集用戶反饋和製定維護計劃。

在PHP8 中,match表達式是一種新的控制結構,用於根據表達式的值返回不同的結果。 1)它類似於switch語句,但返回值而非執行語句塊。 2)match表達式使用嚴格比較(===),提升了安全性。 3)它避免了switch語句中可能的break遺漏問題,增強了代碼的簡潔性和可讀性。

PHP中的...(splat)操作符用於函數參數和數組解包,提升代碼簡潔性和效率。 1)函數參數解包:將數組元素作為參數傳遞給函數。 2)數組解包:將一個數組解包到另一個數組中或作為函數參數。

如何在爬蟲時獲取58同城工作頁面的動態數據?在使用爬蟲工具爬取58同城的某個工作頁面時,可能會遇到這樣�...

PS“正在載入”問題是由資源訪問或處理問題引起的:硬盤讀取速度慢或有壞道:使用CrystalDiskInfo檢查硬盤健康狀況並更換有問題的硬盤。內存不足:升級內存以滿足PS對高分辨率圖片和復雜圖層處理的需求。顯卡驅動程序過時或損壞:更新驅動程序以優化PS和顯卡之間的通信。文件路徑過長或文件名有特殊字符:使用簡短的路徑和避免使用特殊字符。 PS自身問題:重新安裝或修復PS安裝程序。

JavaScript代碼換行技巧詳解在編寫JavaScript代碼時,我們經常會遇到一行代碼過長的情況,這不僅影響代碼的可讀�...

在PHP中可以通過使用不可預測的令牌來有效防範CSRF攻擊。具體方法包括:1.生成並在表單中嵌入CSRF令牌;2.在處理請求時驗證令牌的有效性。
