如何在FTP服务器上获取文件的文件大小?

时间:2010-07-09 09:14:14

标签: php codeigniter ftp

我需要一个FTP服务器上所有文件(和相关文件大小)的列表。我可以使用CodeIgniter的FTP类获取文件列表,但不知道如何获取文件大小。如何获取文件大小?感谢。

7 个答案:

答案 0 :(得分:2)

快速浏览一下CodeIgniters FTP类..正如它用PHP4的后向compat编写的那样,如果必须的话,你可能会这样做(黑客工作)。

<?php
$files = $this->ftp->list_files('/folder/');

foreach ($files as $file)
{
  echo 'File:'. $file .' Size: '. ftp_size($this->ftp->conn_id, $file) .' <br />';
}
$this->ftp->close();

我不推荐这个 - 它可能值得扩展主要的CI ftp类

class FTP extends CI_FTP
{

  function FTP()
  {
    // call parent constructor
    parent::CI_FTP();
  }

  // Single file size
  function file_size($file)
  {
    return ftp_size($this->conn_id, $file);
  }
}

将上述内容放入您的应用程序/库中并将其另存为ftp.php。如果您运行的是CI的更新版本,则会加载您的扩展程序。

答案 1 :(得分:1)

我对CodeIgniter的FTP类一无所知,但是这个怎么样?

http://www.php.net/manual/en/function.ftp-rawlist.php

我假设FTP类的list_files()方法不提供此信息。这是对的吗?

答案 2 :(得分:0)

扩展CI FTP类相对简单:

class MY_FTP extends CI_FTP {

    function MY_FTP()
    {
        parent::CI_FTP();
    }

    function get_file_size()
    {

    }
}

基本上只是让get_ftp_size()成为:

的包装器
return ftp_size($conn, $file);

http://php.net/manual/en/function.ftp-size.php

我希望这会有所帮助(如果您只是浏览了安装的ftp.php文件;您很快就会找到自己的方式)

修改

由于wimvds正确建议ftp_rawlist()可能是更优选/更容易的选项,我甚至可以建议改变list_files()以使用ftp_rawlist()。

答案 3 :(得分:0)

请注意,FTP服务器禁用了ceratin功能,或者它不允许您调用(例如filesize()函数)。 此外,标准的filesize()http://php.net/manual/en/function.filesize.php函数应该可以在ftp上运行

答案 4 :(得分:0)

由于CI仍然兼容PHP 4,因此您可以快速,简单地执行以下操作:

$this->load->library('ftp');

$config['hostname'] = 'ftp.example.com';
$config['username'] = 'your-username';
$config['password'] = 'your-password';
$config['debug'] = TRUE;

$this->ftp->connect($config);
$files = ftp_rawlist($this->ftp->conn_id, $path);

在$ files中,每个文件应该有一行,包含文件权限,所有者/组,文件大小和文件名。您将不得不解析它以单独显示它们。

免责声明:只需复制/粘贴CI手册中的连接信息,添加基于CI源代码的最后一行,YMMV:p。

答案 5 :(得分:0)

经过努力,这段代码效果很好!!!!我想与社区分享(通过MundialSYS)

function dirFTPSize($ftpStream, $dir) {
    $size = 0;
    $files = ftp_nlist($ftpStream, $dir);

    foreach ($files as $remoteFile) {
        if(preg_match('/.*\/\.\.$/', $remoteFile) || preg_match('/.*\/\.$/', $remoteFile)){
            continue;
        }
        $sizeTemp = ftp_size($ftpStream, $remoteFile);
        if ($sizeTemp > 0) {
            $size += $sizeTemp;
        }elseif($sizeTemp == -1){//directorio
            $size += dirFTPSize($ftpStream, $remoteFile);
        }
    }

    return $size;
}

$hostname = '127.0.0.1'; // or 'ftp.domain.com'
$username = 'username';
$password = 'password';
$startdir = '/public_html'; // absolute path
$files = array();
$ftpStream = ftp_connect($hostname);
$login = ftp_login($ftpStream, $username, $password);
if (!$ftpStream) {
    echo 'Wrong server!';
    exit;
} else if (!$login) {
    echo 'Wrong username/password!';
    exit;
} else {
    $size = dirFTPSize($ftpStream, $startdir);
}

echo number_format(($size / 1024 / 1024), 2, '.', '') . ' MB';

ftp_close($ftpStream);

好的代码! 费尔南多

答案 6 :(得分:-1)

使用file helper

get_file_info('path/to/file', $file_information)
  

给定文件和路径,返回名称,路径,大小,修改日期。第二个参数允许您显式声明要返回的信息;选项包括:name,server_path,size,date,readable,writable,executable,fileperms。如果找不到文件,则返回FALSE。