ftp_size

(PHP 3 >= 3.0.13, PHP 4, PHP 5)

ftp_size -- 返回指定文件的大小

说明

int ftp_size ( resource ftp_stream, string remote_file )

ftp_size() 函数以字节返回远程文件 remote_file 的大小。如果指定文件不存在或发生错误,则返回 -1。有些 FTP 服务器可能不支持此特性。

获取成功返回文件大小,否则返回 -1。

例子 1. ftp_size() 例子

<?php
$file
= 'somefile.txt';

// connect to the server
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

$res = ftp_size($conn_id, $file);

if (
$res != -1) {
    echo
"size of $file is $res bytes";
} else {
    echo
"couldn't get the size";
}

ftp_close($conn_id);
?>

参见 ftp_rawlist()


add a note add a note User Contributed Notes
chuck at t8design dot com
24-May-2006 12:54
note that project_t4 at hotmail dot com's example above doesn't work in general, though it works on his Win2K/Apache server; as far as I can tell there is no way to check over ftp whether a directory exists.  This function's behavior given a directory name seems to be at least somewhat dependent on your OS, web server, or ftp server, I don't know which.
adams[AT]techweavers[DOT]net
22-Jun-2005 05:30
Well this function is nice but if you have files larger then 2.1Gb or 2.1 Billion Bytes you cannot get its size.
29-Sep-2004 09:10
To get a dirsize recursive you can use this simple function:

<?php # copyright by fackelkind | codeMaster
  
function getRecDirSize ($connection, $dir){
      
$temp = ftp_rawlist ($connection, "-alR $dir");
       foreach (
$temp as $file){
           if (
ereg ("([-d][rwxst-]+).* ([0-9]) ([a-zA-Z0-9]+).* ([a-zA-Z0-9]+).* ([0-9]*) ([a-zA-Z]+[0-9: ]*[0-9]) ([0-9]{2}:[0-9]{2}) (.+)", $file, $regs)){ 
              
$isdir = (substr ($regs[1],0,1) == "d");
               if (!
$isdir)
                  
$size += $regs[5];
           }
       }
       return
$size;
   }
  
$dirSize = getRecDirSize ($conID, "/");
?>
project_t4 at hotmail dot com
19-Mar-2004 03:03
Just to let people out there know, on my windows 2000 server running Apache and php i was returned 0 not -1 for directories.

foreach ($dir_list as $item)
   {
     if(ftp_size($conn_id, $item) == "0")
     {
     echo "<br>Directory:: ".$item;
     } else {
     echo "<br>File:: ".$item;
     }
   }

This outputs a list of the remote directory and indicates which items are directories and which are files.
nicke_ at at_h9k dot com
04-Oct-2003 09:48
This will return the filesize on remote host and the size if you download it in FTP_BINARY mode. If you are using FTP_ASCII in ftp_get() the size can be changed.
victor59 at yahoo dot com dot hk
23-Dec-2002 05:44
$file= 'filename with space.txt';
$size = ftp_size($this->ftp, urldecode($file) );

this one can correctly return the size
otherwize, it always return -1