說我們通常通過
http://localhost/index.php?a=1&b=2&c=3
訪問我們如何執行在Linux命令提示符一樣嗎?
php -e index.php
但是如何傳遞$ _GET變量?也許像php -e index.php - a 1 --b 2 --c 3?懷疑會有效果。
謝謝!
說我們通常通過
http://localhost/index.php?a=1&b=2&c=3
訪問我們如何執行在Linux命令提示符一樣嗎?
php -e index.php
但是如何傳遞$ _GET變量?也許像php -e index.php - a 1 --b 2 --c 3?懷疑會有效果。
謝謝!
通常情況下,將參數傳遞給命令行腳本,您將可使用argv
全局變量或getopt:
// bash command:
// php -e myscript.php hello
echo $argv[1]; // prints hello
// bash command:
// php -e myscript.php -f=world
$opts = getopt('f:');
echo $opts['f']; // prints world
$ _GET指的是HTTP GET方法參數,它們在命令行中不可用,因爲它們需要填充Web服務器。
如果你真的想填充$ _GET反正,你可以這樣做:
// bash command:
// export QUERY_STRING="var=value&arg=value" ; php -e myscript.php
parse_str($_SERVER['QUERY_STRING'], $_GET);
print_r($_GET);
/* outputs:
Array(
[var] => value
[arg] => value
)
*/
你也可以執行一個腳本,填充在命令行$_GET
,而無需修改所述腳本:
export QUERY_STRING="var=value&arg=value" ; \
php -e -r 'parse_str($_SERVER["QUERY_STRING"], $_GET); include "index.php";'
請注意,您也可以使用$_POST
和$_COOKIE
。
嘗試使用WGET
:
WGET 'http://localhost/index.php?a=1&b=2&c=3'
你會想把URL用單引號括起來,和查詢部分中的&是shell元字符(單個字符通配符+「在後臺運行此命令」)。 – 2010-11-15 16:26:36
@馬克乙:謝謝你的提示;我已經更新了命令 – 2010-11-15 16:28:18
這會起作用,但需要一個正在運行的Web服務器,並且使整個過程比需要的效率低一點。 – Brad 2010-11-15 16:41:41
php file_name.php var1 var2 varN
然後設置在PHP的第一行的$ _ GET變量,雖然這不是設置$ _GET變量的期望的方式,你可以根據你與該變量以後做什麼遇到問題。
if (isset($argv[1])) {
$_GET['variable_name'] = $argv[1];
}
您啓動腳本的變量將可以從您的PHP應用程序中的$ argv數組訪問。第一項將會是它們來自的腳本的名稱,所以如果你想處理一堆變量,你可能想要做一個array_shift($ argv)來刪除第一個條目。或者只是加載到一個局部變量。
http://php.net/manual/en/function.parse-str。php – 2013-07-31 14:26:06
最簡單,最簡單的解決方案 – 2017-12-08 20:09:46
我只是通過他們這樣的:
php5 script.php param1=blabla param2=yadayada
作品就好了,$ _GET數組是:
array(3) {
["script_php"]=>
string(0) ""
["param1"]=>
string(6) "blabla"
["param2"]=>
string(8) "yadayada"
}
使用php-cgi
二進制,而不是隻php
,並在命令行上傳遞參數,如下所示:
php-cgi -f index.php left=1058 right=1067 class=A language=English
這使這$_GET
:
Array
(
[left] => 1058
[right] => 1067
[class] => A
[language] => English
)
您還可以設置將由Web服務器來設置環境變量,像這樣:
REQUEST_URI='/index.php' SCRIPT_NAME='/index.php' php-cgi -f index.php left=1058 right=1067 class=A language=English
我沒有一個PHP -cgi binary在Ubuntu上,所以我這樣做:
% alias php-cgi="php -r '"'parse_str(implode("&", array_slice($argv, 2)), $_GET); include($argv[1]);'"' --" % php-cgi test1.php foo=123 <html> You set foo to 123. </html> %cat test1.php <html>You set foo to <?php print $_GET['foo']?>.</html>
如果您需要傳遞$ _GET,$ _REQUEST,$ _POS T,或者其他任何你也可以使用PHP交互模式:
php -a
然後鍵入:
<?php
$_GET['a']=1;
$_POST['b']=2;
include("/somefolder/some_file_path.php");
這將手動設置你想要的任何變量,然後運行設置這些變量的PHP文件。
或只是(如果你有LYNX):
lynx 'http://localhost/index.php?a=1&b=2&c=3'
這不會從命令行運行PHP。這將運行通過命令行調用Web服務器的瀏覽器。 – 2014-08-27 10:43:41
php -r 'parse_str($argv[2],$_GET);include $argv[1];' index.php 'a=1&b=2'
你可以做的第一部分爲一個別名:
alias php-get='php -r '\''parse_str($argv[2],$_GET);include $argv[1];'\'
然後只需使用:
php-get some_script.php 'a=1&b=2&c=3'
- 選項1:PHP,CGI -
使用的PHP-CGI「到位 'PHP' 來運行你的腳本。這是因爲你不需要特意修改你的PHP代碼與它合作的最簡單的方法:
php-cgi -f /my/script/file.php a=1 b=2 c=3
- 選項2:如果你有一個Web服務器 -
如果PHP文件是在命令行中,你可以使用 'wget的' web服務器上:
wget 'http://localhost/my/script/file.php?a=1&b=2&c=3'
OR:
wget -q -O - "http://localhost/my/script/file.php?a=1&b=2&c=3"
- 在PHP訪問變量 -
在這兩種選項1 & 2你訪問這些參數是這樣的:
$a = $_GET["a"];
$b = $_GET["b"];
$c = $_GET["c"];
有時候你沒有編輯PHP文件的選項將$ _GET設置爲傳入的參數,有時您不能或不想安裝php-cgi。
我發現這是這種情況下,最好的解決辦法:
php -r '$_GET["key"]="value"; require_once("script.php");
這樣就避免了改變你的PHP文件,並允許您使用純PHP命令。如果你安裝了php-cgi,盡一切辦法來使用它,但這是第二好的。認爲這個選項值得一提
-r表示在字符串後面運行php代碼。您在那裏手動設置$ _GET值,然後引用要運行的文件。
其值得一提的,你應該在正確的文件夾中運行它,往往但並不總是php文件是要求具備報表將使用您的命令的位置,以解決相對URL,文件不是位置的文件夾
我想感謝你的解決方案。我認爲這應該是被接受的答案。您不必安裝額外的庫來使用它。 – swordsecurity 2016-05-28 18:27:44
如果你必須編輯PHP腳本的可能性,可以人爲地使用下面的代碼在腳本的開始填充$ _GET數組,然後調用的語法腳本:php -f script.php name1=value1 name2=value2
// When invoking the script via CLI like "php -f script.php name1=value1 name2=value2", this code will populate $_GET variables called "name1" and "name2", so a script designed to be called by a web server will work even when called by CLI
if (php_sapi_name() == "cli") {
for ($c = 1; $c < $argc; $c++) {
$param = explode("=", $argv[$c], 2);
$_GET[$param[0]] = $param[1]; // $_GET['name1'] = 'value1'
}
}
在命令行粘貼以下內容
export QUERY_STRING="param1=abc¶m2=xyz" ;
POST_STRING="name=John&lastname=Doe" ; php -e -r
'parse_str($_SERVER["QUERY_STRING"], $_GET); parse_str($_SERVER["POST_STRING"],
$_POST); include "index.php";'
值得注意的是,在運行PHP 5.3的Centos 6機器上,調用'php [腳本名稱]「a = 1&b = 2&c = 3」'不會填充'$ _SERVER ['QUERY_STRING']',但您可以輕鬆通過引用'$ _SERVER ['argv'] [1]'來影響同樣的事情。 – 2013-07-31 14:31:53
嘗試[此答案](http://stackoverflow.com/a/11965479/648162)從命令行填充查詢字符串而不修改PHP腳本。 – qris 2014-01-27 13:53:34
這不是最好的答案。看到這個頁面上的其他答案:http://stackoverflow.com/a/11965479/543738 – 2014-12-05 17:40:55