PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bitte kein leeres Verzeichnis anzeigen! - Foreach-Problem!


_mil28
20.01.2006, 06:47:33
moin moin,

folgendes Problem - die erste Funktion liest das Verzeichnis aus:


function PicturePreview($dir){
if(!$dir){$dir = '.';}
foreach(glob("$dir/*") as $item){$sort[]= end(explode('/',$item));}

$killit = array('*.html', '*.php', '*.db', '*.css');
$killcounter = 0;
foreach($sort as $sorteditem){
foreach($killit as $killcheck){
if(strtolower($sorteditem) == strtolower($killcheck))
{unset($sort[$killcounter]);}
}$killcounter++;}
if($sort){natsort($sort);}
foreach($sort as $item){$return[]= $item;}

if(!$return){return array();}
return $return;
}

Das funktioniert wunderbar!

Das zweite Script stellt die (in diesem Fall Bild-Dateien) dar, die drin sind:


echo '<table width="581" border="0" cellspacing="0" cellpadding="0">',"\n";
$folder = "../images/content/screenshots/S60/" . $_COOKIE['ckFolder'] . "/";

$z=0;
foreach(PicturePreview($folder) as $item) {

if ($z%3==0) echo '<tr>';
if ($z%3!=3) echo '<td width="193" align="center"><img src="'.$folder.'/'.$item.'"><br /><span class="Black10px">'.$item.'</span></td>';
if ($z%3==2) echo '</tr><tr><td><img src="../images/blank_transparent.gif" width="1" height="10" /></td></tr>';
if ($z%3==3) echo '<br />',"\n";
$z++;
}

echo '</table>';

Das funktioniert auch wunderbar!

Nur wenn das Verzeichnis leer ist, dann gibt es die Fehlermeldung 'invalid argument supplied for foreach()'. Ich könnte das natürlich so umgehen, dass ich in diesem Verzeichnis ein unsichtbares 1px GIF plaziere und keiner würds merken - aber richtig sexy ist das nicht.

Deshalb würde ich diesen Fall (Verzeichnis leer) also lieber mit der IF Schleife umgehen, sprich IF Verzeichnis leer, vergiss foreach() - weiss aber nicht wo die hingehört und wie die genau aussehen könnte.

Vielleicht habt ihr ja eine Idee, besten Dank, mil

Reinfi
20.01.2006, 07:36:14
http://www.selfphp.de/funktionsreferenz/dateisystem_funktionen/disk_total_space.php oder http://www.selfphp.de/funktionsreferenz/verzeichnis_funktionen/scandir.php könnten eventuell weiterhelfen

Bessere Ideen gerne willkommen

_mil28
20.01.2006, 10:00:21
Leider bringt mich das irgendwie nicht weiter...

R. Woitaschik
20.01.2006, 10:16:32
Hi _mil28,
initialisiere doch am Anfang die beiden Variablen $sort + $return.

z.B.
$sort = array();
$return = array()

Dannach ist dein Problem wohl erledigt.

Gruß
Richard

feuervogel
20.01.2006, 12:22:16
es gibt keine if-schleifen!

_mil28
20.01.2006, 20:37:54
Danke hört sich logisch an, funzt aber leider immer noch nicht, wo genau soll


$sort = array();
$return = array();


den hin? Hab es jetzt direkt unter den Funktionsaufruf gepackt:



function PicturePreview($dir){

$sort = array();
$return = array();

if(!$dir){$dir = '.';}
foreach(glob("$dir/*") as $item){$sort[]= end(explode('/',$item));}

...


Wer dir dankbar, wenn du mir das noch kurz erklären könntest, thx, mil

R. Woitaschik
23.01.2006, 11:38:29
Hi _mil28,
ich hab mal deine beiden Listings von oben in ein Skript gepackt und getestet. Bei mir funktioniert es. Die Initialisierung der Arrays hast Du an der richtigen Stelle platziert.
In der Fehlermeldung "invalid argument supplied for foreach() ..." steht normalerweise auch die Zeilennummer, in der der Fehler auftritt. Ist es vieleicht eine andere Stelle?
Gruß
Richard

_mil28
23.01.2006, 12:22:28
det läuft... danke nochmal, habs alles nochmal geschrieben und auf einmal gings... hat sich anscheinend irgendwas reingemogelt...

thx, mil