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);
?>
ftp_size
(PHP 4, PHP 5)
ftp_size — Zwraca rozmiar podanego pliku
Opis
int ftp_size
( resource $strumień_ftp
, string $plik_zdalny
)
ftp_size() zwraca rozmiar podanego pliku zdalnego wyrażony w bajtach.
Informacja: Nie wszystkie serwery obsługują tą opcję.
Parametry
- strumień_ftp
-
Identyfikator połączenia z serwerem FTP.
- plik_zdalny
-
Plik zdalny, którego rozmiar ma być zwrócony.
Zwracane wartości
Zwraca rozmiar pliku w przypadku powodzenia lub -1 w przypadku błędu.
Przykłady
Przykład #1 Przykład użycia ftp_size()
<?php
$plik = 'plik.txt';
// nawiązanie połączenia
$conn_id = ftp_connect($ftp_server);
// logowanie
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// pobranie rozmiaru pliku $plik
$res = ftp_size($conn_id, $plik);
if ($res != -1) {
echo "Rozmiar pliku $plik to $res bajtów";
} else {
echo "Nie można pobrać wielkości pliku.";
}
// zamknięcie połączenia
ftp_close($conn_id);
?>
ftp_size
bluerain [at] telenet [dot] be
10-Jul-2009 04:41
10-Jul-2009 04:41
miccots at gmail dot com
30-Oct-2007 05:55
30-Oct-2007 05: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
22-Jul-2007 06:42
22-Jul-2007 06: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
24-May-2006 12:54
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
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
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
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
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
