2011-05-10 27 views
0

我有一個場景,在我們的php文件接受來自命令行的參數。遠程調用具有參數的PHP函數

例如我們說,

php test.php 'hello' 

現在在命令提示符上面運行。假設現在我們想從客戶端調用它,但是我不希望System系統調用是一個糟糕的設計,我只是想直接調用接受客戶端參數的函數,並且當然客戶端可以是任何東西.Net或PHP,那我該如何完成它?

謝謝!

+0

使用System系統調用爲什麼認爲它是壞設計?調用外部程序始終是平臺特定的。 – Oswald 2011-05-10 09:21:40

回答

0

將您的腳本放在Web服務器上並通過HTTP GET或POST接受參數。

它看起來像http://hostname/test.php?argument=hello。然後,在你test.php腳本,通過$_GET['argument']到你的函數:

myfunction($_GET['argument']);

不要忘了淨化輸入!

0

您可以使用將管理命令行argiments功能:

$param_1 = isset($argv[1]) ? $argv[1] : null; if ($param_1 == 'function1') function1() elseif...

等。

0

您可以製作一個包裝腳本,將來自客戶端的GET參數放入命令行參數數組中。

比方說,您的客戶端發出請求,如:

hostname/testWrapper.php?params[]=hello&params[]=goodbye 

你的包裹腳本testWrapper.php然後可以像

<?php 
    $params = $_GET['params']; 

    foreach ($params as $i => $param) 
    $_SERVER['argv'][$i + 1] = $param; 

    $_SERVER['argc'] = count($_GET['params'] + 1); 

    include ('test.php'); 
?> 

這是假設你的test.php使用$_SERVER['argv/argc']讀取命令行參數。它可能會使用和$argc(如果在您的php.ini中啓用了「register_argc_argv」),在這種情況下,您只需在包裝腳本中使用它們而不是$_SERVER[...]

請注意,我們必須用一個偏移插入參數1(即$params[0]變得$_SERVER['argv'][1],這是因爲當腳本從命令行調用時,第一個參數$_SERVER['argv'][0]是腳本的名稱。

最後,除非你完全確定你的test.php會清理參數,你必須在包裝腳本中完成它。