PHP Dir browser

Ik heb een php script

[code:1:96806fa8d8]
<?php
$fullpath = " http://www.freshface.be/portfolio.freshface/g/";
$path = "./g";
$dir_handle = @opendir($path);
if ($dir_handle === false) {
echo "Kan de map $path niet openenn";
} else {
while ($file = readdir($dir_handle)) {
echo "<li><a href="$fullpath$file" target="_blank">bekijk</a> - $file</li>n";
}
closedir($dir_handle);
}
?>
[/code:1:96806fa8d8]

Ik krijg ook een . en een … te zien in de lijst.
Hoe kan ik dat wegkrijgen ?

Dank

je zou er even een if omheen kunnen zetten dat alles dat begint met een '.' niet laat zien...

if ($file{0} != ‘.’)
{
// code
}

Ik gebruik hiervoor een array en kan ook filteren op extensie.

[code:1:608b451d7d]
$filedir = $_SERVER [‘DOCUMENT_ROOT’].$dir;

if &#40;is_dir&#40;$filedir&#41;&#41; &#123;
	if &#40;$dh = opendir&#40;$filedir&#41;&#41; &#123;
		while &#40;&#40;$file = readdir&#40;$dh&#41;&#41; !== false&#41; &#123;
			if &#40;$file != &quot;.&quot; &amp;&amp; $file != &quot;..&quot;&#41; // Stay in this dir
			if &#40;stristr&#40;$file,&quot;.jpg&quot;&#41;&#41; &#123;  // Filter for *.jpg
				$retVal&#91;&#93; = $file;
			&#125;
		&#125;
	&#125;
	closedir&#40;$dh&#41;;
	natsort&#40;$retVal&#41;;
	&#125;

else &#123; header&#40;ERROR_LOC&#41;; &#125;

while (list ($key, $val) = each ($retVal)) {
echo $val;
}
[/code:1:608b451d7d]

ik vond dit nog in mijn oude code bak... :) kan misschien nog van nut zijn... volgens mij moet ik nog ergens een recursieve versie hebben, of is deze ook recursief te gebruiken :)

[code:1:e713b623d4]
<?PHP

