Используйте opendir один раз вместо того, чтобы использовать его в цикле for

У меня есть код ниже, чтобы получить контент из удаленного каталога.

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

Теперь дело в том, что код выше forloop, когда я положил $dirHandle = opendir("ssh2.sftp://$sftp/".PNB_PATH_OUT); за пределами forloop, то это дает мне требуемый результат только для первой записи. Итак, очевидно, что это readdir не работает для второй записи в forloop,

Как я могу сделать это таким образом, что мне нужно использовать opendir только один раз и использовать это соединение более 1 раза?

Требуемое решение

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

1

Решение

Ваш цикл while обходит весь каталог, пока не останется больше файлов, и в этом случае readdir возвращает false. Поэтому всякий раз, когда readdir вызывается после первого обхода, он просто возвращает false, потому что он уже находится в конце каталога.

Вы могли бы использовать rewinddir () в цикле for для сброса указателя дескриптора каталога на начало.

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

Поскольку поток sftp, по-видимому, не поддерживает поиск, вы должны просто сохранить нужные результаты и выполнить цикл for после цикла while. В конце концов, вы проходите один и тот же каталог несколько раз.

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]