2016-04-22 7 views
1

Ich habe unter Code, um Inhalt aus dem Remote-Verzeichnis zu erhalten.Verwenden Sie opendir einmal anstelle von es in For-Schleife

$dirHandle = opendir("ssh2.sftp://$sftp/".PATH_OUT); 
while (false !== ($file = readdir($dirHandle))) { 
    // something... 
} 

Nun, die Sache ist, über Code in forloop ist. wenn ich $dirHandle = opendir("ssh2.sftp://$sftp/".PNB_PATH_OUT); außerhalb von Forloop setze, gibt es mir das erforderliche Ergebnis nur für die erste Aufzeichnung. Also, offensichtlich ist es readdir funktioniert nicht für den zweiten Datensatz in forloop.

Wie kann ich das so machen, dass ich opendir nur einmal verwenden muss und diese Verbindung mehr als einmal verwenden?

Erforderliche Lösung

$dirHandle = opendir("ssh2.sftp://$sftp/".PATH_OUT); 
for(...){ 
    while (false !== ($file = readdir($dirHandle))) { 
     // something... 
    } 
} 

Antwort

0

Ihre While-Schleife das gesamte Verzeichnis durchläuft, bis es keine weiteren Dateien vorhanden sind, in welchem ​​Fall READDIR false zurückgibt. Daher wird readdir jedes Mal nach dem ersten Durchlauf aufgerufen, es wird nur false zurückgegeben, da es sich bereits am Ende des Verzeichnisses befindet.

Sie könnten rewinddir() in der for-Schleife verwenden, um den Zeiger des Verzeichnis-Handles auf den Anfang zurückzusetzen.

$dirHandle = opendir("ssh2.sftp://$sftp/".PATH_OUT); 
for(...){ 
    rewinddir($dirHandle); 
    while (false !== ($file = readdir($dirHandle))) { 
     // something... 
    } 
} 

Da der SFTP-Strom nicht seeking zu unterstützen scheint, sollten Sie speichern nur die Ergebnisse, die Sie brauchen, und tun die for-Schleife nach der while-Schleife. Sie durchlaufen das gleiche Verzeichnis mehrmals.

$dirHandle = opendir("ssh2.sftp://$sftp/".PATH_OUT); 
while (false !== ($file = readdir($dirHandle))) { 
    $files[] = $file; 
} 
for(...){ 
    // use $files array 
} 
+0

Es gibt mir Erwärmung. Nachricht: readdir() erwartet, dass Parameter 1 resource ist, null gegeben –

+0

Debug $ dirHandle, entweder opendir schlägt fehl oder es wird auf Null gesetzt. Aktualisieren Sie Ihren Post mit Ihrem tatsächlichen Code, damit wir sehen können. – Devon

+0

Ich habe '$ dirHandle = rewinddir ($ dirHandle);'. Jetzt habe ich nur 'rewinddir ($ dirHandle);' und die Nachricht ist: 'rewinddir(): stream unterstützt keine Suche ' –

Verwandte Themen