function dirListing($target)
{
if ($target != ".")
{
$dir = $target."/";
} else {
$dir = "";
}
// filters
$filter_files = array(".htaccess", ".htpasswd", ".DS_Store", "Config_File.class.php", "Smarty.class.php", "Smarty_Compiler.class.php");
$filter_folders = array(".", "…", "images", "index", "_bbedit backup", "smarty", "_databases");

// init
$filecounter = 0;
$foldercounter = 0;

$handle = opendir&#40;$target&#41;;
while&#40;$entry = readdir&#40;$handle&#41;&#41; &#123;
    $type = filetype&#40;$dir.$entry&#41;;
    if &#40;$type == &quot;file&quot;&#41;
    &#123;
        // filesize berekening etc
        $size = filesize&#40;$dir.$entry&#41;;
        $exp = 1; 
        while&#40;$size &gt;= pow&#40;1024, $exp&#41;&#41; 
        &#123; 
            $exp++; 
        &#125; 
        $ext = array&#40;&quot; B&quot;, &quot; KB&quot;, &quot; MB&quot;, &quot; GB&quot;, &quot; TB&quot;&#41;; 
        $summary = round&#40;&#40;$size * 100&#41; / pow&#40;1024, &#40;$exp - 1&#41;&#41;&#41; / 100; 
        $strsize = sprintf&#40;&quot;%.2f%s&quot;, $summary, $ext&#91;$exp - 1&#93;&#41;;
        
        if &#40;!in_array&#40;$entry, $filter_files&#41;&#41;
        &#123;
            $listing&#91;'files'&#93;&#91;$filecounter&#93;&#91;'icon'&#93; = &quot;generic.gif&quot;;
            $listing&#91;'files'&#93;&#91;$filecounter&#93;&#91;'path'&#93; = $dir;
            $listing&#91;'files'&#93;&#91;$filecounter&#93;&#91;'name'&#93; = $entry;
            $listing&#91;'files'&#93;&#91;$filecounter&#93;&#91;'size'&#93; = $strsize;
            //print date&#40;&quot;d-m-y&quot;&#41;.&quot; &amp; &quot;.strftime&#40;&quot;%d-%m-%g&quot;,filemtime&#40;$entry&#41;&#41;;
            if &#40;date&#40;&quot;d.m.y&quot;&#41; == strftime&#40;&quot;%d.%m.%g&quot;,filemtime&#40;$dir.$entry&#41;&#41;&#41;
            &#123; 
                $listing&#91;'files'&#93;&#91;$filecounter&#93;&#91;'mod_date'&#93; = strftime&#40;&quot;today %H&#58;%M&quot;,filemtime&#40;$dir.$entry&#41;&#41;;
            &#125; else &#123;
                $listing&#91;'files'&#93;&#91;$filecounter&#93;&#91;'mod_date'&#93; = strftime&#40;&quot;%d.%m.%g %H&#58;%M&quot;,filemtime&#40;$dir.$entry&#41;&#41;;
            &#125;
            //$listing&#91;'files'&#93;&#91;$filecounter&#93;&#91;'kind'&#93; = filetype&#40;$entry&#41;;
            $listing&#91;'files'&#93;&#91;$filecounter&#93;&#91;'bigsize'&#93; = filesize&#40;$dir.$entry&#41;;
            $filecounter++;            
        &#125;  // end if &#40;!in_array&#40;$entry, $filter_files&#41;

	&#125; else &#123; // if &#40;$type == &quot;file&quot;&#41; dus nu voor folders

        if &#40;!in_array&#40;$entry, $filter_folders&#41;&#41; 
        &#123;
            $listing&#91;'folders'&#93;&#91;$foldercounter&#93;&#91;'icon'&#93; = &quot;folder.gif&quot;;
            $listing&#91;'folders'&#93;&#91;$foldercounter&#93;&#91;'path'&#93; = $dir;
            $listing&#91;'folders'&#93;&#91;$foldercounter&#93;&#91;'name'&#93; = $entry;
            $listing&#91;'folders'&#93;&#91;$foldercounter&#93;&#91;'link'&#93; = &quot;&quot;;
            if &#40;date&#40;&quot;d.m.y&quot;&#41; == strftime&#40;&quot;%d.%m.%g&quot;,filemtime&#40;$dir.$entry&#41;&#41;&#41;
            &#123; 
                $listing&#91;'folders'&#93;&#91;$foldercounter&#93;&#91;'mod_date'&#93; = strftime&#40;&quot;today %H&#58;%M&quot;,filemtime&#40;$dir.$entry&#41;&#41;;
            &#125; else &#123;
                $listing&#91;'folders'&#93;&#91;$foldercounter&#93;&#91;'mod_date'&#93; = strftime&#40;&quot;%d.%m.%g %H&#58;%M&quot;,filemtime&#40;$dir.$entry&#41;&#41;;
            &#125;
            $foldercounter++;
        &#125; // end if &#40;!in_array&#40;$entry, $filter_folders&#41; 
	&#125; // if &#40;$type == &quot;file&quot;&#41;
&#125;
closedir&#40;$handle&#41;;

$listing&#91;'folders_totaal'&#93; = count&#40;$listing&#91;'folders'&#93;&#41;;
$listing&#91;'files_totaal'&#93; = count&#40;$listing&#91;'files'&#93;&#41;;
$listing&#91;'totaal'&#93; = $listing&#91;'folders_totaal'&#93; + $listing&#91;'files_totaal'&#93;;

return $listing;

}
?>
[/code:1:e713b623d4]

Thx allemaal, ik ga het straks eens testen

Hey apenstaartje,

