企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 笔记目录 [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) ~~~