PDA

View Full Version : [PHP] errore su opendir...


darp
13-12-2008, 17:44
EDIT.. risolto..
si può chiudere.. errore nel codice

darp
14-12-2008, 03:24
Risolto!, si vede che sono un pò arruginito :(
l'errore non è del modulo php (sembrava strano... prb il modulo php usato su altervista disabilita i warning quando genera le pagine) ma nel modo come avevo realizzato la ricorsione. per chi vuole vedere la soluzione eccola:

-la prima funzione crea l'elenco in un array delle sottocartelle di una cartella
-la seconda è la ricorsione sulle cartelle stesse, quindi genera l'albero in un array tipo:

temp/old
temp
varie/foto
varie/pagine
varie
etc...

la terza serve ad eliminare dal path la cartella passata come $root dal risultato finale e ordinare l'array stesso

function elencoDirSite($dir){
$dirs= array();
$contatore=0;
if ($handle = opendir($dir))
{
while ($file = readdir($handle))
{
//echo $dir."/".$file."<br />";
if (is_dir($dir."/".$file))
{
if (($file != ".") && ($file != "..")) {
$dirs[$contatore] = $file;
//echo $dirs[$contatore]."<br />";
$contatore++;
}
}//if
}//while
}//if
closedir($handle);
//showArray($dirs);
reset($dirs);
sort($dirs);
reset($dirs);
return $dirs;
}//elencoDirSite

function cicloDir($root,$dir_ciclo){
//seleziono la cartella da aprire
if ($dir_ciclo) $dir_def=$root."/".$dir_ciclo;
else $dir_def=$root;
$ciclo=elencoDirSite($dir_def);
$contatore=0;
$lista=array();
$listadef=array();
$def=0;
while($ciclo[$contatore]){
if ($dir_ciclo){
$lista=cicloDir($root,$dir_ciclo."/".$ciclo[$contatore]);
$lista[count($lista)]=$dir_ciclo."/".$ciclo[$contatore];
//echo $lista[count($lista)-1]."<br />";
}else{
$lista=cicloDir($root,$ciclo[$contatore]);
$lista[count($lista)]=$ciclo[$contatore];
//echo $lista[count($lista)-1]."<br />";
}//else
$contatore++;
$tmp=0;
while($lista[$tmp]){
$listadef[$def]=$lista[$tmp];
$tmp++;
$def++;
}//secondo while
}//while
//showArray($listadef);
return $listadef;
}//cicloDir

function creaElencoDirSite($root){
if ($root) $directory=getcwd().$root;
else $directory=getcwd();
$elenco=cicloDir($directory,NULL);
reset($elenco);
sort($elenco);
reset($elenco);
return $elenco;
}//creaElencoDirSite

darp
14-12-2008, 03:25
Risolto!, si vede che sono un pò arruginito :(
l'errore non è del modulo php (sembrava strano... prb il modulo php usato su altervista disabilita i warning quando genera le pagine) ma nel modo come avevo realizzato la ricorsione. per chi vuole vedere la soluzione eccola:

-la prima funzione crea l'elenco in un array delle sottocartelle di una cartella
-la seconda è la ricorsione sulle cartelle stesse, quindi genera l'albero in un array tipo:

temp/old
temp
varie/foto
varie/pagine
varie
etc...

la terza serve ad eliminare dal path la cartella passata come $root dal risultato finale e ordinare l'array stesso

function elencoDirSite($dir){
$dirs= array();
$contatore=0;
if ($handle = opendir($dir))
{
while ($file = readdir($handle))
{
//echo $dir."/".$file."<br />";
if (is_dir($dir."/".$file))
{
if (($file != ".") && ($file != "..")) {
$dirs[$contatore] = $file;
//echo $dirs[$contatore]."<br />";
$contatore++;
}
}//if
}//while
}//if
closedir($handle);
//showArray($dirs);
reset($dirs);
sort($dirs);
reset($dirs);
return $dirs;
}//elencoDirSite

function cicloDir($root,$dir_ciclo){
//seleziono la cartella da aprire
if ($dir_ciclo) $dir_def=$root."/".$dir_ciclo;
else $dir_def=$root;
$ciclo=elencoDirSite($dir_def);
$contatore=0;
$lista=array();
$listadef=array();
$def=0;
while($ciclo[$contatore]){
if ($dir_ciclo){
$lista=cicloDir($root,$dir_ciclo."/".$ciclo[$contatore]);
$lista[count($lista)]=$dir_ciclo."/".$ciclo[$contatore];
//echo $lista[count($lista)-1]."<br />";
}else{
$lista=cicloDir($root,$ciclo[$contatore]);
$lista[count($lista)]=$ciclo[$contatore];
//echo $lista[count($lista)-1]."<br />";
}//else
$contatore++;
$tmp=0;
while($lista[$tmp]){
$listadef[$def]=$lista[$tmp];
$tmp++;
$def++;
}//secondo while
}//while
//showArray($listadef);
return $listadef;
}//cicloDir

function creaElencoDirSite($root){
if ($root) $directory=getcwd().$root;
else $directory=getcwd();
$elenco=cicloDir($directory,NULL);
reset($elenco);
sort($elenco);
reset($elenco);
return $elenco;
}//creaElencoDirSite