我有以下代码可以从远程目录获取内容。
$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,因为它已经在目录的末尾。
您可以在 for 循环中使用 rewinddir() 将目录句柄的指针重置为开头。
$dirHandle = opendir("ssh2.sftp://$sftp/".PATH_OUT);
for(...){
rewinddir($dirHandle);
while (false !== ($file = readdir($dirHandle))) {
// something...
}
}
由于 sftp 流似乎不支持查找,因此您应该只存储所需的结果并在 while 循环之后执行 for 循环。 毕竟,您正在多次遍历同一目录。
$dirHandle = opendir("ssh2.sftp://$sftp/".PATH_OUT);
while (false !== ($file = readdir($dirHandle))) {
$files[] = $file;
}
for(...){
// use $files array
}