rawlist函数挂起几个小时,永远不会在大文件夹

时间:2016-12-11 00:53:30

标签: phpseclib

我正在检索包含数万个文件的文件夹中的文件列表。我让脚本执行了几个小时,但在这部分后它似乎永远不会进展。有没有办法诊断发生了什么或列表的进展?过去需要几分钟来加载列表,所以我不确定为什么它现在突然挂起。

代码

function EchoDump($echoOut = 0)
{
    if($echoOut)
        echo str_repeat("<!-- Agent Smith -->", 1000);
    else
        return str_repeat("<!-- Agent Smith -->", 1000);
}

$sftp_connection = new Net_SFTP($website ,2222);
$login_result = $sftp_connection->login($credentials->login(), $credentials->password());

echo "<pre>Login Status: ".( $login_result ? "Success" :  "Failure") ."</pre>";

if($sftp_connection->chdir($photosFolder))
    echo "<pre>Changed to $photosFolder</pre>";
else
{
    echo "<pre>Failed to change to $photosFolder</pre>";
}

echo "<pre>Downloading List.</pre>";
EchoDump(1);
$rawlist = $sftp_connection->rawlist();
echo "<pre>List downloaded.</pre>";
EchoDump(1);

输出

登录状态:成功
更改为/ vspfiles / photos
下载列表。

然后它将与下载列表一起作为永久的最后输出。

1 个答案:

答案 0 :(得分:0)

实时记录可能有助于提供一些见解。您可以通过将define('NET_SSH2_LOGGING', 3);添加到脚本顶部来启用此功能。一旦你得到它可能会发布在pastebin.org上进行解剖。

那就是说,我会说rawlist()没有按需返回目录信息。它会归还一切。它不是效率最高的设计,但是在phpseclib 1.0天后,迭代器并不存在。 phpseclib适用于PHP4,所以它必须使用它拥有的东西。当前的主分支需要PHP 5.6并且正在积极开发中,所以这种行为可能会改变,但我们会看到。