Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 通过SFTP完成远程服务器中文件和文件夹的完整列表_Php_Sftp - Fatal编程技术网

Php 通过SFTP完成远程服务器中文件和文件夹的完整列表

Php 通过SFTP完成远程服务器中文件和文件夹的完整列表,php,sftp,Php,Sftp,如何在PHP中通过SFTP递归地列出远程服务器中的所有文件 当前文件夹中只有opendir或scandir列表。内置了递归列表,只需与$recursive=true一起使用即可: 如果需要列出文件夹名称,以便捕获空文件夹,则必须重新实现nlist的功能: phpseclib不需要任何安装,也没有任何强制依赖项。这是一个纯PHP代码。您只需下载一个包含PHP代码的归档文件并将其解压缩到您的Web服务器,或者如果您没有对Web服务器的shell访问权限,则在本地解压缩并上载解压缩的代码。在我的示例中

如何在PHP中通过SFTP递归地列出远程服务器中的所有文件

当前文件夹中只有opendir或scandir列表。

内置了递归列表,只需与$recursive=true一起使用即可:

如果需要列出文件夹名称,以便捕获空文件夹,则必须重新实现nlist的功能:

phpseclib不需要任何安装,也没有任何强制依赖项。这是一个纯PHP代码。您只需下载一个包含PHP代码的归档文件并将其解压缩到您的Web服务器,或者如果您没有对Web服务器的shell访问权限,则在本地解压缩并上载解压缩的代码。在我的示例中,我已将其提取到phpseclib子文件夹

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
require_once("Net/SFTP.php");

$sftp = new Net_SFTP($hostname);

if (!$sftp->login($username, $password))
{
    die("Cannot login to the server");
}

if (!($files = $sftp->nlist($path, true)))
{
    die("Cannot read directory contents");
}

foreach ($files as $file)
{
    echo "$file\n";
}
function nlist_with_folders($sftp, $dir)
{
    $files = $sftp->rawlist($dir);
    if ($files === false)
    {
        $result = false;
    }
    else
    {
        $result = array();
        foreach ($files as $name => $attrs)
        {
            if (($name != ".") && ($name != ".."))
            {
                $path = "$dir/$name";
                $result[] = $path;
                if ($attrs["type"] == NET_SFTP_TYPE_DIRECTORY)
                {
                    $sub_files = nlist_with_folders($sftp, $path);
                    $result = array_merge($result, $sub_files);
                }
            }
        }
    }

    return $result;
}