我目前正在運行的cronjobs幾個人,PHP GET請求來知道誰是這些人我給它一些細節參數:執行通過終端
0 1 * * * cd /var/www; php auto.php?user=user
由於某種原因,它返回這個結果:
無法打開輸入文件:?auto.php用戶=用戶
是有什麼錯的語法?我必須編碼任何東西嗎?
我目前正在運行的cronjobs幾個人,PHP GET請求來知道誰是這些人我給它一些細節參數:執行通過終端
0 1 * * * cd /var/www; php auto.php?user=user
由於某種原因,它返回這個結果:
無法打開輸入文件:?auto.php用戶=用戶
是有什麼錯的語法?我必須編碼任何東西嗎?
在命令行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的典型位置
問號表示一個HTTP GET參數,它在終端上沒有意義,因爲不涉及Web服務器。您可以使用此:
cd /var/www; php auto.php some parameters
然後用$_SERVER['argc']
和$_SERVER['argv']
PHP腳本中讀取參數。
不能調用從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的確實是所有的本身。
你不能做到這一點的方式 - 它傳遞參數的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。
顯示「一些參數」 – Osa
的完整的例子這是完整的例子,「一些」和「參數」是參數。嘗試腳本中的'var_dump($ _ SERVER ['argv'])'來看看它是如何工作的。 –