Der Hund liegt hier begraben:
Code:
for ($i=0;$i<$cols;$i++) //dieser loop liest die zeile komplett ein
{
// ...
$file=readdir($dir); //Hö? ach ja damit wird... das is ja eins zu viel des guten... nein ist es nicht, gerade überprüft! stimmt so!
}
Wenn $cols = 5 ist und $i bereits 4, wird am Ende deer Schleife nochmal readdir() aufgerufen. Beim nächsten Schleifendurchlauf ist $i aber 5, die Schleife wird also nicht nochmal durchlaufen. Anschließend wird aber durch die außenliegende while-Schleife nochmal readdir() aufgerufen, es geht also ein Verzeichniseintrag verloren. Je kleiner $cols ist, desto häufiger tritt dieser Fall auf, weil die innere for-Schleife häufiger durchlaufen werden muss, und desto mehr Dateien gehen so verloren.