Moet ik iets veranderen aan de code ?
Want hij geeft een parse error , en zo een groot php-held ben ik nu ook weer niet.

[quote:878c9391c7="konijn"]Want hij geeft een parse error , en zo een groot php-held ben ik nu ook weer niet.[/quote:878c9391c7] Het kan zijn, dat dit aan je programma ligt waarin je de code hebt staan. Verwijder alle spaties voor en na een regel code en kijk of er spaties in een witregel zitten, als het goed is werkt je script nadat je dat in je hele script gedaan hebt, begin één lijn voordat de parse error begint.

ik heb even gekeken, en even het toegepast in een voorbeeld :)

[code:1:4933e818c5]
<?PHP

$files_and_folders = dirListing(".");
?><pre><?
print_r($files_and_folders);
?></pre><?

function dirListing($target)
{
if ($target != ".")
{
$dir = $target."/";
} else {
$dir = "";
}
// filters
$filter_files = array(".htaccess", ".htpasswd", ".DS_Store", "Config_File.class.php", "Smarty.class.php", "Smarty_Compiler.class.php");
$filter_folders = array(".", "…", "images", "index", "_bbedit backup", "smarty", "_databases");

// init
$filecounter = 0;
$foldercounter = 0;

$handle = opendir&#40;$target&#41;;
while&#40;$entry = readdir&#40;$handle&#41;&#41; &#123;
    $type = filetype&#40;$dir.$entry&#41;;
    if &#40;$type == &quot;file&quot;&#41;
    &#123;
        // filesize berekening etc
        $size = filesize&#40;$dir.$entry&#41;;
        $exp = 1; 
        while&#40;$size &gt;= pow&#40;1024, $exp&#41;&#41; 
        &#123; 
            $exp++; 
        &#125; 
        $ext = array&#40;&quot; B&quot;, &quot; KB&quot;, &quot; MB&quot;, &quot; GB&quot;, &quot; TB&quot;&#41;; 
        $summary = round&#40;&#40;$size * 100&#41; / pow&#40;1024, &#40;$exp - 1&#41;&#41;&#41; / 100; 
        $strsize = sprintf&#40;&quot;%.2f%s&quot;, $summary, $ext&#91;$exp - 1&#93;&#41;;
        
        if &#40;!in_array&#40;$entry, $filter_files&#41; &amp;&amp; $entry&#123;0&#125; != &quot;.&quot;&#41;
        &#123;
            $listing&#91;'files'&#93;&#91;$filecounter&#93;&#91;'icon'&#93; = &quot;generic.gif&quot;;
            $listing&#91;'files'&#93;&#91;$filecounter&#93;&#91;'path'&#93; = $dir;
            $listing&#91;'files'&#93;&#91;$filecounter&#93;&#91;'name'&#93; = $entry;
            $listing&#91;'files'&#93;&#91;$filecounter&#93;&#91;'size'&#93; = $strsize;
            //print date&#40;&quot;d-m-y&quot;&#41;.&quot; &amp; &quot;.strftime&#40;&quot;%d-%m-%g&quot;,filemtime&#40;$entry&#41;&#41;;
            if &#40;date&#40;&quot;d.m.y&quot;&#41; == strftime&#40;&quot;%d.%m.%g&quot;,filemtime&#40;$dir.$entry&#41;&#41;&#41;
            &#123; 
                $listing&#91;'files'&#93;&#91;$filecounter&#93;&#91;'mod_date'&#93; = strftime&#40;&quot;today %H&#58;%M&quot;,filemtime&#40;$dir.$entry&#41;&#41;;
            &#125; else &#123;
                $listing&#91;'files'&#93;&#91;$filecounter&#93;&#91;'mod_date'&#93; = strftime&#40;&quot;%d.%m.%g %H&#58;%M&quot;,filemtime&#40;$dir.$entry&#41;&#41;;
            &#125;
            //$listing&#91;'files'&#93;&#91;$filecounter&#93;&#91;'kind'&#93; = filetype&#40;$entry&#41;;
            $listing&#91;'files'&#93;&#91;$filecounter&#93;&#91;'bigsize'&#93; = filesize&#40;$dir.$entry&#41;;
            $filecounter++;            
        &#125;  // end if &#40;!in_array&#40;$entry, $filter_files&#41;

	&#125; else &#123; // if &#40;$type == &quot;file&quot;&#41; dus nu voor folders

        if &#40;!in_array&#40;$entry, $filter_folders&#41;&#41; 
        &#123;
            $listing&#91;'folders'&#93;&#91;$foldercounter&#93;&#91;'icon'&#93; = &quot;folder.gif&quot;;
            $listing&#91;'folders'&#93;&#91;$foldercounter&#93;&#91;'path'&#93; = $dir;
            $listing&#91;'folders'&#93;&#91;$foldercounter&#93;&#91;'name'&#93; = $entry;
            if &#40;date&#40;&quot;d.m.y&quot;&#41; == strftime&#40;&quot;%d.%m.%g&quot;,filemtime&#40;$dir.$entry&#41;&#41;&#41;
            &#123; 
                $listing&#91;'folders'&#93;&#91;$foldercounter&#93;&#91;'mod_date'&#93; = strftime&#40;&quot;today %H&#58;%M&quot;,filemtime&#40;$dir.$entry&#41;&#41;;
            &#125; else &#123;
                $listing&#91;'folders'&#93;&#91;$foldercounter&#93;&#91;'mod_date'&#93; = strftime&#40;&quot;%d.%m.%g %H&#58;%M&quot;,filemtime&#40;$dir.$entry&#41;&#41;;
            &#125;
            $foldercounter++;
        &#125; // end if &#40;!in_array&#40;$entry, $filter_folders&#41; 
	&#125; // if &#40;$type == &quot;file&quot;&#41;
&#125;
closedir&#40;$handle&#41;;

$listing&#91;'folders_totaal'&#93; = count&#40;$listing&#91;'folders'&#93;&#41;;
$listing&#91;'files_totaal'&#93; = count&#40;$listing&#91;'files'&#93;&#41;;
$listing&#91;'totaal'&#93; = $listing&#91;'folders_totaal'&#93; + $listing&#91;'files_totaal'&#93;;

return $listing;

}
?>
[/code:1:4933e818c5]

