我想打印文件列表,只打印来自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);
?>
但是会打印文件和文件夹的名称。我怎样才能打印文件名(文件可能没有扩展名!)
答案 0 :(得分: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
第一列中的“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!
}
答案 1 :(得分:4)
这是一个可以为你做的脚本,由ftp_nlist (PHP Docs)上的海报提供:
<?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";
}
}
?>
答案 2 :(得分:1)
如果你像这样使用ftp_rawlist:
$rawfiles = ftp_rawlist($conn, true); //true being for recursive
foreach ($rawfiles as $rawfile)
{
$info = preg_split("/[\s]+/", $rawfile, 9);
if($info[0]{0} == 'd')
{
//Directory
}else
{
//File
$size = byteconvert($info[4]);
$chmod = chmodnum($info[0]);
$date = strtotime($info[6] . ' ' . $info[5] . ' ' . $info[7]);
}
}
应该让你更接近你的目标。
答案 3 :(得分:1)
您也可以使用ftp_mdtm()
功能。当它失败时,它总是返回一个错误(-1),这表示一个目录,因为这个函数对目录不起作用。需要注意的是,它在某些系统上不起作用(手册没有说明哪些系统),所以你需要测试它是否先工作。
答案 4 :(得分:1)
如果您在同一台服务器上,则可以执行以下操作:
$contents = ftp_nlist($conn_id, '/');
// set the path to the folder
$path = '/home/user/public_html/my_folder/';
foreach ( $contents as $item ) {
if ( is_file( $path . $item ) ) {
echo $item . PHP_EOL;
} else {
continue;
}
}
对于远程服务器,您可以检查文件是否存在with other methods。