## 笔记目录
[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)
~~~