zoals je kan zien, worden eerst de folders laten zien, vervolgens de bestanden… dat had ik in mijn geval nodig :slight_smile:
maar als je wilt, dan kan ik ook wel iets voor je maken, maar dan moet ik wel even wat meer weten wat je precies wilt…

Hey Apenstaartje, als je dat zou willen doen . Ik zal het eens uitleggen;

De code staat dus in index.php en het is de bedoeling dat die de folder /g scant op de bestanden die erin zitten en dan weergeeft.
Dat zonder de . en … .

Alles wordt ge-echo’d en het zou er dan als volgt uit zien
bekijk - naam van het bestand.
Dus als je op bekijk drukt dan zal je naar het bestand gaan (target="_blank") en dan zie je ook nog de naam van het bestand (dat geen link is)

Dus alles zal in een lijst verschijnen want de php code staat dat tussen een <ul> </ul>
Dus je zal zeker bij iedere echo een <li> en </li> moeten weergeven. (Zie mijn scriptje in het begin van de pagina).

Op www.freshface.be en dan portfolio zie grafix, daar zie je al wat ik met mijn script gemaakt heb. Het zijn die . en … die dus weg moeten.

Alvast dank.

Ik heb even deze code hieronder voor je gemaakt, wat deze doet is alles wat met een "." begint weglaten. Dit is tevens normaal, want in Linux/UNIX zijn alle bestanden die met een "." beginnen [i:6976282c49]invisible[/i:6976282c49]. En als bonus is deze ook op naam gesorteerd.

