2014-09-19 146 views
0

我在網頁上有一個菜單系統,它允許用戶從多個選項中進行選擇。當選擇一個選項時,我想通過一個函數將它作爲參數傳遞。我想評估看看選擇了什麼,然後執行提供arg的腳本。我是PHP新手,但很高興能夠學習。下面是我試圖消化相關解釋後的最佳嘗試。在PHP中將函數的arg傳遞給bash腳本

public function getData($args=array()) { 

     if(isset($args["what"])){ 
      exec(
       '/home/foo/myscript.((string)$args["what"]'); 
     } 
     else{ 
      exec(
       '/home/foo/myscript()'); 
     } 
    } 

我懷疑我沒有足夠的篇幅佔了shell腳本和參數之間正確的,但我已經嘗試了所有看似合理變化會失敗。我在正確的軌道上還是應該以另一種方式一起嘗試?

+1

你在bash中做了什麼,你可以重寫php – 2014-09-19 00:17:27

+0

感謝您的快速響應。問題的核心是我從PHP獲取參數,並且需要將其提供給bash。我不知道應該是什麼樣子。也許我還沒有看到完整的圖片,但我認爲我的問題不僅僅是將bash重寫爲PHP。 – Ryan 2014-09-19 00:23:03

回答

0
exec('/home/foo/myscript.((string)$args["what"]'); 

這樣做的問題是當您開始嘗試連接PHP時,您仍然在您的字符串中。先關閉字符串。

exec('/home/foo/myscript ' . (string)$args["what"]); 

接下來,你會希望將參數傳遞給腳本以保證它們不會被誤解。檢出escapeshellarg()http://php.net/manual/en/function.escapeshellarg.php

exec('/home/foo/myscript ' . escapeshellarg((string)$args["what"])); 

而且,你可能不需要(string)因爲escapeshellarg()只使用字符串反正。無論該參數是什麼,都會被轉換爲字符串。

exec('/home/foo/myscript ' . escapeshellarg($args['what'])); 
相關問題