簡體   English   中英

如何從PHP執行CGI文件?

[英]How can I execute CGI files from PHP?

我正在嘗試制作一個將為我管理Mercurial存儲庫的Web應用程序。 我想要它,以便當我告訴它加載存儲庫X時:

  • 連接到MySQL服務器並確保X存在。
  • 檢查是否允許用戶訪問存儲庫。
  • 如果上述條件成立,請從mysql服務器獲取X的位置。
  • 運行包含存儲庫路徑的hgweb cgi腳本(python)。

這是我想要的問題:使用hgweb腳本,對其進行修改並運行。 但是我不想:使用hgweb腳本,對其進行修改,將其寫入文件並重定向到該文件。 我正在使用Apache運行httpd進程。

您可以從PHP內部運行Shell腳本。 有多種方法可以完成此操作,並且某些主機沒有提供適當的權限也很復雜,所有這些信息在php.net上都有詳細記錄。 就是說,最簡單的方法是將命令簡單地括在反引號中。 因此,要解壓縮文件,我可以說:

`unzip /path/to/file`

因此,如果您的python腳本可以在命令行環境中運行(或者您可以對其進行修改以使其運行),則這似乎是首選方法。

Ryan Ballantyne發表了正確的答案(我支持)。 反引號運算符是執行Shell腳本的方式。

最簡單的解決方案可能是修改hgweb腳本,以使其本身不“包含”存儲庫的路徑。 而是將其作為命令行參數傳遞。 這意味着您不必擔心在任何地方修改和編寫hgweb腳本。 您要做的就是:

//do stuff to get location of repository from MySQL into variable $x
//run shell script
$res = `python hgweb.py $x`;

就您所質疑的,不,您是不可能讓php執行修改后的腳本而不將其寫入某處,無論是磁盤上的文件,映射到ram的虛擬文件還是類似的文件。

聽起來您可能正在嘗試用樹枝敲打鐵路高峰。 如果您要根據存儲在MySQL中的用戶權限來過濾訪問權限,是否已查看現有的HG解決方案以確保沒有比hgweb更適用的功能? 它實際上是為做好某件事而構建的,這超出了正常范圍。

我可能建議建議將apache的本機身份驗證作為一種更方便的方法來控制對存儲庫的訪問,然后直接為存儲庫提供服務而無需修改腳本。

暫無
暫無

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

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