簡體   English   中英

如何在不使用`exec()`,`system()`的情況下在PHP中運行Python腳本?

[英]How do I run a Python script in PHP without using `exec()`,` system()` …?

我的LAMP服務器是帶有Apache 2.4,PHP 5.4和Python 3.6的CentOS 7.4。

我是Python的新手。 我剛剛從R遷移到Python。 我需要一些Python包來進行統計,然后將輸出傳遞到PHP。

我復習了許多類似的問題。 答案圍繞exec()passthru()system()shell_exec() 它們是危險的命令,不應在PHP中啟用。

Python官方手冊“將Python與其他語言集成”中 ,僅提到了兩個工具, ppythonPHP "Serialize" in Python ppython似乎不再維護,但這就是我所需要的,就像我使用R時的Rserve一樣。

我也讀了這篇文章

簡單而標准的解決方案是使用Socket或Webservice(API)

現在,如何不使用exec()system() ...(也許是套接字通信)在PHP中運行Python腳本?

將您的Python腳本轉換為Django REST API,然后使用cURL對其進行調用。

如果您不知道如何使用,一切都是危險的(甚至是叉子)。 好吧,您有幾種選擇:

  1. 標准 :使用exec() / shell_exec()等在PHP中運行Python解釋器。此外,運行Python編譯后的字節碼的延遲小,並且具有運行此功能的能力,因此在這里可以贏得性能。

  2. 非標准的 :如果您擔心手頭的安全性問題,我建議最好將Python命令插入某些批處理表中,並使用CRON調度程序定期運行這些命令。 執行后,使用PHP提取結果。 這樣,PHP / Python執行將被解耦,您將可以更好地控制如何/何時執行Python腳本。

  3. 非標准 (不惜一切代價避免) :您提到的項目已通過php-python移至Git。 它只是在端口21230上啟動新的Python server ,並等待來自PHP腳本的Python命令。 現在, 這些解決方案是最危險的解決方案 ,因為Web服務器中增加了開放的端口,這使管理員頭疼不已,因此不建議使用。

  4. 最后一個選擇是質疑一個假設,即在PHP的Web開發中根本需要 Python。 公司IT農場中使用的語言越多-維護所有資源的難度就越大,並且新功能/錯誤修復的上市時間也就越難。 因此,在考慮執行Python腳本之前,首先考慮將其重寫為純PHP

    您可以自動執行此操作,但是這些類型的翻譯器很容易出錯且不完整-例如,這種翻譯器不支持imports (該死嗎?沒有輸入的Python就像沒有面粉的面包一樣)。 第二種選擇是學習Python並將手頭的代碼重寫為PHP。 或者只是獲得客戶需求並將其編碼到PHP中。 可以在Python中完成的所有操作,也可以在PHP中完成(至少從Web開發的角度來看)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM