[英]How can I execute CGI files from PHP?
我正在嘗試制作一個將為我管理Mercurial存儲庫的Web應用程序。 我想要它,以便當我告訴它加載存儲庫X時:
這是我想要的問題:使用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.