Bei der Extbase/Fluid Überarbeitung der gritte.ch Webseite ist das Galerie Modul ein Bestandteil davon. Da es hier (und natürlich auch bei den anderen Modulen) dem Redaktor möglichst einfach gemacht werden soll, werden die Bilder lediglich auf einen FTP hochgeladen. Nun will ich jedoch vermeiden, dass während dem hochladen bereits das Album angeschaut werden kann, sondern erst wenn kein Prozess mehr in dem spezifischen Ordner geschieht.
Dank Twitter bekam ich schon kurz nach meinem Tweet Anworten von @sprain, @npublish_chris und @acki_.
Ergebnis der gesammelten Hinweise ist folgende kleine PHP-Funktion, welche für meine Bedürfnisse prima funktioniert und vielleicht auch Anderen weiterhelfen kann. Grundsätzlich sollte die Funktion selbsterklärend oder zumindest anhand der Kommentare lesbar sein. Es wird von allen Dateien im Verzeichnis, eben auch von den aktuell im Transfer befindlichen, die Statistiken geholt und überprüft, ob sich die mtime in der Toleranz der aktuellen Zeit befindet. Wenn “ja” ist dies ein Indikator dafür, dass diese Datei noch im Transfer ist.
Bei Verzeichnissen mit vielen Dateien dürfte diese Variante nicht sonderlich effektiv sein, für meine Bedürfnisse mit maximal 50-60 Dateien ist dies jedoch ausreichend. Interessant wird es, sobald viele Ordner überwacht werden, ob es immer noch in annehmbarer Geschwindigkeit abgearbeitet wird. Sobald ich mal einen Moment Zeit habe, werde ich dies testen. Für Verbesserungen bin ich natürlich gerne offen.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | /** * returns if a folder is currently under process or not * * @param string $directory path to the observed folder * @param integer $tolerance seconds for tolerance range * @return bool */ private function isFolderInProcess($directory, $tolerance = 5) { // define the upper and lower boundary for the tolerance $lowerBoundary = time()-$tolerance; $upperBoundary = time()+$tolerance; // open the specific folder $dh = opendir($directory); // get all files while (($file = readdir($dh)) !== false) { if($file !== '.' && $file !== '..') { // get the filestats for each file $filestats = stat($directory.'/'.$file); // check if a mtime is in the current timerange if (($filestats['mtime'] >= $lowerBoundary) && ($filestats['mtime'] <= $upperBoundary)) { return TRUE; } } } return FALSE; } |


