Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá galerinha, blz? eu gosto muito de programação mas nem sempre fico praticando até porque estudo (3° ano) e não tenho muito tempo e quando tenho estou cansado então sempre fico meio "enferrujado" na hora de desenvolver um sistema mais complicado. O problema é o seguinte, estou criando um sistema para ler toda as pastas do sistema, eu sei que existe uma função que faz isso automaticamente mas eu prefiro criar a minha própria, olhem ela aí:
<?php
ini_set("default_charset", "utf-8");
$links = array();
$navegacao = array();
$local = "C:/wamp/www/";
$loops = 0;
$finalizar = false;
while($finalizar!=true){
$ad = opendir($local);
$contarIndDir = count(scandir($local));
$enc = 0;
$execucoes = 1;
while(false!=$lerDire=readdir($ad)){
if(!stristr($lerDire, ".")){
$links[$loops][$enc] = $local.$lerDire."/";
$navegacao[$loops] = "0/".$enc;
$enc++;
}
if($execucoes==$contarIndDir){
if($enc>0){
$local = $links[$loops][0];
}else{
if($loops==0){
echo "Não foram encontrados diretórios";
}else{
$localMae = null;
do{
$quebLocal = explode("/", $local);
$definirQext = count($quebLocal)-2;
for($i=0;$i<$definirQext;$i++){
@$localMae .= $quebLocal[$i]."/";
}
$contarMatriz = count($links)-1;
$novoLoop = 0;
$op = 0;
$naveI0 = -1;
$naveI1 = -1;
$finalizarPI = false;
$tolerancia1 = 0;
$tolerancia2 = 0;
$liberar = false;
while($finalizarPI==false){
if($novoLinks=$links[$novoLoop][$op]==true){
if($novoLinks==$localMae){
$naveI0 = $novoLoop;
$naveI1 = $op;
$finalizarPI = true;
}
}else{
if($tolerancia2<50){
$tolerancia2++;
$liberar = false;
}else{
if($tolerancia1<50){
$tolerancia2 = 0;
$tolerancia++;
$liberar = true;
}else{
$finalizarPI = true;
echo "Atingido o limite de tolerância.";
exit(0);
}
}
}
$op++;
if($liberar==true){
$op = 0;
$novoLoop++;
}
}
#Área com problemas
if($finalizarPI==true){
$extNavega = explode("/", $navegacao[$naveI0]);
if($extNavega[0]<$extNavega[1]){
$lidos = $extNavega[0]+1;
$navegacao[$naveI0] = $lidos."/".$extNavega[1];
$local = $links[$naveI0][$lidos];
$continua = false;
}else{
$continua = true;
}
}
}while($continua!=false);
/////////////////////////////////////////////////////////
}
}
}
$execucoes++;
}
$loops++;
$vN = explode("/" , $navegacao[0]);
if($vN[0]>$vN[1]){
echo "<br />".$vN[0].":".$vN[1];
$finalizar = true;
}
var_dump($links);
}
closedir($ad);
?>
Esse "ÁREA COM PROBLEMAS" é onde aparentemente está dando erro. Essa parte do código é responsável por fazer com que o sistema volte na pasta anterior pois chegou ao fim de uma pasta e agora vai ler outra. Já faz 1 mês que monto esses códigos (Claro que não é todo dia, apenas nos sábados ou domingos), sempre faço e refaço, mas sempre tem um erro. Esse resolvi manter, podem me ajudar?
>
As funções nativas de file system existem por algumas razões:
Entretanto, não é "apenas isso". Veja, você está usando explode para tratar o file path, sendo que existem tantas outras funções para isso.
Antes de eu falar que não faz sentido algum continuar seu código. Qual é o erro que ocorre?
Estou montando ele justamente para treinar a lógica, para ver se tenho capacidade para montar algo do tipo(Pelo visto não rsrs). O erro é que ele não está lendo a pasta anterior pois o sistema funciona assim: Ele irá indexar todas as pastas encontradas que estão dentro de outra pasta e irá ler sempre a primeira delas, porém, se não existir nenhuma pasta dentro de outra ele deveria retornar a anterior e ler a segunda, retornar quando acabar, ler as que ainda existam e quando ler todas deveria ler a terceira, sei que é meio confuso mas é isso aí. No final ele deveria aprensentar todas as pastas encontradas quando dou o var_dump que no caso funciona em partes.
Acredito que uma pequena inversão de lógica com um "elemento" de programação a mais poderia lhe indicar um caminho mais assertivo.
Eu, particularmente, construiria um leitor recursivo de diretórios utilizando recursividade (já que é um leitor recursivo...).
Estude sobre recursividade, nela pode estar a "chave" de não conseguir "retroceder e avançar". uma vez que na recursividade você não precisará retroceder, apenas avançar e retornar quanto não houver mais registros.
Outro estudo importante, é como funcionam estruturas de dados em árvore). É importante conhecer e entender.
Obrigado, acho que é isso mesmo que está faltando.
As funções nativas de file system existem por algumas razões:
Entretanto, não é "apenas isso". Veja, você está usando explode para tratar o file path, sendo que existem tantas outras funções para isso.
Antes de eu falar que não faz sentido algum continuar seu código. Qual é o erro que ocorre?