ID:               30529
 User updated by:  wittj at gmx dot net
 Reported By:      wittj at gmx dot net
 Status:           Bogus
 Bug Type:         FTP related
 Operating System: linux-2.6.8-ck4
 PHP Version:      5.0.2
 New Comment:

Sorry if I bother you, but I thought that you might be interested in a
solution to my problem. I append a patch that transforms ftp_size() to
return a float. This works very well for me and is exactly what I was
looking for in the first place.

I don't know the PHP code well, so this might break everything and make
your grandma disappear, but as I said it works well for me and might
also be useful to others. I did not notice any inaccuracies, it reports
the file size exactly up to the last bit.

diff -r php-5.0.2-orig/ext/ftp/ftp.c php-5.0.2/ext/ftp/ftp.c
981c981
< int
---
> double
996c996
<       return atoi(ftp->inbuf);
---
>       return atof(ftp->inbuf);
diff -r php-5.0.2-orig/ext/ftp/ftp.h php-5.0.2/ext/ftp/ftp.h
180c180
< int           ftp_size(ftpbuf_t *ftp, const char *path);
---
> double                ftp_size(ftpbuf_t *ftp, const char *path);
diff -r php-5.0.2-orig/ext/ftp/php_ftp.c php-5.0.2/ext/ftp/php_ftp.c
1037c1037
< /* {{{ proto int ftp_size(resource stream, string filename)
---
> /* {{{ proto double ftp_size(resource stream, string filename)
1053c1053
<       RETURN_LONG(ftp_size(ftp, file));
---
>       RETURN_DOUBLE(ftp_size(ftp, file));


Previous Comments:
------------------------------------------------------------------------

[2004-10-22 13:25:09] [EMAIL PROTECTED]

Because it won't be accurate anymore due to you can not store the
precision you want in a float. 

------------------------------------------------------------------------

[2004-10-22 13:11:59] wittj at gmx dot net

Sorry, I did not know that. I mean, I did know that ints on my system
are limited to 32 bits (31 plus sign), but I always thought that php
could handle numbers larger than that. Maybe a silly question: why
does

$number = 4190578688;
print $number."<br/>";
print $number + 10;

work then? With var_dump() I see that $number is treated as a float
value. Why can't ftp_size() just return a float then?
Not being able to recognize files larger than 2GB seems somewhat dated
to me. No offense - I just wonder why this doesn't work. Thank you.

------------------------------------------------------------------------

[2004-10-22 12:50:48] [EMAIL PROTECTED]

Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

PHP does not support numbers > 2^31 at this moment.

------------------------------------------------------------------------

[2004-10-22 12:18:37] wittj at gmx dot net

Description:
------------
On my FTP server I have a file which is about 4GB large. The FTP server
(vsftpd) reports the file size correctly (checked with sniffer), however
ftp_size() does only return a size of 2147483647 (2^31) bytes. Obviously
ftp_size() does not support files larger than that, as I get the same
result on other large files.

Reproduce code:
---------------
$conn_id = ftp_connect($server);
$contents = ftp_nlist($conn_id, ".");
foreach($contents as $file) {
  print ftp_size($conn_id, $file);
}

Expected result:
----------------
The correct file size

Actual result:
--------------
A file size of 2^31 bytes.


------------------------------------------------------------------------


-- 
Edit this bug report at http://bugs.php.net/?id=30529&edit=1

Reply via email to