[PHP] 被 getopt() 吃掉的等號 "="

[PHP] 被 getopt() 吃掉的等號 "="

最近在使用 PHP 時,

發現 getopt() 在處理參數上面,似乎有一些問題,

像是等號 = 就會被吃掉~~

 

舉例來說,我用下面的指令去呼叫 PHP:

test.php username=‘root’ password=‘=abc’

 

看到這種輸入,很自然的就會用 getopt() 來處理輸入的參數,例如: 

$longopts = array
(
    “username:”,
    “password:”
);

$array_cmd_parameters = getopt(“”, $longopts);

 

可是!用上述程式的話,就會很驚訝的發現,

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;
}
(本頁面已被瀏覽過 119 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料