【求点评】生成缓存的一段代码,大家觉得有什么不足之处?代码风格方面
写了一段生成缓存的函数,大家觉得有什么不足之处?
代码的写的方式和风格方面,求评价
//cacheidfunction MakeThreeCache($ID){ $idArr = array( 'DIQU' => array('id', 'name', '/cacheDiqu', 3,1,'中国','/1.php',"SELECT * FROM gk_common_diqu WHERE `level`=%d AND upid='%d' "), 'INFOCAT' => array('id', 'name', '/cacheInfocat',3,0,'大分类','/0.php',"SELECT * FROM gk_info_cat WHERE `level`=%d AND `able`=1 AND upid='%d' "), ); if(!array_key_exists($ID,$idArr)) return false; list($fnid,$fnvalue,$cacheDir,$deep,$upid1,$pos1,$firstFile,$selectSQL) = $idArr[$ID]; global $dsql; set_time_limit(0); $tm1 = microtime(true); $dir1 = DEDEDATA.$cacheDir; RmRecurse($dir1);//delete this dir first! if(!is_dir($dir1) && !mkdir($dir1,0777)) exit('--|目录创建失败!'.$dir1 ); $path1 = $dir1.$firstFile; $data1 = '<'."?php\n"; $data1.= "\n/* CACHE: {$ID} : {$pos1}\t */"; $data1.= "\n/* time: ".date("Y-m-d H:i:s")." */"; $data1.= "\n/* path: ".$path1." */\n"; $data1.= "\n\$CACHE['".$ID."'] = array("; $dsql->Execute('s1',sprintf($selectSQL,1,$upid1)); while($row1 = $dsql->GetArray('s1')) { $data1 .= "\n".$row1[$fnid]."\t=>\t'".$row1[$fnvalue]."',"; $tm2 = microtime(true); $pos2 = $pos1.' -> ['.$row1[$fnid].']'.$row1[$fnvalue]; $dir2 = $dir1."/".$row1[$fnid]; if(!is_dir($dir2) && !mkdir($dir2,0777)) { echo("\n--|--|目录创建失败!".$dir2); continue; } $path2 = sprintf('%s/%d.php',$dir2,$row1[$fnid]); $data2 = '<'."?php\n"; $data2.= "\n/* CACHE: {$ID} : {$pos2}\t */"; $data2.= "\n/* time: ".date("Y-m-d H:i:s")." */"; $data2.= "\n/* path: ".$path2." */\n"; $data2.= "\n\$CACHE['".$ID."']['".$row1[$fnid]."'] = array("; $dsql->Execute('s2',sprintf($selectSQL,2,$row1[$fnid])); while($row2 = $dsql->GetArray('s2')) { $data2 .= "\n".$row2[$fnid]."\t=>\t'".$row2[$fnvalue]."',"; $tm3 = microtime(true); $pos3 = $pos2.' -> ['.$row2[$fnid].']'.$row2[$fnvalue]; $dir3 = $dir2."/".$row2[$fnid]; if(!is_dir($dir3) && !mkdir($dir3,0777)) { echo("\n--|--|--|目录创建失败!".$dir3); continue; } $path3 = sprintf('%s/%d.php',$dir3,$row2[$fnid]); $data3 = '<'."?php\n"; $data3.= "\n/* CACHE: {$ID} : {$pos3}\t */"; $data3.= "\n/* time: ".date("Y-m-d H:i:s")." */"; $data3.= "\n/* path: ".$path3." */\n"; $data3.= "\n\$CACHE['".$ID."']['".$row1[$fnid]."']['".$row2[$fnid]."'] = array("; $dsql->Execute('s3',sprintf($selectSQL,3,$row2[$fnid])); while($row3 = $dsql->GetArray('s3')) { $data3 .= "\n".$row3[$fnid]."\t=>\t'".$row3[$fnvalue]."',"; } $data3.= "\n);\n\n/* [level=3]all taken ".sprintf('%.6f',microtime(true)-$tm3)."s */\n?".'>'; $fp3 = fopen($path3,'w'); fwrite($fp3,$data3); fclose($fp3); } $data2.= "\n);\n\n/* [level=2]all taken ".sprintf('%.6f',microtime(true)-$tm2)."s */\n?".'>'; $fp2 = fopen($path2,'w'); fwrite($fp2,$data2); fclose($fp2); } $data1.= "\n);\n\n/* [level=1]all taken ".sprintf('%.6f',microtime(true)-$tm1)."s */\n?".'>'; $fp1 = fopen($path1,'w'); fwrite($fp1,$data1); fclose($fp1); return true;}
生成的内容1:(表diqu)
<?php/* CACHE: DIQU : 中国 -> [6]广东 -> [76]广州 *//* time: 2012-12-21 12:28:42 *//* path: D:/website/35***.com/www/data/cacheDiqu/6/76/76.php */$CACHE['DIQU']['6']['76'] = array(692 => '从化市',693 => '天河区',694 => '东山区',695 => '白云区',696 => '海珠区',697 => '荔湾区',698 => '越秀区',699 => '黄埔区',700 => '番禺区',701 => '花都区',702 => '增城区',703 => '从化区',704 => '市郊',);/* [level=3]all taken 0.002312s */?>
生成的内容2:(表infocat)
<?php/* CACHE: INFOCAT : 大分类 *//* time: 2012-12-21 12:28:43 *//* path: D:/website/***.com/www/data/cacheInfocat/0.php */$CACHE['INFOCAT'] = array(10001 => '照明工业',10152 => '电子元器件',10272 => '传媒、广电',10392 => '安全、防护',10603 => '包装',10788 => '纸业',10897 => '办公、文教',11183 => '数码、电脑',11384 => '电工电气',11694 => '纺织、皮革',11894 => '服装',12015 => '服饰',12069 => '机械及行业设备',13100 => '五金、工具',13506 => '化工',14224 => '精细化学品',14643 => '橡塑',14932 => '环保',15128 => '仪器仪表',15520 => '家居用品',15805 => '家用电器',15967 => '建筑、建材',16437 => '交通运输',16597 => '礼品、工艺品、饰品',16838 => '能源',16978 => '农业',17300 => '汽摩及配件',17636 => '食品、饮料',17906 => '通信产品',18034 => '玩具',18092 => '冶金矿产',18536 => '印刷',18712 => '运动、休闲',18940 => '商务服务',19177 => '项目合作',19233 => '二手设备转让',19278 => '加工',19455 => '代理',19512 => '库存积压',);/* [level=1]all taken 5.697496s */?>
回复讨论(解决方案)
//检测是否正确的代码:
//检测三级数据,DIQU,INFOCAT/*1) deep=1,d1=0,d2>0,d3>0 d1=0,d2=0,d3=0 d1>0,d2>0,d3=0 d1>0,d2=0,d3=0 d1>0,d2>0,d3>02) deep=2,d1>0,d2>0,d3>03) deep=3,d1>0,d2>0,d3>0*/function CheckThree($cacheID='DIQU',$dataArray=array(),$deep=2){ if(empty($dataArray)) return array(false,'缺少传入的数值参数'); //缺少传入的参数 $cacheArr = array( 'DIQU' => array('DIQU','/cacheDiqu','/1.php','MakeDiquCache','地区'), 'INFOCAT' => array('DIQU','/cacheInfocat','/0.php','MakeInfocatCache','信息分类'), ); if(!array_key_exists($cacheID,$cacheArr)) return array(false,'ID参数错误!'); list($varName,$cacheDirName,$firstFile,$cacheMakeFuncName,$cnName) = $cacheArr[$cacheID]; if(!is_dir(DEDEDATA.$cacheDirName)) $cacheMakeFuncName($cacheID); list($d1,$d2,$d3) = $dataArray; $returnData = array(); if($d1>0) { $path1 = DEDEDATA.$cacheDirName.$firstFile; if(!file_exists($path1)) return array(false,'SysError-'.$cacheID.'-d1 file not found!'); include $path1; if(!array_key_exists($d1,$CACHE[$cacheID])) return array(false,'您选择的['.$cnName.']一级属性错误!'); $returnData[] = $CACHE[$cacheID][$d1]; //防止情况[deep=1,d1>0,d2>0,d3=0],[deep=1,d1>0,d2=0,d3>0] if($deep < 2 && !$d2 && !$d3) return array(true,$returnData); if($d2>0) { $path2 = DEDEDATA.$cacheDirName."/{$d1}/{$d1}.php"; if(!file_exists($path2)) return array(false,'SysError-'.$cacheID.'-d2 file not found!'); include $path2; if(!array_key_exists($d2,$CACHE[$cacheID][$d1])) return array(false,'你选择的['.$cnName.']二级属性错误!'); $returnData[] = $CACHE[$cacheID][$d1][$d2]; //防止情况 [deep=2,d1>0,d2>0,d3>0]导致d3不检查 if($deep<3 && !$d3) return array(true,$returnData); if($d3>0) { $path3 = DEDEDATA.$cacheDirName."/{$d1}/{$d2}/{$d2}.php"; if(!file_exists($path3)) return array(false,'SysErro-'.$cacheID.'-d3 file not found!'); include $path3; if(!array_key_exists($d3,$CACHE[$cacheID][$d1][$d2])) return array(false,'您选择的['.$cnName.']三级属性分类错误!'); $returnData[] = $CACHE[$cacheID][$d1][$d2][$d3]; return array(true,$returnData); } else { return array(false,'您没有选择['.$cnName.']的三级属性'); } } else { return array(false,'您没有选择['.$cnName.']的二级属性'); } } else { return array(false,'您没有选择['.$cnName.']的一级属性'); } //默认也返回数据 return array(true,$returnData);}
求点评,代码风格和方式……
while($row2 = $dsql->GetArray('s2'))
{
$data2 .= "\n".$row2[$fnid]."\t=>\t'".$row2[$fnvalue]."',";
$tm3 = microtime(true);
$pos3 = $pos2.' -> ['.$row2[$fnid].']'.$row2[$fnvalue];
$dir3 = $dir2."/".$row2[$fnid];
if(!is_dir($dir3) && !mkdir($dir3,0777))
{
echo("\n--|--|--|目录创建失败!".$dir3);
continue;
}
表示的是如果无法创建目录就跳过,是吧?
也就是可能什么都缓存不了了?是这个意思吧?
不错
1 array_key_exists很直观,但是不如isset效率高
2 能不用global
1 array_key_exists很直观,但是不如isset效率高
2 能不用global就别用
3 mkdir别777,你这个是缓存,600就够用了
while($row2 = $dsql->GetArray('s2'))
{
$data2 .= "\n".$row2[$fnid]."\t=>\t'".$row2[$fnvalue]."',";
$tm3 = microtime(true);
$pos3 = $pos2.' -> ['.$row2[$fn……
逻辑上是这样想的。因为不想一半就停止了。确实比较不太妥,不过有提示
自己的看法就是,现在看这一大段,感觉好臃肿,但是没有更简便的了。。哈哈哈~
自我点评:写的很乱~ ~ 不过貌似没有其他更好的办法了?

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Laravel은 직관적 인 플래시 방법을 사용하여 임시 세션 데이터 처리를 단순화합니다. 응용 프로그램에 간단한 메시지, 경고 또는 알림을 표시하는 데 적합합니다. 데이터는 기본적으로 후속 요청에만 지속됩니다. $ 요청-

이것은 Laravel 백엔드가있는 React Application을 구축하는 데있어 시리즈의 두 번째이자 마지막 부분입니다. 이 시리즈의 첫 번째 부분에서는 기본 제품 목록 응용 프로그램을 위해 Laravel을 사용하여 편안한 API를 만들었습니다. 이 튜토리얼에서는 Dev가 될 것입니다

Laravel은 간결한 HTTP 응답 시뮬레이션 구문을 제공하여 HTTP 상호 작용 테스트를 단순화합니다. 이 접근법은 테스트 시뮬레이션을보다 직관적으로 만들면서 코드 중복성을 크게 줄입니다. 기본 구현은 다양한 응답 유형 단축키를 제공합니다. Illuminate \ support \ Facades \ http를 사용하십시오. http :: 가짜 ([ 'google.com'=> 'Hello World', 'github.com'=> [ 'foo'=> 'bar'], 'forge.laravel.com'=>

PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

이 기사에서는 Laravel 웹 프레임 워크에서 알림 시스템을 탐색 할 것입니다. Laravel의 알림 시스템을 사용하면 다른 채널을 통해 사용자에게 알림을 보낼 수 있습니다. 오늘은 알림을 보낼 수있는 방법에 대해 논의합니다

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

PHP 로깅은 웹 애플리케이션을 모니터링하고 디버깅하고 중요한 이벤트, 오류 및 런타임 동작을 캡처하는 데 필수적입니다. 시스템 성능에 대한 귀중한 통찰력을 제공하고 문제를 식별하며 더 빠른 문제 해결을 지원합니다.
