2011-07-26 171 views
47

我有一個需要從命令行(通過crontab)運行的PHP文件。我需要通過type=daily到文件,但我不知道如何。我想:將變量傳遞給從命令行運行的php腳本

php myfile.php?type=daily 

但返回此錯誤:

無法打開輸入文件:myfile.php類型每天

=我能做些什麼?

回答

91

?type=daily爭論(以$_GET陣列結尾)僅對網頁訪問頁面有效。

你需要調用它php myfile.php daily和檢索陣列參數(這將是$argv[1],因爲$argv[0]myfile.php)。

如果該頁面也用作網頁,則可以考慮兩種選擇。無論是用shell腳本和wget訪問它,並調用從cron:

#!/bin/sh 
wget http://location.to/myfile.php?type=daily 

還是在PHP文件檢查它是否是從命令行或不叫:

if (defined('STDIN')) { 
    $type = $argv[1]; 
} else { 
    $type = $_GET['type']; 
} 

(注意:您可能需要/想檢查實際上包含了足夠的變量,例如)

41

只需將它作爲普通參數傳遞,並使用數組在PHP中進行訪問。

php myfile.php daily 

和myfile.php

$type = $argv[1]; 
+0

發生錯誤:「未定義偏移」 – Tarek

+0

感謝一切現在工作。 – Tarek

+1

使用:if(isset($ argv [1])){ echo。 $的argv [1]; } else { \t die('no!'); } – demenvil

6

發送參數通過索引像其他應用

php myfile.php type=daily 

,然後你可以騎上他們這樣

<?php 
if (count($argv) == 0) exit; 
foreach ($argv as $arg) 
    echo $arg; 
?> 
+2

這是不是真的那麼方便,它不分離出鍵和值,它只是傳遞值「類型=日報」 – spybart

1
<?php 
if (count($argv) == 0) exit; 
foreach ($argv as $arg) 
echo $arg; 
?> 

這個代碼不應該使用。首先所謂像所有CLI的:在/ usr/bin中/ PHP phpscript.php將有一個argv的值是腳本的名稱

array(2) { 
    [0]=> 
    string(13) "phpscript.php" 
} 

這一個都會被執行,因爲將有1個或2 ARGS過時

3

在文件myfile.php將該代碼並運行爲php myfile.php type=daily

<?php 
$a = $argv; 
$b = array(); 
if (count($a) == 0) exit; 
foreach ($a as $arg){ 
    list($x,$y) = explode('=', $arg); 
    $b["$x"] = $y; 
} 
?> 

如果您在?>標記前新增var_dump($b);,你將看到陣列$b包含type => daily

+1

雖然這可能回答這個問題,可以考慮在這個解決方案如何解決問題添加詳細信息。請參閱http://stackoverflow.com/help/how-to-answer。 –

+0

保存這段代碼的文件myfile.php – easyaspi

+0

保存此代碼文件myfile.php和運行爲「PHP myfile.php類型=每天」如果你添加的var_dump($ B);在?>標記之前,您會看到數組$ b包含type => daily。 – easyaspi

6

這些線路將在CLI調用的參數轉換像php myfile.php "type=daily&foo=bar"成衆所周知的$_GET -array :

if (!empty($argv[1])) { 
    parse_str($argv[1], $_GET); 
} 

雖然這是相當混亂的覆蓋全球$_GET - 陣列,它所有的腳本快速轉換爲接受CLI參數。

有關詳細信息,請參閱http://php.net/manual/en/function.parse-str.php

+0

完美答案!謝謝! – Reado

-1
if (isset($argv) && is_array($argv)) { 
    $param = array(); 
    for ($x=1; $x<sizeof($argv);$x++) { 
     $pattern = '#\/(.+)=(.+)#i'; 
     if (preg_match($pattern, $argv[$x])) { 
      $key = preg_replace($pattern, '$1', $argv[$x]); 
      $val = preg_replace($pattern, '$2', $argv[$x]); 
      $_REQUEST[$key] = $val; 
      $$key = $val; 
     }  
    } 
} 

我把參數在$ _REQUEST

$ _REQUEST [$關鍵] = $ VAL;

和也可用直接

$$鍵= $ VAL

使用本那樣:

myFile.php /鍵= VAL

相關問題