小技巧
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格式,不可信任外部給的資料
方法一 要開啟 filter
$isValid = filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4); // $isValid 如果失敗回傳 false ;
方法二 正則表達式
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
字串消毒 (排除特殊字)
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);