我有一些需要GET和POST值啓動的腳本,我想通過shell測試它們。
有沒有辦法將值傳遞給該數組,以避免使用getenv()
函數?PHP:如何將php cmd(從shell執行)傳輸到PHP GET和POST數組?
在此先感謝!
我有一些需要GET和POST值啓動的腳本,我想通過shell測試它們。
有沒有辦法將值傳遞給該數組,以避免使用getenv()
函數?PHP:如何將php cmd(從shell執行)傳輸到PHP GET和POST數組?
在此先感謝!
如果你的主要goa l只是要從命令行進行測試,我將使用wget命令,並使用查詢字符串(GET)調用腳本,並使用wget的--post-data=string
參數(用於POST)傳遞發佈數據。
如果您的目標是因爲某種原因根本不使用Web服務器進行測試,我建議使用包裝並封裝您對GET和POST數據的訪問,以便您可以對其進行測試。
你需要的是一個包裝腳本,它設置相關的全局變量和環境變量,然後調用你的腳本。
我的問題最好的答案是'cletus',最好的解決方案是'umop'!兩者均爲+1,umop爲正確答案。 謝謝大家 – CuSS 2010-07-27 10:57:10
看看:$_REQUEST
'注意:在命令行上運行時,這不會包含argv和argc條目;這些存在於$ _SERVER數組中。 ' 感謝反正... – CuSS 2010-07-27 10:58:04
II我錯過了:(對不起 – RobertPitt 2010-07-27 11:00:09
在命令行呼叫您
php test.php something1 something2 something3
和你test.php的是
<?php
print_r($argv);
?>
和輸出
Array
(
[0] => test.php
[1] => something1
[2] => something2
[3] => something3
)
嘗試是這樣的:
if(php_sapi_name() == 'cli' && empty($_SERVER['REMOTE_ADDR'])){ // make sure we're running in CLI
$args = $argv; // copy the argv array, we want to keep the original for (possible) future uses
array_shift($args); // the $argv[0] is the filename, we don't need it
for($i = 0;$i < ($argc - 1);$i++){
list($key, $value) = explode('=', $args[$i]);
$_REQUEST[$key] = $value;
}
}
當然,更多的功能可以通過使用getopts的(如,--get ABC = DEF GHI JKL =名稱--post =測試passwd文件=測試加入 - cookie ilike = cookie),但這取決於你。
+1的代碼... 不明白你的答案的最後一部分。 – CuSS 2010-07-27 10:59:34
if(php_sapi_name() == 'cli')
{
associateGetPost();
}
function associateGetPost()
{
$_GET = $_POST = array(); //Reset
foreach($args as $id => $value)
{
if(substr($value,0,5) == '--get')
{
$_GET = parse_str(substr($value,5,-1))
}elseif(substr($value,0,6) == '--post')
{
$_GET = parse_str(substr($value,6,-1))
}
}
}
沿着這些線的東西。
+1,但是會使用'umop'答案。感謝幫助'RobertPitt' – CuSS 2010-07-27 11:42:50
請您詳細說明您的問題。 – Sarfraz 2010-07-27 10:06:49
值得注意的是,HTTP和命令行在GET和POST方面有所不同。在你的情況下,它可能是相關或不相關的,但你應該考慮到它。 – 2010-07-27 10:26:27
我的問題的最佳答案來自'cletus',最好的解決方案是'umop'!兩者均爲+1,umop爲正確答案。 謝謝大家 – CuSS 2010-07-27 10:56:09