|
Hoofdstuk 19. PHP en MySQL
19.3. De inhoud van een map laten zien
Stel je voor dat je de namen van alle bestanden in een bepaalde map wilt laten zien (als je bijvoorbeeld
gelegenheid geeft bestanden te uploaden dan weet je zelf niet welke bestanden er in die map staan), en de
naam van die map is UPLOADMAP, hoe doe je dat dan ? Dat lees je hier onder
19.3.1. De inhoud van een map laten zien
De code om de inhoud van de map UPLOADMAP te laten zien is zo:
<?php
$d=opendir("UPLOADMAP");
while ($bestanden=readdir($d) )
{
$bnaam="UPLOADMAP/".$bestanden;
if (is_file($bnaam) )
{ print ("$bestanden<br>"); }
}
closedir($d);
?>
$d=opendir("UPLOADMAP"); betekent dat de map UPLOADMAP wordt geopend om de namen van de bestanden er uit te lezen en $d is de aanwijzer, die bijhoudt tot hoever de inhoud van de map is gelezen.
$bestanden=readdir($d) betekent dat de naam van het eerstvolgende bestand in de map UPLOADMAP wordt gelezen, en $bestanden bevat die naam
Als diezelfde opdracht nog eens komt wordt het eerstvolgende bestand gelezen.
Als je dus de opdracht
while ($bestanden=readdir($d) )
{ ......................}
geeft dan wordt net zo lang doorgegaan met het lezen van namen van bestanden tot
($bestanden=readdir($d) ) false wordt, dus tot er geen bestanden meer zijn.
De naam van het bestand wordt steeds opgeslagen in de variabele $bestanden
$bnaam="UPLOADMAP/".$bestanden; heeft tot gevolg dat in de variabele $bnaam de naam plus het pad is opgeslagen
Er wordt gecontroleerd of het wel echt een bestand is met if (is_file($bnaam) ) (want het zou ook de naam van een map kunnen zijn, en ook . en .. komen voor als namen van mappen in de directory-lijst.)
En als het een bestand is wordt de naam op het scherm afgedrukt door de opdracht
print ("$bestanden<br>"); en die namen komen allemaal onder elkaar
doordat er <br> achter $bestanden staat.
19.3.2. Klikbare html-documenten laten zien
Stel je voor dat je de namen van alle html-bestanden in een bepaalde map wilt laten zien, en wel zo dat als je er
op klikt de pagina getoond wordt, en de naam van die map is UPLOADMAP (want daarin staan de bestanden
die door bezoekers geupload zijn), dan kun je dat zo doen:
<?php
$d=opendir("UPLOADMAP");
while ($bestanden=readdir($d) )
{
$bnaam="UPLOADMAP/".$bestanden;
if (is_file($bnaam) and eregi(".htm",$bnaam) )
{ print ("<A href=\"$bnaam\" target=\"_blank\">$bestanden</A><br>"); }
}
closedir($d);
?>
Zoals je ziet is er weinig verschil met het vorige script.
Er zijn twee verschillen:
eregi(".htm",$bnaam) is true als in de bestandsnaam .htm voorkomt, dus als het een html-document is. Alleen die bestanden worden dus getoond.
Er staat in plaats van: { print ("$bestanden<br>"); }
nu:
{ print ("<A href=\"$bnaam\" target=\"_blank\">$bestanden</A><br>"); }
Als $bestanden = TEST.HTM , dan is $bnaam = UPLOADMAP/TEST.HTM, en dan levert dat in het laatste geval de volgende code op:
<A href="UPLOADMAP/TEST.HTM" target="_blank">TEST.HTM</A><br>
en dat betekent dat TEST.HTM als hyperlink getoond wordt! En doordat er <br> achter staat komt de volgende hyperlink er onder, op de volgende regel.
19.3.3. De inhoud van een map in tabelvorm laten zien
Bij de vorige scripts werden de namen van de bestanden allemaal onder elkaar afgedrukt.
Als je veel bestanden hebt is het overzichtelijker als je ze in tabelvorm hebt, en dan bijv. drie naast elkaar.
Dat kun je op de volgende manier bereiken:
<?php
print("<table width=100% border=0><tr>");
$i=0;
$d=opendir("UPLOADMAP");
while ($bestanden=readdir($d) )
{
$bnaam="UPLOADMAP/".$bestanden;
if (is_file($bnaam) )
{
$i++;
if ( (($i-1)/3)==round(($i-1)/3) )
{
print ("</tr><tr>");
}
{ print ("<td width=33%>$bestanden<td>"); }
}
closedir($d);
print("</td></table> <br>");
?>
We zijn uitgegaan van het eerste script, waarbij de bestanden niet als hyperlink getoond worden.
Het tweede script kun je natuurlijk op dezelfde manier aanpassen.
We zijn begonnen met de opdracht:
print("<table width=100% border=0><tr>");
Dan wordt het begin van de tabel aangekondigd, en <tr> geeft het begin van de eerste regel van die tabel aan.
Als je drie bestanden per rij wilt dan moet het aantal bestanden dat al geweest is worden bijgehouden en dat gebeurt met de variabele $i. Die geven we bij de start de waarde 0
Als het vierde bestand moet worden afgedrukt dan moet dat op de volgende rij.
Als $i de waarde 4 heeft dan is (($i-1)/3)==round(($i-1)/3) true. (en trouwens ook als $i=7, 10, 13 enz.
Dan wordt er in de code tussengevoegd: </tr><tr>
En dat geeft het einde van de rij aan en het begin van de volgende rij.
Verder moet de naam van het bestand tussen <td width=33%> en <td> om aan
te geven dat het in de volgende cel geplaatst moet worden.
|
| |