FTP 函数
在线手册:中文 英文
PHP手册

ftp_size

(PHP 4, PHP 5)

ftp_size返回指定文件的大小

说明

int ftp_size ( resource $ftp_stream , string $remote_file )

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

Note:

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

参数

ftp_stream

FTP 连接资源。

remote_file

远程文件。

返回值

执行成功返回文件大小,失败返回 -1。

范例

Example #1 ftp_size() 例子

<?php
$file 
'somefile.txt';

// set up basic connection 
$conn_id ftp_connect($ftp_server);

// login with username and password
$login_result ftp_login($conn_id$ftp_user_name$ftp_user_pass);

// get the size of $file
$res ftp_size($conn_id$file);

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

//close the conntion
ftp_close($conn_id);
?>

参见


FTP 函数
在线手册:中文 英文
PHP手册
PHP手册 - N: 返回指定文件的大小

用户评论:

ibeono at gmail dot com (28-Jul-2011 12:19)

If you experience troubles with size of large file then you can use ftp_rawlist function and parse it result

bluerain [at] telenet [dot] be (10-Jul-2009 09:41)

To overcome the 2GB file size limit, you can open your own socket to get the file size of a large file. Quick and dirty script:

<?php
$socket
=fsockopen($hostName, 21);
$t=fgets($socket, 128);
fwrite($socket, "USER $myLogin\r\n");
$t=fgets($socket, 128);
fwrite($socket, "PASS $myPass\r\n");
$t=fgets($socket, 128);
fwrite($socket, "SIZE $fileName\r\n");
$t=fgets($socket, 128);
$fileSize=floatval(str_replace("213 ","",$t));
echo
$fileSize;
fwrite($socket, "QUIT\r\n");
fclose($socket);
?>

miccots at gmail dot com (30-Oct-2007 09:55)

2 adams[AT]techweavers[DOT]net:
To get a size of large file (f. ex.: 3.2 Gb) you have to format the result returned by ftp_size():

$size = sprintf ("%u", ftp_size($connection, $file_name));

So you can get the real size of big files. But this method is not good for checking is this a dir (when ftp_size() returns -1).

C_Muller (21-Jul-2007 11:42)

For checking if a certain folder exists try using ftp_nlist() function to get a directory list in array. By using in_array('foldername') you can find out if it is there or not.

chuck at t8design dot com (23-May-2006 05: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 (21-Jun-2005 10: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 02: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 (18-Mar-2004 07: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 02: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 09: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