小技巧

Server Side Chrome PHP debugger class

https://github.com/ccampbell/chromephp

物件的取值方法

echo $data->{'0'}->UserName;

開發時把錯誤顯示出來

// 放在開頭
error_reporting(E_ALL);
ini_set('display_errors',1);

計時器

$start = microtime(true); // 開始計時!!

/**
 * 做點啥事 !
 **/

$stop = round(microtime(true) - $start, 5); // 停止計時!!

echo $stop , ' s ' ; // 顯示花了多久

丟出錯誤

$iNum1 = 10;
$iNum2 = 0;

try{

if ($iNum2 == 0){
    throw new RuntimeException("除以0");
}
    $iResult = $iNum1 / $iNum2;
    echo ("結果 \$iNum1 除以 $iNum2 = ".($iResult)."<br/>");
}catch (RuntimeException $e){
    echo ("不准除以0");
}
?>

參考資料

基本取得IP

PS: IP最多只有45個字符。(一般39)

function get_client_ip() {
    $ipaddress = '';
    if (getenv('HTTP_CLIENT_IP'))
        $ipaddress = getenv('HTTP_CLIENT_IP');
    else if(getenv('HTTP_X_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_X_FORWARDED_FOR');
    else if(getenv('HTTP_X_FORWARDED'))
        $ipaddress = getenv('HTTP_X_FORWARDED');
    else if(getenv('HTTP_FORWARDED_FOR'))
        $ipaddress = getenv('HTTP_FORWARDED_FOR');
    else if(getenv('HTTP_FORWARDED'))
       $ipaddress = getenv('HTTP_FORWARDED');
    else if(getenv('REMOTE_ADDR'))
        $ipaddress = getenv('REMOTE_ADDR');
    else
        $ipaddress = 'UNKNOWN';
    return $ipaddress;
}

參考資料

一定要檢查IP格式,不可信任外部給的資料

  1. 方法一 要開啟 filter

    $isValid = filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4);
    // $isValid 如果失敗回傳 false ;
    
  2. 方法二 正則表達式

    IPv4
    /^((2[0-4]|1\d|[1-9])?\d|25[0-5])(\.(?1)){3}\z/
    
    IPv6
    /^(((?=(?>.*?(::))(?!.+\3)))\3?|([\dA-F]{1,4}(\3|:(?!$)|$)|\2))(?4){5}((?4){2}|((2[0-4]|1\d|[1-9])?\d|25[0-5])(\.(?7)){3})\z/i
    
  3. 字串消毒 (排除特殊字)

    參考資料

Console.log

顯示資料到console中。

echo '<script>
    console.log(',json_encode($array),'); // Array 
    console.log("',$string,'"); // 字串 要加上""
</script>';

解決json_encode中文亂碼問題

1.先 urlencode 字串 再 urldecode json
 echo urldecode(json_encode(urlencode("中文"))); 
2. PHP5.4 以上可以使用
json_encode("中文", JSON_UNESCAPED_UNICODE);

解決 JSON_ERROR_UTF8 error

資料來源

function safe_json_encode($value){
    if (version_compare(PHP_VERSION, '5.4.0') >= 0) {
        $encoded = json_encode($value, JSON_PRETTY_PRINT);
    } else {
        $encoded = json_encode($value);
    }
    switch (json_last_error()) {
        case JSON_ERROR_NONE:
            return $encoded;
        case JSON_ERROR_DEPTH:
            return 'Maximum stack depth exceeded'; // or trigger_error() or throw new Exception()
        case JSON_ERROR_STATE_MISMATCH:
            return 'Underflow or the modes mismatch'; // or trigger_error() or throw new Exception()
        case JSON_ERROR_CTRL_CHAR:
            return 'Unexpected control character found';
        case JSON_ERROR_SYNTAX:
            return 'Syntax error, malformed JSON'; // or trigger_error() or throw new Exception()
        case JSON_ERROR_UTF8:
            $clean = utf8ize($value);
            return safe_json_encode($clean);
        default:
            return 'Unknown error'; // or trigger_error() or throw new Exception()

    }
}

function utf8ize($mixed) {
    if (is_array($mixed)) {
        foreach ($mixed as $key => $value) {
            $mixed[$key] = utf8ize($value);
        }
    } else if (is_string ($mixed)) {
        return utf8_encode($mixed);
    }
    return $mixed;
}

擺脫波動拳

什麼是波動拳

if(check()=='is_numeric'){
    if(check()=='is_int'){
        if(check()>1000){
            if(check()<1001){
  /*    看我的!!!  波動拳 !!!   */
            }
        }
    }
}

不然可以怎麼寫

do {

  if( !process_x() )
    { clean_all_processes();  break; }

  // 做點事 

  if( !process_y() )
    { clean_all_processes();  break; }

  // 做點事 

  if( !process_z() )
    { clean_all_processes();  break; }

  // 做點事 

} while (0);

參考資料

results matching ""

    No results matching ""