我有一個需要從命令行(通過crontab)運行的PHP文件。我需要通過type=daily
到文件,但我不知道如何。我想:將變量傳遞給從命令行運行的php腳本
php myfile.php?type=daily
但返回此錯誤:
無法打開輸入文件:myfile.php類型每天
=我能做些什麼?
我有一個需要從命令行(通過crontab)運行的PHP文件。我需要通過type=daily
到文件,但我不知道如何。我想:將變量傳遞給從命令行運行的php腳本
php myfile.php?type=daily
但返回此錯誤:
無法打開輸入文件:myfile.php類型每天
=我能做些什麼?
的?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'];
}
(注意:您可能需要/想檢查實際上包含了足夠的變量,例如)
只需將它作爲普通參數傳遞,並使用數組在PHP中進行訪問。
php myfile.php daily
和myfile.php
$type = $argv[1];
發送參數通過索引像其他應用
php myfile.php type=daily
,然後你可以騎上他們這樣
<?php
if (count($argv) == 0) exit;
foreach ($argv as $arg)
echo $arg;
?>
這是不是真的那麼方便,它不分離出鍵和值,它只是傳遞值「類型=日報」 – spybart
<?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過時
在文件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
。
我強烈建議使用getopt。
文檔在http://php.net/manual/en/function.getopt.php
如果你想幫助打印出來供大家選擇比看一看https://github.com/c9s/GetOptionKit#general-command-interface
這些線路將在CLI調用的參數轉換像php myfile.php "type=daily&foo=bar"
成衆所周知的$_GET
-array :
if (!empty($argv[1])) {
parse_str($argv[1], $_GET);
}
雖然這是相當混亂的覆蓋全球$_GET
- 陣列,它所有的腳本快速轉換爲接受CLI參數。
完美答案!謝謝! – Reado
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
發生錯誤:「未定義偏移」 – Tarek
感謝一切現在工作。 – Tarek
使用:if(isset($ argv [1])){ echo。 $的argv [1]; } else { \t die('no!'); } – demenvil