PHP Explorer dateien größer ca. 1.5GB werden nicht angezeigt

fz21z

Lt. Junior Grade
Registriert
Apr. 2009
Beiträge
300
Wie im Titel beschrieben habe ich das Problem, das mein Php-Explorer Dateien größer ca. 1.5GB nicht anzeigt.
Das Problem wäre mir so auch gar nicht erst aufgefallen, wenn ich nicht jüngst ein komplettes Backup von meinem Desktop als *.img erstellt hätte.

OS Ubuntu 10.04 ( latest updates )
Xampp 1.7.3a ( die Sandbox Umgebung -> tar.bz von xampp.com nach /opt/lampp mit allem drum und dran, default Config )

Ich will hier auch nicht direkt alles zu spamen, deswegen poste ich einfach mal die Methode mit der ich mir den Inhalt der Ordner ausgeben lasse. Die komplette Datei hab ich mal hochgeladen. Siehe Link.

http://uploaded.to/file/870lec

PHP:
function ShowDir($pfad)
{
	$verzeichnis = openDir($pfad);
	$ArraySorted = array();

	while($file = readDir($verzeichnis))
	{
		if ($file != "." && $file != "..") 
		{
			$ArraySorted[] = $file; 
		}		
	}

	natcasesort($ArraySorted);

	foreach($ArraySorted as $file)
	{
		switch($file)
		{
			case(is_dir($pfad.$file)):
			echo "<tr><td class='icons'><img src='icons/folder.ico'></td><td><a class='subfolder' href='?pfad=$pfad$file/'>$file</a></td></tr>";
			break;
			case(is_file($pfad.$file)):
				if(strrchr($file,'.') == ".rar")
				{
					echo "<tr>
						<td class='icons'><img src='".FileIcon($file)."'></td>
						<td><a class='subfolder' href='?pfad=$pfad$file&cmd=urar'>$file</td>
						<td width='120px' align='right'>".format_size(filesize($pfad.$file))."</td>
					     </tr>";
				}
				else
				{
					echo "<tr>
						<td class='icons'><img src='".FileIcon($file)."'></td>
						<td>$file</td>
						<td width='120px' align='right'>".format_size(filesize($pfad.$file))."</td>
					     </tr>";
				}
			break;
		}
	}

	closeDir($verzeichnis);
}
 
Hmm...

mach mal ein print_r($ArraySorted); nach natcasesort($ArraySorted);

Sind dann alle Dateien des Verzeichnisses aufgelistet?

edit: ersetz mal format_size mit format_size(sprintf("%u", filesize($pfad.$file)))
 
Zuletzt bearbeitet:
Im Array stehts drin ja.
Ich habs mir mal im foreach echo'n lassen, er läuft die Schleife 2 mal durch bei zwei Dateien.
Lass ich im else echo'n geht er bei zwei Dateien nur einmal rein, obwohls einmal *.txt is und das andere *.img
Das Ersetzen von format_size macht keinen Unterschied :X
 
Zuletzt bearbeitet:
Ok. Welche Version von Apache und PHP sind denn darin dann enthalten? Bei alten Versionen gabs nämlich das Problem, dass die funktionen is_dir bzw. is_file bei zu grossen Dateien (eigentlich ab 2GB) immer false liefern, weil sie diese einfach nicht lesen können - warum auch immer. Ist ein Bug.
Mit Apache 2.2 und PHP 5.3 sollte es aber funktionieren - bis evtl. auf den Fehler mit filesize, welches einen unsigned int zurückgibt. Das war's ja jetzt nicht :p
 
Also ich hab meine Case-Anweisungen mal komplett exkludiert und eine Case mit is_file angelegt, die führt er merkwürdigerweise auch nur einmal aus.
Zwei dateien, foreach wird definitiv zweimal durchlaufen, es wird aber nur einmal ins Switch gegangen, hä :P
Ergänzung ()

Danke für den Tipp, schnell eine Dummiefile(2GB) erzeugt die deine These jetzt im Groben unterstützt. Ich hau mich jetzt in die Falle und werd morgen mal deinem hinreichenden Rat folgeleisten und PHP + Apache Version prüfen.
 
Mal das Script ein bissl umgeschrieben:

Nun gibts kein is_file() mehr, welches Schwierigkeiten geben könnte.

PHP:
function ShowDir($pfad)
{
    $inhalt = scandir($pfad);
    unset($inhalt[1], $inhalt[0]);
    natcasesort($inhalt);
    
    foreach($inhalt as $file) {
        if (is_dir($pfad.file)) {
             echo "<tr><td class='icons'><img src='icons/folder.ico'></td><td><a class='subfolder' href='?pfad=$pfad$file/'>$file</a></td></tr>";
            break;
        } else {
            if(strrchr($file,'.') == ".rar") {
                echo "<tr>" . 
                         "<td class='icons'><img src='".FileIcon($file)."'></td>" . 
                         "<td><a class='subfolder' href='?pfad=$pfad$file&cmd=urar'>$file</td>" . 
                         "<td width='120px' align='right'>".format_size(filesize($pfad.$file))."</td>" . 
                         "</tr>";
            } else {
                echo "<tr>" . 
                        "<td class='icons'><img src='".FileIcon($file)."'></td>" . 
                        "<td>$file</td>" . 
                        "<td width='120px' align='right'>".format_size(filesize($pfad.$file))."</td>" . 
                        "</tr>";
            }
        }
    }
}
 
Zuletzt bearbeitet:
Wahnsinn, funtkioniert. Ich dank dir recht herzlich, ohne hätte ich nich schlafen können :) Dickes Plus von mir!!!!
 
fz21z schrieb:
Wahnsinn, funtkioniert. Ich dank dir recht herzlich, ohne hätte ich nich schlafen können :) Dickes Plus von mir!!!!

Dann kann ich ja nun auch beruhigt zu Bett gehn und hoffentlich gut schlafen... auch wenn nicht so lange wie ich gern würde :D
 
Zurück
Oben