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