PHP Conference Japan 2024

ftp_nlist

(PHP 4, PHP 5, PHP 7, PHP 8)

ftp_nlist返回给定目录中的文件列表

描述

ftp_nlist(FTP\Connection $ftp, string $directory): array|false

参数

ftp

一个 FTP\Connection 实例。

directory

要列出的目录。此参数还可以包含参数,例如 ftp_nlist($ftp, "-la /your/dir");。请注意,此参数不会转义,因此文件名中包含空格和其他字符可能会出现一些问题。

返回值

成功时返回指定目录的文件名数组,错误时返回 false

变更日志

版本 描述
8.1.0 ftp 参数现在需要一个 FTP\Connection 实例;之前需要一个 资源

范例

示例 #1 ftp_nlist() 示例

<?php

// 设置基本连接
$ftp = ftp_connect($ftp_server);

// 使用用户名和密码登录
$login_result = ftp_login($ftp, $ftp_user_name, $ftp_user_pass);

// 获取当前目录的内容
$contents = ftp_nlist($ftp, ".");

// 输出 $contents
var_dump($contents);

?>

以上示例将输出类似以下内容

array(3) {
  [0]=>
  string(11) "public_html"
  [1]=>
  string(10) "public_ftp"
  [2]=>
  string(3) "www"

参见

  • ftp_rawlist() - 返回给定目录中文件的详细信息列表
  • ftp_mlsd() - 返回给定目录中的文件列表

添加注释

用户贡献的注释 37 条注释

匿名
14 年前
有些人抱怨 ftp_nlist 总是返回 FALSE。我自己也遇到过这种行为,直到我使用了 ftp_pasv,如果你的客户端位于防火墙之后(现在大多数客户端都是如此),它非常有用,然后 ftp_nlist 就可以正常工作了。我不太清楚使用 ftp_pasv 的所有含义,但如果你阅读或遇到 ftp_nlist、ftp_get、ftp_nb_get 不起作用的情况,请尝试添加以下内容

ftp_pasv($conn_id,true);
tobrien at florahill dot vic dot edu dot au
21 年前
ftp_nlist() 或 ftp_rawlist() 需要很长时间才能返回任何内容……

如果您遇到此问题,您可能需要使用 ftp_pasv() 函数启用 PASV 模式 FTP 传输。

示例……

<?php
$ftp_host
= "yourFTPHost";
$ftp_user = "yourUsername";
$ftp_password = "yourPassword";

//连接
echo "<br />Connecting to $ftp_host via FTP...";
$conn = ftp_connect($ftp_host);
$login = ftp_login($conn, $ftp_user, $ftp_password);

//
//启用 PASV(注意:必须在 ftp_login() 之后执行)
//
$mode = ftp_pasv($conn, TRUE);

//登录成功?
if ((!$conn) || (!$login) || (!$mode)) {
die(
"FTP connection has failed !");
}
echo
"<br />Login Ok.<br />";

//
//现在运行 ftp_nlist()
//
$file_list = ftp_nlist($conn, "");
foreach (
$file_list as $file)
{
echo
"<br>$file";
}

//关闭
ftp_close($conn);

?>
gerben at gerbs dot net
6 年前
请注意,从 PHP 7.2 开始,可以使用一个新函数,它将文件列表作为包含所有可用详细信息的数组返回:https://php.net/manual/en/function.ftp-mlsd.php
zgardner at allofe dot com
14 年前
在运行 WAMP(Vista、Apache 2.21、MySQL 5.1.36、PHP 5.3)并从 LAMP FTP 服务器(Ubuntu 8.04、Apache 2.2.8、MySQL 5.1.51a、PHP 5.2.4、VSFPTD)递归下载文件时,我发现我的脚本过一段时间后停止下载文件。我追踪到导致脚本停止的是对 ftp_nlist 的调用。

为了解决这个问题,我执行了 ftp_pasv($ftp, true)。客户端或服务器上的 VSFTPD、Apache 或 PHP 错误日志中没有任何内容。非常奇怪。
Jacob Slomp
12 年前
你好,

我编写了这个函数来获取文件列表,我只在带有 Linux FTP 的 php5 中测试过它。对我来说效果很好。

它将返回一个包含名称、类型(文件/文件夹)、所有者、所有者 ID 和权限的数组。

<?php
function ftp_get_filelist($con, $path){
$files = array();
$contents = ftp_rawlist ($con, $path);
$a = 0;

if(
count($contents)){
foreach(
$contents as $line){

preg_match("#([drwx\-]+)([\s]+)([0-9]+)([\s]+)([0-9]+)([\s]+)([a-zA-Z0-9\.]+)([\s]+)([0-9]+)([\s]+)([a-zA-Z]+)([\s ]+)([0-9]+)([\s]+)([0-9]+):([0-9]+)([\s]+)([a-zA-Z0-9\.\-\_ ]+)#si", $line, $out);

if(
$out[3] != 1 && ($out[18] == "." || $out[18] == "..")){
// 什么也不做
} else {
$a++;
$files[$a]['rights'] = $out[1];
$files[$a]['type'] = $out[3] == 1 ? "文件":"文件夹";
$files[$a]['owner_id'] = $out[5];
$files[$a]['owner'] = $out[7];
$files[$a]['date_modified'] = $out[11]." ".$out[13] . " ".$out[13].":".$out[16]."";
$files[$a]['name'] = $out[18];
}
}
}
return
$files;
}
?>

问候语,

Jacob
turigeza on yahoo com
19年前
使用 ftp_nlist() 递归删除目录...
<?php
function ftp_rmdirr($path, $handle)
{
if (!(@
ftp_rmdir($handle, $path) || @ftp_delete($handle, $path)))
{
$list = ftp_nlist($handle, $path);
if (!empty(
$list))
foreach(
$list as $value)
ftp_rmdirr($value, $handle);
}
@
ftp_rmdir($handle, $path);
}
?>
如果将其内置到php中将非常有用。毕竟,大多数时候我们也希望删除非空目录。我敢肯定,每个处理文件系统的人都遇到过这个问题。
aRc
21 年前
在 Windows 中,ftp_nlist 将在目录名称中包含空格的目录上崩溃。要解决此问题,请使用 ftp_chdir

//更改目录
ftp_chdir($conn, "包含空格的目录");
//然后盲目列出
$contents = ftp_nlist($conn, "");
fsa at dwarf dot dk
8年前
所以我编写了一个简单的函数,使用 ftp_nlist() 递归地仅列出指定目录中的文件。

/**
* 返回给定目录中的文件列表,不包括目录。
*
* @param resource $ftp_stream
* FTP 连接的链接标识符。
* @param string $directory
* 要列出的目录。
* 请注意,此参数未转义,因此文件名中包含空格和其他字符可能会出现一些问题。
* @param bool $recursive
* (可选)如果设置为 TRUE,则将递归执行发出的命令。
*
* @return array
* 返回指定目录中文件名的数组。
*/
function ftp_files_list($ftp_stream, $directory, $recursive = false) {
$files = array();

$list = ftp_nlist($ftp_stream, $directory);
if (is_array($list)) {
// 删除点目录。
$list = array_slice($list, 2);

foreach ($list as $filename) {
$path = $directory . '/' . $filename;
// 如果大小等于 -1,则为目录。
if (ftp_size($ftp_stream, $path) === -1) {
if ($recursive) {
$files = array_merge($files, ftp_files_list($ftp_stream, $path, $recursive));
}
} else {
// 删除根目录路径以确保所有文件路径都是相对的。
$files[] = substr($path, strpos($path, '/') + 1);
}
}
}

return $files;
}
bintjes at gmail dot com
17年前
我已经编写了一个递归函数,使用 ftp_rawlist() 列出文件夹和子文件夹中的所有文件。我使用了下面的 ari 函数 parse_rawlist()

function list_all_files($conn_id, $path){
$buff = ftp_rawlist($conn_id, $path);
$res = parse_rawlist( $buff) ;
static $flist = array();
if(count($res)>0){
foreach($res as $result){
// 验证是否是目录,如果不是,则添加到文件列表中
if($result['size']== 0){
// 如果此文件是文件夹,则递归调用函数
list_all_files($conn_id, $path.'/'.$result['name']);
}
else{
// 这是一个文件,添加到最终列表中
$flist[] = $result;
}
}
}
return $flist;
}
franck569 at free dot fr
18年前
turigeza on yahoo com ftp_rmdirr() 函数的改进版本。

这将返回 true 或 false,指示路径是否将被删除

function ftp_rmdirr($handle, $path)
{
if(!@ftp_delete($handle, $path))
{
$list = @ftp_nlist($handle, $path);
if(!empty($list))
foreach($list as $value)
ftp_rmdirr($handle, $value);
}

if(@ftp_rmdir($handle, $path))
return true;
else
return false;
}
vijay dot mahrra at fronter dot com
13年前
我们需要获取所有子目录中所有文件的列表,但没有看到执行此操作的方法,因此我们自己编写了一个

<?php
/**
* ftpRecursiveFileListing
*
* 给定 ftp 句柄和路径,获取所有子文件夹中所有文件的递归列表
*
* @param resource $ftpConnection ftp 连接句柄
* @param string $path 文件夹/目录路径
* @return array $allFiles 文件列表,格式为:目录 => $filename
* @author Niklas Berglund
* @author Vijay Mahrra
*/
function ftpRecursiveFileListing($ftpConnection, $path) {
static
$allFiles = array();
$contents = ftp_nlist($ftpConnection, $path);

foreach(
$contents as $currentFile) {
// 如果名称中没有点,则假定为文件夹
if (strpos($currentFile, '.') === false) {
ftpRecursiveFileListing($ftpConnection, $currentFile);
}
$allFiles[$path][] = substr($currentFile, strlen($path) + 1);
}
return
$allFiles;
}
?>
juhakala at gmail dot com
16年前
我注意到,如果工作路径不同,此函数将无法工作,因为 $dir 保留整个路径字符串的值。这就是为什么添加 basename() 函数会剥离路径,并且此函数也将在子文件夹中工作,而不仅仅是在根文件夹中。

function ftp_is_dir($dir) {
global $ftp_connect;
if (ftp_chdir($ftp_connect, basename($dir))) {
ftp_chdir($ftp_connect, '..');
return true;
} else {
return false;
}
}
nekrostar at gmx dot net
18年前
此函数返回一个数组,其中包含目录路径以及此目录中的所有文件和子目录

function ftp_searchdir($conn_id, $dir)
{
if( !@ftp_is_dir( $conn_id, $dir ) ) {
die( 'FTP 服务器上不存在此目录' );
}
if( strrchr( $dir, '/' ) != '/' ) {
$dir = $dir.'/';
}
$dirlist[0] = $dir;
$list = ftp_nlist( $conn_id, $dir );
foreach( $list as $path ) {
$path = './'.$path;
if( $path != $dir.'.' && $path != $dir.'..') {
if( ftp_is_dir( $conn_id, $path ) ) {
$temp = ftp_searchdir( $conn_id, ($path), 1 );
$dirlist = array_merge( $dirlist, $temp );
} else {
$dirlist[] = $path;
}
}

}
ftp_chdir( $conn_id, '/../' );

return $dirlist;

}
----------------------------------------------------------------------
// 检查目录 ($dir) 是否存在
// 返回 true 或 false

function ftp_is_dir( $conn_id, $dir )
{
if( @ftp_chdir( $conn_id, $dir ) ) {
ftp_chdir( $conn_id, '/../' );
return true;
} else {
return false;
}
}
dreamsavior at gmail dot com
19年前
这是一个函数,它使用 ftp_nlist 检查给定路径是否是目录;

<?php
function is_ftp_dir($itempath, $ftp_server, $ftp_user_name='anonymous', $ftp_user_pass='') {
if (empty(
$ftp_user_name)) {
$ftp_user_name = "anonymous";
}
if (
$itempath[0]!=="/") {
$itempath = "/".$itempath;
}

$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

$contents = ftp_nlist($conn_id, "$itempath");

if (!empty(
$contents[0])) {
$check = str_replace($itempath, "", $contents[0]);
if (!empty(
$check)) {
return
true;
}
}
ftp_close($conn_id);
}

// 示例:
if (is_ftp_dir("/pub/ftp/unknownitem", "ftp.nowhere", 'username', 'verysecret'')) {
// 执行与目录处理相关的操作
} else {
// 目标项是文件……
}

?>
mail at martinauer dot net
18年前
注意
数组将包含完整路径,而不仅仅是文件名。至少在我尝试使用PHP 4.3.11时是这样。

ftp_nlist("www.example.com/docs/some/thing")

它输出了类似这样的内容:

[0]=>
string(41) "www.example.com/docs/some/thing/file1.htm"
[1]=>
string(41) "www.example.com/docs/some/thing/file2.htm"
[2]=>
string(41) "www.example.com/docs/some/thing/file3.htm"
[3]=>
string(41) "www.example.com/docs/some/thing/file4.htm"
[4]=>
string(41) "www.example.com/docs/some/thing/file5.htm"
rmaslo at archa dot cz
2年前
某些FTP服务器会将带重音符号的字符转换为字符“?”。您可以尝试

<?php
$ftp
= ftp_connect($ftp_server);
$login_result = ftp_login($ftp, $ftp_user_name, $ftp_user_pass);
ftp_raw($ftp, 'OPTS UTF8 ON'); // 将服务器设置为以UTF返回结果
$contents = ftp_nlist($ftp, ".");
var_dump($contents);
?>
artiom1st at yahoo dot com
18年前
有时,由于服务器上的NAT或防火墙问题,您将无法获取文件夹内容。因此,您需要将ftp连接置于被动模式。

<?php

// 设置基本连接
$conn_id = ftp_connect($ftp_server);

// 使用用户名和密码登录
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

// 启用被动模式
ftp_pasv( $conn_id, true );

// 获取当前目录的内容
$contents = ftp_nlist($conn_id, ".");

// 输出 $contents
var_dump($contents);

?>
wim dot dupre at skynet dot be
17年前
在MAC OS 1.4(Tiger)上的php 5.2.2似乎默认为主动ftp。为了使ftp_nlist正常工作,我需要强制ftp为被动。
在Windows XP上使用PHP 5.2.3时的默认行为似乎是被动ftp。

问候。

wim
ralph at ralphje dot nl
17年前
如果您由于某些open_basedir限制而收到错误,请使用以下命令

<?php
putenv
('TMPDIR=/tmp/');
$filelist = ftp_nlist($ftp, "./accounts");
?>

(如果/tmp/是在open_basedir中允许的目录)

我花了一段时间才发现这一点。
kip at friendchip dot com
17年前
如果您只是需要ftp版本的is_dir,您可以查看ftp_chdir返回true还是false。
sksafarath at impelsys dot com
18年前
如果我们将第二个参数作为完整目录路径,则它将返回带有完整路径的文件列表,如果我们只想列出文件,则可以按照以下代码进行操作
// 设置基本连接
$conn_id = ftp_connect($ftp_server);

// 使用用户名和密码登录
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// 如果要显示/home/test/中的文件
// 使用以下命令将目录点更改为/home/test
ftp_chdir($conn_id, "test");
// 然后将第二个参数传递为空,这将给出文件列表。
// 获取当前目录的内容
$contents = ftp_nlist($conn_id, "");

注意:这在我的PHP5中有效
AndyM
17年前
小心tom at crysis-online dot com - 你建议的方法似乎依赖于服务器。我目前正在尝试与proftpd服务器通信,并且返回的大小对于所有文件似乎都是-1。
tom at crysis-online dot com
17年前
对于检查对象是文件还是文件夹,此函数比下面的函数快得多。

<?php
function is_ftp_dir($file, $ftp_connection){
if(
ftp_size($ftp_connection, $file) == '-1'){
return
true; // 是目录
}else{
return
false; // 是文件
}
}
?>
nigel (at) amanwithapencil (dot) com
17年前
进一步说明kip的帖子,这有效

if (!ftp_chdir($conn, $folder))
{
ftp_mkdir($conn, $folder);
ftp_chdir($conn, $folder);
}
fx dot menard at pleasenospam dot free dot fr
18年前
ftp_nlist函数的派生用法:确定给定路径是否存在以及是目录还是普通文件(这对于基本的ftp函数来说并不容易)。此代码不会发出任何警告或错误。它使用ls选项-d提高效率,并使用-F在检索到的路径是目录时附加斜杠。

<?php
// 返回有关给定ftp路径的信息
// 如果路径不存在,则返回0
// 如果路径是文件,则返回1
// 如果路径是目录,则返回2
function ftp_pathtype( $conn, $path )
{
$res = ftp_nlist( $conn, "-dF " . $path );
if ( isset(
$res[0] ) and
strlen( $res[0] ) )
{
if (
$res[0][ strlen( $res[0] )-1 ] === "/" )
// 目录
return 2;
else
return
1;
} else
return
0;
}
?>
robtherat at gmx dot de
18年前
来自nekrostar at gmx dot net的函数对我无效,所以我尝试了我的方法。为了检查找到的文件是目录还是文件,我使用了ftp_size函数。

<?php
function ftplistdir($conn_id, $dir){
$fold_no = array(".", "..", "cgi-data", "comp", "zuern", "counter");
$list = ftp_nlist( $conn_id, $dir );
foreach(
$list as $file){
if (
ftp_size($conn_id, $dir ."/".$file)== -1){
if (
in_array($file, $fold_no)) {
print
$file ." 跳过排除的目录。<br>";
} else {
$geslist[]= $dir ."/". $file;
$temp=ftplistdir($conn_id, $dir ."/". $file);
$geslist=array_merge($geslist, $temp);
}
}else{
$geslist[]= $dir ."/". $file;
}
}
return
$geslist;
}
?>
我希望这对任何人都有用。
Robert
ryan at wonko dot com
22年前
给在Windows服务器上使用PHP的开发人员的一则说明:从PHP 4.1.2开始,Windows版本的PHP中的ftp_nlist()函数出现故障。即使相同的代码在UNIX上运行良好,它也完全不会返回任何内容。因此,如果您绞尽脑汁试图找出为什么该函数没有返回任何内容,请停止浪费时间,您并没有做错任何事情。希望这将在未来的版本中得到修复,尽管它显然至少从4.0.6版本以来就一直存在这个问题。

关于此错误的更多信息,请访问 http://bugs.php.net/bug.php?id=16057
webmaster at torbox dot info
20年前
要使用自定义LIST标志,例如
LIST -aF ../*/
(列出受保护的pub目录)
您可以使用
<?php
$list
= ftp_nlist($ftp, "-aF ../*/");
?>
我花了一段时间才想出这个方法 :-)
micksam7 at neodecoder dot com
20年前
对king_killa at juggalos4life dot com的说明进行一个小小的更正,它不是ftp_res,而是ftp_size。

顺便说一下,这是一个完整的函数,它将获取服务器上的所有文件,然后将其写入数组。

<?php
$ftp1
= ftp_connect('ftp.nowhere1230404.foo') or die("无法连接到服务器");
ftp_login($ftp1,'foo','bar');
ftp_pasv($ftp1, TRUE); //被动模式更适合此操作

//获取文件!
echo "正在收集Neodecoder上的文件<br>";
//设置默认值,以防万一。如果我们不这样做,PHP也会报错。
$dir = "";

function
filecollect($dir,$filelist) {
global
$ftp1; //获取我们的ftp
$files = ftp_nlist($ftp1,$dir); //获取目录中的文件
foreach ($files as $file) {
$isfile = ftp_size($ftp1, $file);
if(
$isfile == "-1") { //是文件还是目录?
$filelist = filecollect($dir.'/'.$file,$filelist,$num); //如果是文件夹,则对其进行文件收集
}
else {
$filelist[(count($filelist)+1)] = $file; //如果不是,则将其作为文件添加到文件列表
}
}
return
$filelist;
}

$filelist = filecollect($dir,$filelist);

echo
"<pre>";
print_r($filelist);
echo
"</pre>";
?>

如果您尝试将所有文件从FTP服务器传输到另一个服务器,这将非常方便。这就是我一开始创建此脚本的原因。呵呵..
neodeus at allesamarsch dot com
21 年前
这是一个读取完整FTP服务器的示例(从您的根目录开始)
function files($dir)
{
/*
if(!isset($dir) || empty($dir))
{
$dir=ftp_pwd($this->conn_id);
}
*/
unset($list);
unset($files);
unset($folders);
unset($folder);
unset($file);
@ftp_chdir($this->conn_id, $dir);
$dir = ftp_pwd($this->conn_id);
$list=Array();
$list=ftp_nlist($this->conn_id, "$dir");
$files = Array();
$folders = Array();
for($i = 0; $i != sizeof($list); $i++)
{
$entry = str_replace("//", "", $list[$i]);
if(@ftp_chdir($this->conn_id, $entry))
{
$folders[] = $entry;
ftp_chdir($this->conn_id, $dir);
}
else
{
$files[] = $entry;
}
}
print "\t<b> ".$dir." 中的文件:</b><br><br>";
foreach($files as $file)
{
print $file."<br>";
}
print "\t<b>".$dir." 中的文件夹:</b> <br><br>";
foreach ($folders as $folder)
{
print "\t".$folder."<br>";
ftp_chdir($this->conn_id, $dir);
$this->files($folder);
}
}
louis at ewens dot com
21 年前
如果您对特定文件执行通配符或其他搜索,并且该文件不存在,Solaris FTP服务器会将“search*.xml: No such file or directory”作为响应数组中的单个元素返回。这使得很难检查文件是否存在。

一种可能的解决方法是解析您自己的原始目录列表。或者您可以逐字检查错误。但是不同的服务器可能会返回不同的值。一种更简单的补偿方法是使用ftp_size命令来验证返回的文件

if ( ($filelist = ftp_nlist( $this->conn_id, $filesearch )) === FALSE )
{
Error( "无法获取文件列表" );
return FALSE;
}
// 文件实际存在?捕获无效的FTP服务器列表响应
if ( !count($filelist) || ftp_size( $this->conn_id, $filelist[0] ) == -1 )
{
Error( "没有有效的文件" );
return FALSE;
}
// 文件确实存在,获取它或执行您想要执行的其他操作
nigel (at) amanwithapencil (dot) com
17年前
实际上,这样效果更好(在ftp_chdir()失败时抑制错误)!

if (!@ftp_chdir($ftp_conn, $userfolder))
{
ftp_mkdir($ftp_conn, $userfolder);
ftp_chdir($ftp_conn, $userfolder);
}
rfr at ajato dot com dot br
21 年前
有些FTP服务器根本不接受ftp_nlist命令,它们返回一个布尔变量。但我认为所有服务器都接受LIST命令,即ftp_rawlist命令。因此,您必须将rawlist解析为nlist。我在这里找到了“fredrik”发布的代码,但是如果FTP服务器上的文件名称中有空格,它会显示错误……所以这里有一个更好的函数
function rawlist_2_nlist($list)
{
$newlist = array();
reset($list);
while (list(,$row) = each($list))
{
$buf="";
if ($row[0]=='d'||$row[0]=='-'){
$buf = substr($row,55);
$newlist[]=$buf;
}
}

return $newlist;
}
ds at over dot hu
19年前
另一个文件收集脚本,使用静态变量。

<?php

function filecollect($conn_id,$dir='.') {
static
$flist=array();
if (
$files = ftp_nlist($cid,$dir)){
foreach (
$files as $file) {
if (
ftp_size($cid, $file) == "-1"){
filecollect($cid,$file);
} else
$flist[] = $file;
}
}
return
$flist;
}

$conn_id = ftp_connect('ftp.nowhere.com') or die("无法连接到服务器");
if (@
ftp_login($conn_id, 'anonymous', '[email protected]')){
$filelist = filecollect($conn_id);
echo
"<pre>";
print_r($filelist);
echo
"</pre>";
}

?>
weltvolk.de的站长
17年前
为了在不支持 `ftp_size()` 函数的远程服务器上实现文件/文件夹分离,最好使用下面提到的 `ftp_is_dir()` 函数。

<?php

// 识别目录

function ftp_is_dir($dir) {
global
$ftp_connect;
if (
ftp_chdir($ftp_connect, $dir)) {
ftp_chdir($ftp_connect, '..');
return
true;
} else {
return
false;
}
}
$ftp_nlist = ftp_nlist($ftp_connect, ".");

// 字母排序

sort($ftp_nlist);
foreach (
$ftp_nlist as $v) {

// 1. ftp_is_dir() 为真 => 目录
if (ftp_is_dir($v)) {

// 输出为 [ 目录 ]
echo "[ " . $v . " ]<br />\n";
}
}
foreach (
$ftp_nlist as $v) {

// 2. ftp_is_dir() 为假 => 文件
if (!ftp_is_dir($v)) {

// 输出为 文件
echo "" . $v . "<br />\n";
}
}
?>
weltvolk.de的站长
17年前
如何按字母顺序获取文件列表,并将所有目录放在顶部?

<?php
$ftp_nlist
= ftp_nlist($ftp_connect, ".");

// 字母排序

sort($ftp_nlist);
foreach (
$ftp_nlist as $v) {

// 1. 大小为 '-1' => 目录
if (ftp_size($ftp_connect, $v) == -1) {

// 输出为 [ 目录 ]
echo "[ " . $v . " ]<br />\n";
}
}
foreach (
$ftp_nlist as $v) {

// 2. 大小不为 '-1' => 文件
if (!(ftp_size($ftp_connect, $v) == -1)) {

// 输出为 文件
echo "" . $v . "<br />\n";
}
}
?>

结果如下所示

[ a_mydirectory ]
[ b_mydirectory ]
[ c_mydirectory ]
...
a_myfile.htm
b_myfile.css
c_myfile.php
...
altexa.com的markw
24年前
您可以使用通配符文件列表与 `ftp_nlist`,例如:

$list=ftp_nlist($conn_id, "$dir/*.txt");
To Top