php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Verzeichnis wird nicht vollständig ausgelesen


 
Jochen_H
10-11-2005, 21:18 
 
Moin allerseits

Ich arbeite an einem Bildmanager, mit dem man Bilder für bestimmte Artikel/News/etc. auf einer Seite über ein Formular hochladen kann.
Dabei werden die Bilder je nachdem für was man gerade einen Artikel schreibt, oder ob es News sind, die Bilder über den Manager in entsprechende Unterordner auf dem Server hochgeladen (um eine gewisse Ordnung zu haben).
Über den Manager kann man sich Ordnerstruktur, sowie die Dateien im aktuellen Ordner anzeigen lassen. Die Struktur der Ordner geht nach /images/TYPE/ID/
Wird ein neuer Artikel erstellt (läuft über MySQL-Datenbank) und ein Bild für diesen Artikel hochgeladen, wird automatisch im entsprechenden TYPE Ordner ein Unterordner mit der ID des Artikels angelegt. Die Ordner haben alle die selben Zugriffsrechte über CHMOD.


Das Problem ist nun folgendes:
Beim auslesen des aktuellen Ordners werden einige Unterordner sowohl über den Befehl dir() als auch opendir() nicht erkannt/angezeigt.
Das Problem tritt beim auslesen der TYPE-Ordner auf. Mehrere ID-Ordner fehlen. Die ID-Ordner wurden wie gesagt alle über ein Script erstellt, ihre Rechte mit CHMOD auch alle gleich.
Ich bezweifele irgendwie das es sich hierbei um ein Codeproblem handelt.
Auch trat der witzige Effekt auf, das wenn ich mir einmal mit readdir() über Echo den Inhalt ausgeben lasse, und danach noch einmal, das beim ersten Echo nur ein Teil der Unterordner, beim zweiten Echo ein ganz anderer Teil der Unterordner angezeigt wird.



# $page_dir enthält den zu öffnenden Ordnernamen (z.B. "guides/clao/" )

if(is_dir("../test/website/images/".$page_dir))
{
$read_dir = opendir("../test/website/images/".$page_dir);
}
else $admin_status = "Error: Folder does not exist";
# Wenn man an dieser Stelle bereits mit readdir() einsetzt, fehlen die Unterordner, d.h. werden nicht aufgelistet.

// Get Directory-Listing
if(strpos($read_dir_name,"images/..") != FALSE)
{
$read_dir = opendir("../test/website/images/");
}
// Define File-Filter
$page_filter_false = preg_replace("/[0-9A-Za-z_]/i","",$page_filter);
if($page_filter_false == '')
{
$folder_array = array();
$image_array = array();
rewinddir($read_dir);
while($file = @readdir($read_dir))
{
// Get File/Directory Names
if($file != "." && $file != ".." && is_dir("../test/website/images/".$page_dir.$file))
{
$folder_array[] = $file;
}
else
{
if($page_filter != '' && strstr(strtolower($file),strtolower($page_filter)) == FALSE) $page_ok = 0;
elseif($page_filter != '') $page_ok = 1;
else $page_ok = 1;

# Für jedes Bild wird beim hochladen ein Thumbnail mit NAME_thumb erstellt
if($file != "." && $file != ".." && $file != "index.htm" && !strpos($file,"_thumb.") && $page_ok == 1)
{
$image_array[] = $file;
}
}
}
closedir($read_dir);

# [...] Mehr Code hiernach, aber hierfür wohl nicht relevant.



Noch als Zusatzinfo:
Die Ordner werden (falls sie nicht schon existieren) mit folgendem Befehl erstellt

mkdir("website/images/".$page_dir,0755);


Schonmal vielen Dank im Vorraus für jegliche produktive Hilfe.

 
onemorenerd
11-11-2005, 01:20 
 
Versuch mal clearstatcache.

 
Jochen_H
12-11-2005, 11:55 
 
clearstatcache bringt leider kein sichtbarer Effekt.

 
pekka
12-11-2005, 15:33 
 
Original geschrieben von Jochen_H
clearstatcache bringt leider kein sichtbarer Effekt.

Also Clearstatcache() in der ersten Zeile des Skripts? Nicht hintendran.
Was für eine Plattform ist das? Windows oder Linux?
Wenn Linux, kommst Du an die Kommandozeile? Gib mal ein konkretes Beispiel mit Ordnern, die nicht angezeigt werden, und den Output eines "ls -lisa" im Verzeichnis, das die Ordner enthält.

 
Jochen_H
16-11-2005, 23:51 
 
Auf dem Server läuft Linux, ja. Ich hab den Provider kontaktiert um den Ordner mal zu überprüfen, jedoch kann der keine Probleme feststellen.
Das einzige was er mir sagen konnte, war das sie vor kurzem "einige Dinge geändert haben" - was genau, konnte er mir aber nicht verraten.

Ein konkretes Beispiel mit den Ordnern sieht wie folgt aus:
Als Beispiel der Unterordner guides/clao
Er beinhaltet 6 weitere Unterordner, mit den Namen 0,1,2,3,5,6 (von IDs der Artikel).

Anzeigen tut das Script nur die Ordner 2,5.
Kurios ist, wenn ich den readdir Befehl zweimal über den selben Ordner jage und mir das Ergebnis ausgeben lasse, so steht beim ersten Durchlauf Ordner 2,5 dort, beim zweiten Durchlauf (kein Refresh, im Script zweimal aufrufen) wird Ordner 1 angegeben.


Alle Zeitangaben in WEZ +2. Es ist jetzt 06:38 Uhr.