[code:1:6976282c49]<?
$d = dir("/de/map/path/");
$namen = array();
while($entry=$d->read()) {
if (substr($entry, 0, 1) != ‘.’) {
array_push($namen, $entry);
}
}
sort($namen);
foreach ($namen as $naam) {
echo ‘<li><a href="’.$naam.’" target="_blank">bekijk</a> - ‘.$naam.’</li>n’;
}
?>[/code:1:6976282c49]

ik heb even mijn stukje code opgeruimt en verbeterd..

dit werkt dus met functies, dus je kan deze functie op andere plekken nog een keer gebruiken zonder de code nog eens te moeten plaatsen (moet je het bestand met de functie wel includen…)

ik zou als ik jou was dat bekijk misschien wel weglaten, of anders iig de naam van het bestand klikbaar maken…

mijn bonus is niet het sorteren, maar het wat netter maken van de naam (weghalen van de extensie en _ en - naar spaties omzetten)

:slight_smile:

[code:1:0c65d9670f]
<?PHP

// haal listing op
// en stop het in een variabele
$files = file_listing("images/");

// $target geeft locatie aan, incl laatste ‘/’
// bijv.: home/web/images/ …/…/images/
function file_listing($target)
{
if ($target != “./”)
{
$dir = $target;
} else {
$dir = “”;
}
// filters
$filter_files = array("");

if &#40;$handle = opendir&#40;$target&#41;&#41;
&#123;
	while&#40;false !== &#40;$entry = readdir&#40;$handle&#41;&#41;&#41;
	&#123;
		$type = filetype&#40;$dir.$entry&#41;;
		if &#40;$type == &quot;file&quot;&#41; // als het een bestand is, en geen folder
		&#123;
			if &#40;!in_array&#40;$entry, $filter_files&#41; // naam van bestand bevindt zich niet in de filter lijst
				&amp;&amp; $entry&#123;0&#125; != &quot;.&quot;&#41; // naam bestand begint niet met een '.'
			&#123;
				$listing&#91;&#93; = array&#40;&quot;link&quot; =&gt; $dir.$entry, &quot;name&quot; =&gt; $entry, &quot;clean_name&quot; =&gt; clean_name&#40;$entry&#41;&#41;;
			&#125;  // end if

		&#125; else &#123; // dus nu voor folders
			// ignore, doe niets met folders
		&#125; // end if
	&#125;
	closedir&#40;$handle&#41;;
&#125;

return $listing;

}

function clean_name($name)
{
// remove file extension
$name = substr($name, 0, strrpos($name,"."));

// replace certain characters for spaces
$spaces = array&#40;&quot;_&quot;, &quot;-&quot;&#41;;
$name = str_replace&#40;$spaces, &quot; &quot;, $name&#41;;

return $name;

}
?>

<!-- // output variabele (kan dus overal, mits deze gevuld is :wink: dus eigenlijk ergens in je html template…) →

<ul>
<? foreach($files as $file) : /* loop door alle files / ?>
<li><a href="<?=$file[‘link’]?>"><?=$file[‘clean_name’]?></a></li>
<? endforeach; /
end loop */ ?>
</ul>
[/code:1:0c65d9670f]

Thx Aad & Apenstaartje,

Aad, in jouw code geeft hij een parse error op deze lij

[code:1:e0f7432622] if (substr($entry, 0, 1) != ‘.’) { [/code:1:e0f7432622]

En apenstaarje de jouwe ook.
En aangezien ik daar geen krak ik ben …

bij mij werkt het wel, ik denk dat het ligt aan het copy-plakken vanuit de browser.. dan zijn er van die onzichtbare tekens die meegaan.. als je BBEdit gebruikt, dan moet je even toon onzichtbare doen, en de rare tekens weghalen..

of download het bestandje even :slight_smile:
www.macadelic.nl/filelisting.php

Thx apenstaartje , het werkt zie www.freshface.be en dan portfolio.

ah ik zie het :)

fijn :slight_smile:

succes verder :smiley: