O código a seguir está em minha app de consulta a aplicações do modulo de segurança, em um botão do tipo php. O mesmo resgata apps novas no ambiente de produção e as adiciona a tabela de aplicações juntamente com sua descrição.
$_rota=$this->Ini->root.$this->Ini->path_link;
$_arr=directory_list($_rota,False,False,".|..|_lib",False);
$_i=0;
foreach ($_arr as &$value) {
//ECHO "***".$value."***<BR>";
sc_lookup(rs,"Select count(*) from seg_aplicacoes where apl_fonte='".$value."' and (apl_nome<>'' or apl_nome is not null)");
If ($rs[0][0]==0) {
$_file=$_rota.$value."/".$value.".php";
if (file_exists($_file)) {
$_title="";
$handle = @fopen($_file,"r");
if ($handle) {
while (!feof($handle)) {
$buffer = fgets($handle, 4096);
$pos_1a=strpos($buffer,"nm_nome_apl");
$pos_1b=strpos($buffer,"var ");
If ( $pos_1a!==False && $pos_1b===False) {
$pos_2=strpos($buffer,"=");
$pos_3=strpos($buffer,";");
$_title=str_replace('"','',substr($buffer,$pos_2+1,$pos_3-$pos_2-1));
if (!empty($_title)) {
sc_exec_sql("REPLACE INTO seg_aplicacoes (apl_fonte,apl_nome,modulo) values ('".$value."','".$_title."','0')");
$_i++;
echo "Encontado Nova App:<b>$value</b> Nome:<b>$_title</b><br>";
}
Break;
}Else{
$pos_1a=strpos($buffer,"<TITLE>");
If ( $pos_1a!==False){
$pos_2=strpos($buffer,"</TITLE>");
$_title=str_replace('
','',substr($buffer,$pos_1a+7,$pos_2-$pos_1a-7));
if (!empty($_title)) {
sc_exec_sql("REPLACE INTO seg_aplicacoes (apl_fonte,apl_nome,modulo) values ('".$value." ','".$_title."','0')");
$_i++;
echo "Encontado Nova App:<b>$value</b> Nome:<b>$_title</b><br>";
}
Break;
}
}
}
fclose($handle);
}
}
}
}
unset($value,$_arr,$_rota,$rs,$_title,$buffer,$_file);
If (!$_i) Echo "Novas Aplicações não Encontradas<BR>";
sc_exec_sql("delete from seg_grupos_aplicacoes where apl_codigo in (Select apl_Codigo from seg_aplicacoes where apl_nome='' or apl_nome is null)");
sc_exec_sql("delete from seg_aplicacoes where apl_nome='' or apl_nome is null");
Echo "Removendo iconsistências, verifique Grupo de Acesso e ajuste se necessário.";
O código acima se utiliza de um biblioteca, que disponibilizo a seguir. Esse exemplo ficou disponível por 3 anos no scriptcaseajax.com.br.
[code]function directory_list($directory_base_path, $filter_dir = false, $filter_files = false, $exclude = “.|…|.DS_Store|.svn”, $recursive = true){
$directory_base_path = rtrim($directory_base_path, “/”) . “/”;
if (!is_dir($directory_base_path)){
error_log(__FUNCTION__ . "File at: $directory_base_path is not a directory.");
return false;
}
$result_list = array();
$exclude_array = explode("|", $exclude);
if (!$folder_handle = opendir($directory_base_path)) {
error_log(__FUNCTION__ . "Could not open directory at: $directory_base_path");
return false;
}else{
while(false !== ($filename = readdir($folder_handle))) {
if(!in_array($filename, $exclude_array)) {
if(is_dir($directory_base_path . $filename . "/")) {
if($recursive && strcmp($filename, ".")!=0 && strcmp($filename, "..")!=0 ){ // prevent infinite recursion
error_log($directory_base_path . $filename . "/");
$result_list[$filename] = directory_list("$directory_base_path$filename/", $filter_dir, $filter_files, $exclude, $recursive);
}elseif(!$filter_dir){
$result_list[] = $filename;
}
}elseif(!$filter_files){
$result_list[] = $filename;
}
}
}
closedir($folder_handle);
return $result_list;
}
}[/code]