使用一次 opendir 而不是在 for 循环中使用它
Use opendir one time instead of using it in for loop
我有以下代码可以从远程目录获取内容。
$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 returns false。因此,在第一次遍历后调用 readdir 时,它只会 return 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
}
我有以下代码可以从远程目录获取内容。
$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 returns false。因此,在第一次遍历后调用 readdir 时,它只会 return 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
}