## 筆記目錄
[TOC=2,3]
* * * * *
- ### 其他
* * * * *
>[info]#### 解決方案
~~~
1)flush和ob_flush的正確順序,正確應是,先ob_flush再flush 如下:
ob_flush();如下:
flush();
如果Web服務器的操作系統是windows系統,那順序顛倒或者不使用ob_flush()也不會出現問題。[有待求證 ] 但是在Linux系統上就無法刷新輸出緩沖。
~~~
- ### 環境常量
* * * * *
>[info]#### 解決方案
~~~
define('IS_CLI', PHP_SAPI == 'cli' ? true : false);
define('IS_WIN', strpos(PHP_OS, 'WIN') !== false);
define('START_TIME', microtime(true));
define('START_MEM', memory_get_usage());
~~~
- ### 格式化memory_get_usage()輸出
* * * * *
>[info]#### 解決方案
~~~
function convert($size){
$unit=array('b','kb','mb','gb','tb','pb');
return @round($size/pow(1024,($i=floor(log($size,1024)))),2).' '.$unit[$i];
}
echo convert(memory_get_usage(true));
輸出:256 kb
~~~
- ### 統計從開始到統計時的時間
* * * * *
>[info]#### 解決方案
~~~
/**
* 統計從開始到統計時的時間(微秒)使用情況 返回值以秒為單位
* @param integer|string $dec 小數位
* @return integer
*/
public static function getUseTime($dec = 6)
{
return number_format((microtime(true) - START_TIME), $dec);
}
~~~
- ### 獲取文件加載信息
* * * * *
>[info]#### 解決方案
~~~
/**
* 獲取文件加載信息
* @param bool $detail 是否顯示詳細
* @return integer|array
*/
public static function getFile($detail = false)
{
if ($detail) {
$files = get_included_files();
$info = [];
foreach ($files as $key => $file) {
$info[] = $file . ' ( ' . number_format(filesize($file) / 1024, 2) . ' KB )';
}
return $info;
}
return count(get_included_files());
}
~~~
- ### 驗證是否存在
* * * * *
>[info]#### 解決方案
~~~
1)驗證類中方法是否存在
if(!method_exists($this, $trigger)){
$result=array('status'=>400,'message'=>"該任務類型的觸發器({$trigger})暫未開發,若使用,請先聯系技術!");
}
1)驗證文件是否存在
if (is_file(APPPATH.'models/exp/exp_'.strtolower($express_model).'.php')) {
。。。。
}
if (file_exists(APPPATH.'models/exp/exp_'.strtolower($express_model).'.php')) {
。。。。
}
~~~
- ### 定義請求數據的方法
* * * * *
>[info]#### 解決方案
~~~
//定義請求數據的方法
define('IS_POST',strtolower($_SERVER["REQUEST_METHOD"]) == 'post');//判斷是否是post方法
define('IS_GET',strtolower($_SERVER["REQUEST_METHOD"]) == 'get');//判斷是否是get方法
define('IS_AJAX',isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');//判斷是否是ajax請求
~~~
- ### PHP 按位與(&)運算符應用實踐
* * * * *
>[info]#### 解決方案
1、PHP手冊中的講解為:
> $a & $b And(按位與) 將把 $a 和 $b 中都為 1 的位設為 1。
2、應用1:&的運算方法(奇偶性判斷)
> 整數與“1”進行按位與運算,運算結果為“0”表示為偶數,運算結果為“1”表示為奇數。
3、應用2:用戶權限的判斷
> 假設一個系統中用戶權限分配模塊,設置權限為1=>查看,2=>新增, 4=>修改 ,8=>刪除,如此存儲用戶的權限,只需要在數據庫中存一個整數合即可,不用存儲間隔出的字符串。
>
> 如果用戶擁有新增和查看權限,功能代碼為:1+2 = 3;用戶擁有所有權限,則功能 代碼為:1+2+4+8 = 15;
>
> 用戶所有用的權限為12
>
> 檢測用戶權限是否擁有修改權限:12&4 結果為4,表示擁有修改權限。
>
> 檢測用戶權限是否擁有新增權限:12&2 結果為0,表示沒有新增權限。
>
> 在數據庫中查找所有擁有修改權限的用戶:select \* from user where (user\_mod&4) > 0,即可查出來所有擁有修改權限的用戶。
>
~~~
//按位或:
$res=(1 | 2 | 8 | 32);
var_dump($res);
echo("\n"); //int(43)
//按位與:
$res=((43 & (1 | 2 | 8 | 32 | 64 | 128 | 1024 | 2048 | 4096 | 8192 | 16384)));
var_dump($res);
echo("\n"); //int(43)
//按位應用:
$res=((43 & (1 | 2 | 8 | 32 | 64 | 128 | 1024 | 2048 | 4096 | 8192 | 16384)) === (1 | 2 | 8 | 32));
var_dump($res);
echo("\n"); //bool(true)
~~~