我想在我的网络应用程序中列出我的所有文件夹而不包含文件。目前我正在使用此代码,但这将为我提供所有文件和文件夹:
//Connect
$conn = ftp_connect($ftp_server);
$login = ftp_login($conn, $ftp_username, $ftp_userpassword);
//
//Enable PASV ( Note: must be done after ftp_login() )
//
$mode = ftp_pasv($conn, TRUE);
$file_list = ftp_nlist($conn, "/webspace/httpdocs/brentstevens.nl/u_media/$uid/");
foreach ($file_list as $file)
{
// process folder
}
但是这将输出所有文件和文件夹。如何调整此代码以仅提供文件夹?
如果您的服务器支持MLSD
命令并且您使用的是PHP 7.2或更高版本,则可以使用ftp_mlsd
function:
$files = ftp_mlsd($conn, $path);
foreach ($files as $file)
{
if ($file["type"] == "dir")
{
echo $file["name"]."\n";
}
}
如果你没有PHP 7.2,你可以尝试自己实现MLSD
命令。首先,请参阅ftp_rawlist
命令的用户注释:
https://www.php.net/manual/en/function.ftp-rawlist.php#101071
如果没有MLSD
以适用于任何FTP服务器的方式实现这一点并不容易。另见Check if FTP entry is file or folder with PHP。
但是,如果您只需要针对一个特定的FTP服务器,您可以使用ftp_rawlist
以特定于平台的格式检索文件列表并解析它。
以下代码采用通用的* nix格式。
$lines = ftp_rawlist($conn, $path);
foreach ($lines as $line)
{
$tokens = explode(" ", $line);
$name = $tokens[count($tokens) - 1];
$type = $tokens[0][0];
if ($type == 'd')
{
echo "$name\n";
}
}
你必须使用http://php.net/manual/en/function.ftp-rawlist.php
函数和正则表达式解析类型,在你的情况下是字母d