[PHP] 被 getopt() 吃掉的等號 "="
最近在使用 PHP 時,
發現 getopt() 在處理參數上面,似乎有一些問題,
像是等號 = 就會被吃掉~~
舉例來說,我用下面的指令去呼叫 PHP:
test.php —username=‘root’ —password=‘=abc’
看到這種輸入,很自然的就會用 getopt() 來處理輸入的參數,例如:
可是!用上述程式的話,就會很驚訝的發現,
password 的值被設成 abc 而不是 =abc …
這對密碼來說,實在是很嚴重的問題,因為根本就錯了~~
在網路上也有人對此有些討論,似乎 getopt() 並不是完美的…
我是先用比較簡單的解法(因為程式的輸入是固定的,所以可以用比較死的寫法),
自己去解析參數,就沒有問題囉~
function _parse_cmd_parameters()
{
$array_result = array();
// Get input parameters
$array_input_params = $_SERVER[“argv”];
array_shift($array_input_params);
// Define interested parameter names
$array_param_names = array
(
“username”,
“password”,
);
// Compare with predefined parameter names
foreach($array_input_params as $input_param)
{
foreach($array_param_names as $param_name)
{
$param_name_decorated = “–$param_name=”;
$param_name_decorated_len = strlen($param_name_decorated);
if (strncmp($input_param, $param_name_decorated, $param_name_decorated_len) == 0)
{
$array_result[$param_name] = substr($input_param, $param_name_decorated_len);
break;
}
}
}
return $array_result;
}
{
$array_result = array();
// Get input parameters
$array_input_params = $_SERVER[“argv”];
array_shift($array_input_params);
// Define interested parameter names
$array_param_names = array
(
“username”,
“password”,
);
// Compare with predefined parameter names
foreach($array_input_params as $input_param)
{
foreach($array_param_names as $param_name)
{
$param_name_decorated = “–$param_name=”;
$param_name_decorated_len = strlen($param_name_decorated);
if (strncmp($input_param, $param_name_decorated, $param_name_decorated_len) == 0)
{
$array_result[$param_name] = substr($input_param, $param_name_decorated_len);
break;
}
}
}
return $array_result;
}
(本頁面已被瀏覽過 118 次)