У меня есть код ниже, чтобы получить контент из удаленного каталога.
$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...
}
}
Ваш цикл 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
}
Других решений пока нет …