ich hatte 'en kleinen Script geschrieben, aber dann doch verworfen, als ich einen alten Thread von mir entdeckte, wo ein netter User (Danke mermshaus) diesen hier gepostet hatte:
[PHP]<?php
class FileExtensionFilterIterator extends FilterIterator
{
protected $whitelist;
public function __construct(Iterator $iterator, array $whitelist)
{
parent::__construct($iterator);
$this->whitelist = $whitelist;
}
public function accept()
{
$fileInfo = parent::current();
// Nur Dateien
if (!$fileInfo->isFile()) {
return false;
}
// Nur mit Endung aus $whitelist
$pi = pathinfo($fileInfo->getFilename());
if (!in_array(strtolower($pi['extension']), $this->whitelist)) {
return false;
}
return true;
}
}
function listfiles($path)
{
$whitelist = array(‚rar‘); // Aufzulistende Dateiendungen
$iterator = new FileExtensionFilterIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path)),
$whitelist);
foreach ($iterator as $file) {
$size = filesize($file);
// unter anderem auch hier setzte ich sort ein.
$size = $size/1024/1024;
$size = round($size,2);
echo '<a href="' . $file . '">' . basename($file) . '</a> ' . $size . ' MB<br>' . "\n";
}
}
listFiles(‚./‘);
?>[/PHP]Bin ich blöd oder warum klappt dieses einfach nicht:
[PHP]
sort($file);
[/PHP]Es kommt eine Fehlermeldung: Warning: sort() expects parameter 1 to be array, object given in C:\xampp\htdocs\uploads\index.php on line 63
Wenn wir schon bei dem ganzen SPL-Kram sind, würde ich gleich ArrayObjekt benutzen. Folgendes müsste klappen:
[PHP]$iterator = new ArrayObject(new FileExtensionFilterIterator(
new RecursiveIteratorIterator(
new RecursiveDirectoryIterator($path)),
$whitelist));
$iterator->sort();[/PHP] PHP: ArrayObject - Manual
localhost funktioniert deine Variante, weil da 5.3 drauf ist.
Auf dem Server allerdings nicht, weil da 5.2 drauf ist.
Wenn ich die usort Zeile ersetze, sagt der mir, dass usort in einem Array sein soll.
Okay, ich hatte vergessen, das Array zu initialisieren (siehe unten, $files = array();), was zu einem Fehler führt, wenn keine passenden Dateien gefunden werden. Der Fehler müsste aber auch bei der PHP5.3-Variante auftreten. Sicher, dass du dich nicht irgendwo vertippt hast?