通过FTP获取文件列表

sik*_*kas 10 php ftp

我想打印文件列表,只打印来自FTP服务器的文件,这是我能完成的.

<?php
    $ftp_server = "my ftp server";
    $conn_id = ftp_connect($ftp_server);
    $ftp_user_name = "ftp username";
    $ftp_user_pass = "ftp password";
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
    $contents = ftp_nlist($conn_id, '/');
    for ($i = 0 ; $i < count($contents) ; $i++)
        echo "<li>" . substr($contents[$i],1) . "</li>";
    ftp_close($conn_id);
?>
Run Code Online (Sandbox Code Playgroud)

但这会打印文件和文件夹的名称.我怎样才能打印文件名(文件可能没有扩展名!)

Jac*_*son 8

选项:

1)您可以使用ftp_rawlist而不是ftp_nlist获取文件/目录的完整列表,这应该指示它是否是目录.但是,该列表的格式将取决于ftp服务器的操作系统.例如,在unix/linux系统上,原始列表可能如下所示:

drwxrwxr-x  3 jm72 jm72  4096 Nov  2 16:39 myDir
-rw-rw-r--  1 jm72 jm72   257 Nov  2 16:39 myFile
Run Code Online (Sandbox Code Playgroud)

第一列中的"d"会告诉你它是一个目录.不确定它在Windows服务器上会是什么样子.

2)对于您返回的每个文件名,尝试将CD放入其中.如果可以的话,这是一个目录!

if (ftp_chdir($conn_id, substr($contents[$i],1)) {
  //it's a directory, don't include it in your list
  ftp_cdup($conn_id) //don't forget to go back up to the directory you started in!
}
Run Code Online (Sandbox Code Playgroud)

  • 是不是更好做`if(!ftp_chdir(....){/*FILE*/} else {/*UP*/} (3认同)

Jus*_*ier 6

这是一个可以为您完成此操作的脚本,由ftp_nlist(PHP 文档)上的海报提供:

<?php

//identify directories

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, ".");

//alphabetical sorting

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

//1. ftp_is_dir() is true => directory
  if (ftp_is_dir($v)) {

//output as [ directory ]
      echo "[ " . $v . " ]<br />\n";
  }
}
foreach ($ftp_nlist as $v) {

//2. ftp_is_dir() is false => file
  if (!ftp_is_dir($v)) {

//output as file
      echo "" . $v . "<br />\n";
  }
}
?>
Run Code Online (Sandbox Code Playgroud)