Visualizzare i files di una Directory

raphael_php

Nuovo Utente
20 Feb 2012
13
0
0
Buongiorno a tutto lo staff e ai partecipanti del forum, innanzi tutto mi presento: mi chiamo Luca e sono un nuovo utente del forum.
Premetto che sono un neofita in questa materia e che faccio tutt'altro nella vita quindi le mie domande posso essere forse forse banali. Qualche volta mi diletto a fare qualche programmino in access o excel che mi può essere utile sul lavoro. Cercando una soluzione ad una mia idea mi è capitato di trovare un vecchio progetto open source su sourceforge.net chiamato Philer orami abbandonato da anni e ho voluto provare ad utilizzarlo, armato quindi di Easyphp ho cercato di fare funzionare lo script ma mi sono arenato.
Essendo il mio obiettivo quello di realizzare un'area riservata per utenti del tipo una cartella per utente ho pensato di utilizzare una combinazione di script per raggiungere l'obiettivo. In pratica pensavo di abbinare uno script di login php Mysql, uno script dinamico per la visualizzazione dei files nella directory, bloccare la directory tramite .htaccess e quindi utilizzare uno script per il force download.
La prima parte sono riuscito a realizzarla partendo da uno script che ho trovato sul sito, ora ho un problema con lo script di visualizzazione, in pratica mi restituisce sempre degli errori se cerco di esplorare una dir diversa da ./ ( con $dir = "./"; tutto funziona bene con $dir = "./DocuServer/cartella1/"; ho l'errore, considerato che $dir = "variabile proveniente da database".

PHP:
<?php
// definizione variabile cartella da esplorare
$dir = "./DocuServer/cartella1/";

// open this directory 
$myDirectory = opendir("$dir");

// get each entry
while($entryName = readdir($myDirectory)) {
	$dirArray[] = $entryName;
}

// close directory
closedir($myDirectory);

//	count elements in array
$indexCount	= count($dirArray);
Print ("$indexCount files<br>\n"); echo "<br>";

// sort 'em
sort($dirArray);

// print 'em
print("<TABLE border=1 cellpadding=5 cellspacing=0 class=whitelinks>\n");
print("<TR><TH>Filename</TH><th>Filetype</th><th>Filesize</th></TR>\n");
// loop through the array of files and print them all
for($index=0; $index < $indexCount; $index++) {
        if (substr("$dirArray[$index]", 0, 1) != "."){ // don't list hidden files
		print("<TR><TD><a href=\"$dirArray[$index]\">$dirArray[$index]</a></td>");
		print("<td>");
		print(filetype($dirArray[$index]));
		print("</td>");
		print("<td>");
		print(filesize($dirArray[$index]));
		print("</td>");
		print("</TR>\n");
	}
}
print("</TABLE>\n");
 
?>

L'errore è il seguente
Warning: filetype() [function.filetype]: Lstat failed for EGGH.txt in F:\EasyPHP\www\login_system\list_file_new.php on line 31
Warning: filesize() [function.filesize]: stat failed for EGGH.txt in F:\EasyPHP\www\login_system\list_file_new.php on line 34

Dove baglio? Qualcuno potrebbe gentilmente correggermi il codice. Grazie mille per l'aiuto, ogni eventuale suggerimento per la realizzazione del mio progetto è il benvenuto. Conoscete per caso un progetto completo, open source, che permetta la gestione 1 a 1 utente <- cartella o qualche cosa di simile a Philer.

Ciao e grazie in anticipo Luca
 
ciao
benvenuto nel forum
intanto sei sicuro che in $dirArray[$index] ci sia un nome di file? e come è scritto?
se si devi mettere anche il percorso es.
se la tua pag. list_file_new.php è nella cartella login_system e il file in una sua sottocartella devi indicarle
print(filesize("sottocartella/".$dirArray[$index]));

o se altre cartelle

print(filesize("../altra_cartella/".$dirArray[$index]));
altimenti ti cerca il file contenuto in $dirArray[$index] nella cartella stessa login_system
ti conviene commentare le righe che ti danno errore e mettere un var_dump() che poi toglierai così vedi cosa esattamente ti contiene l'array

PHP:
<?php
//....tutto quello che viene prima..........
var_dump($dirArray);//**qui guardi cosa hai dentro l'array
/*
print("<TABLE border=1 cellpadding=5 cellspacing=0 class=whitelinks>\n");
print("<TR><TH>Filename</TH><th>Filetype</th><th>Filesize</th></TR>\n");
// loop through the array of files and print them all
for($index=0; $index < $indexCount; $index++) {
        if (substr($dirArray[$index], 0, 1) != "."){ // don't list hidden files ** togli i due apici
        print("<TR><TD><a href=\"$dirArray[$index]\">$dirArray[$index]</a></td>");
        print("<td>");
        print(filetype($dirArray[$index]));
        print("</td>");
        print("<td>");
        print(filesize($dirArray[$index]));
        print("</td>");
        print("</TR>\n");
    }
}

print("</TABLE>\n");
*/
//eccetera.......
?>
 
Grazie mille borgo italia, il tuo suggerimento è stato risolutivo è bastato aggiungere la variabile $dir anche agli altri elementi è ora la visualizzazione è perfetta.

PHP:
// interrogazione database
//  $result = mysql_query("SELECT * FROM ".$prefix."_users WHERE userid='$userid'");
//  $row = mysql_fetch_array($result);

$result = $db->sql_query("SELECT * FROM ".$prefix."_users WHERE userid='$userid'");
$row = $db->sql_fetchrow($result);
$virtualdx = $row['virtualdx'];
//       echo "$virtualdx"; 		 

$dir = "$virtualdx";

// open this directory 
$myDirectory = opendir("$dir");
.....
print(filetype("$dir".$dirArray[$index]));
print(filesize("$dir".$dirArray[$index]));
print date("d F Y ", (filemtime("$dir".$dirArray[$index])));

Ciao e grazie ancora
 
Nel codice è possibile fare alcune correzioni, ad esempio, perché assegnare due volte uno stesso valore?
PHP:
$dir = $row['virtualdx'];
Inoltre perché delimintare una variabile pura?
PHP:
$myDirectory = opendir($dir);
e
PHP:
print(filetype($dir.$dirArray[$index]));
 
Grazie mille Eliox, grazie ai tuoi suggerimenti ho ripulito il codice sopprimendo la variabile $dir.

PHP:
$virtualdx = $row['virtualdx'];
...
$myDirectory = opendir($virtualdx);
.....
print(filetype($virtualdx.$dirArray[$index]));

Oggi proverò a realizzare il sistema di download protetto partendo da un articolo trovato in rete.

Ciao e grazie per gli utili suggerimenti
 
Anche la variabile $virtualdx non ti serve:
PHP:
$myDirectory = opendir($row['virtualdx']);

Comunque, invece di usare le vecchie funzioni opendir, readdir e closedir, usa gli iteratori di PHP. Se fai una ricerca sul forum dovresti trovare una risposta che ho dato ad un utente qualche tempo fa.
 
Ciao alessandro1997, grazie mille per il suggerimento, ho provato a capire questi iteratori ma la mia conoscenza è troppo limitata quindi devo rimanere al momento su funzioni base che anche se vecchie mi permettono di riuscire almeno a capire in parte il codice che sto usando.
Avrei un'altra domanda, al momento per visualizzare due aree uso due file pubblica.php e riservara.php che in pratica differiscono solo per una variabile che viene presa da un campo del database e cioè:

PHP:
$virtualdx = $row['virtualdx']; per l'area riservata 
$virtualdy = $row['virtualdy']; per l'area pubblica

alle due pagine arrivo selezionandole attraverso il sottostante menu, volevo chiedervi se esiste un modo per selezionare le variabili con un if pagina aperta tramite "Area pubblica" then $dir=$row['virtualdx'] else $dir=$row['virtualdy'] in modo da eliminare una pagina php?

PHP:
function navigation_menu(){
echo  " <center>"
     ." [ <a href=\"pubblica.php\">"Area pubblica"</a> ] "
     ." [ <a href=\"riservata.php\">"Area Riservta"</a> ] "
     ." [ <a href=\"users.php\">"._MY_ACCOUNT."</a> ] "     
     ." [ <a href=\"users.php?act=Logout\">"._LOGOUT."</a> ]"
     ." </center><br>";
}

PS guardando questa pagina mentre le scrivevo forse ho capito, e se facessi

PHP:
 ." [ <a href=\"pubblica.php?area=1\">"Area pubblica"</a> ] "
     ." [ <a href=\"riservata.php?area=2\">"Area Riservta"</a> ] "

e nel file di destinazione recuperassi le variabili con un GET? ora provo :cool: .

Ciao e Grazie in anticipo Luca
 
L'intuizione era buona e funziona, sono riuscito a trasferire la variabile di directory al file docu_system.php

PHP:
function navigation_menu(){
echo  " <center>"
     ." [ <a href=\"index.php\">"._HOME."</a> ] "
     ." [ <a href=\"docu_system.php?area=publica\">"._AREA_P."</a> ] "
     ." [ <a href=\"docu_system.php?area=riservata\">"._AREA_S."</a> ] "
     ." [ <a href=\"users.php\">"._MY_ACCOUNT."</a> ] "      
     ." [ <a href=\"users.php?act=Logout\">"._LOGOUT."</a> ]"
     ." </center><br>";
}

dove seleziono le directory utilizzando un semplice if then

PHP:
//--- Identificazione area destinazione --------
$area = isset($_GET['area']) ?  $_GET['area']  : '';
//var_dump($area);
//--- Fine -------------------------------------

//--- Selezione directory di lavoro ------------

if ($area == 'publica') {
//    echo "Publica";
$dir = $row['virtualdy'];
} elseif ($area == 'riservata') {
//    echo "Riservata";
$dir = $row['virtualdx'];
} else {
    echo "Errore area";

}

//--- Fine -------------------------------------

// open this directory (soppresso dal ciclo if)
$myDirectory = opendir($dir);

ma a questo punto non so come trasferire la variabile di directory al sistema di download protetto download_file.php , è possibile trasferire due variabili attraverso il form?

PHP:
print("<form action=\"./download_file.php?file="."$dirArray[$index]\" method=\"post\">");		
print("<input type='submit' value='"._DWNL_FILE."'>"); 
print("</form>");

Ciao e grazie Luca
 

Discussioni simili