2012-10-07 172 views
1

我目前正在運行的cronjobs幾個人,PHP GET請求來知道誰是這些人我給它一些細節參數:執行通過終端

0 1 * * * cd /var/www; php auto.php?user=user 

由於某種原因,它返回這個結果:

無法打開輸入文件:?auto.php用戶=用戶

是有什麼錯的語法?我必須編碼任何東西嗎?

回答

6

在命令行PHP中使用的參數是不同

命令應該是

php auto.php myuser

然後在腳本訪問使用$_SERVER['argv']超全局數組變量 - 每個命令行參數是爲了在該陣列中以腳本名稱開始。您可以檢查在這種情況下與$_SERVER['argc']

傳遞的參數數目

 
$_SERVER['argc'] = 2 
$_SERVER['argv'][0] = auto.php 
$_SERVER['argv'][1] = myuser 

獎金信息

您可以添加#!/usr/bin/php(稱爲認領)到PHP文件的第一行,添加執行位,那麼你不必在命令行調用php,你可以調用腳本。假設PHP是位於/ usr/bin中/ PHP的典型位置

2

問號表示一個HTTP GET參數,它在終端上沒有意義,因爲不涉及Web服務器。您可以使用此:

cd /var/www; php auto.php some parameters 

然後用$_SERVER['argc']$_SERVER['argv'] PHP腳本中讀取參數。

+0

顯示「一些參數」 – Osa

+0

的完整的例子這是完整的例子,「一些」和「參數」是參數。嘗試腳本中的'var_dump($ _ SERVER ['argv'])'來看看它是如何工作的。 –

2

不能調用從URL風格的參數命令行PHP腳本,但也有幾個可能的解決方案:

您可以使用wget來有效地觸發通過web服務器的腳本(假設它實際上是在服務器中運行的網頁/腳本)

0 1 * * * wget http://yourserver/thepath/auto.php?user=user 

使用PHP的getopt擴展您修改腳本以接受殼式參數

$options = getopt("u:"); // expect -u followed by the parameter value 
$user = $options["u"]; 
// continue the script 

將其稱作

php -q auto.php -u user 

退房的getopt的文檔頁面,你可以把它比這個票友很多也是如此。使用getopt over argc/argv(它仍然是一個有效的btw選項)的主要優點是處理可以按任意順序給出的多個參數要容易得多。例如,假設您需要:

php -q auto.php -u user -p pass -a another -b whatever 

你需要寫一段代碼,支持分析這些參數,getopt的確實是所有的本身。

1

你不能做到這一點的方式 - 它傳遞參數的HTTP請求,不到處的方式。對於命令行,您必須使用$_SERVER['argv']$_SERVER['argc']

你的情況

你應該返工你的代碼位。在地方的

$user = $_GET['user']; 

使用

$user = $_SERVER['argv'][1]; 

,應該改變方式,你調用你的腳本:

0 1 * * * cd /var/www; php auto.php user 

您還可以會發現一些命令行的輔助類是有用的,即: CLI

見PHP手冊Command Line Usage節更多的INF ormation。