I have a working FTP file download script.
The files I am downloading will be about 2-4 GB per day.
I was wondering if there was a way to get the percent of the file where it's at?
I have looked on php.net and on here but I couldn't find any similar questions and rather spend more time looking I figure I would ask people much smarter than myself.
I was thinking about if there was a function to see where it's at in the download, but I couldn't find one since ftp_get
would have to complete first so that eliminated the chance of flushing the buffer every few seconds to display a new percent.
Anyone?
Here is my code: I hid all of my variables above it.
$conn_id = ftp_connect($ftp_server);
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
echo "Successfully written to $local_file\n";
} else {
echo "There was a problem\n";
}
ftp_close($conn_id);
EDIT:
I added ftp_nb_get
and here is my code for that. It keeps downloading fine, just doesn't echo it out to the browser.
$ret = ftp_nb_get($conn_id, $local_file, $server_file, FTP_BINARY, $size);
while ($ret == FTP_MOREDATA) {
echo round((filesize($local_file)/$server_size)*100)."%\n";
$ret = ftp_nb_continue($conn_id);
}
It can be implemented easily using FTP URL protocol wrappers:
Regarding your attempts using
ftp_nb_get
:The
filesize
caches the results, so calling it repeatedly will get you the same value. You have to callclearstatcache
.A full code is like:
Alternatively use
ftp_nb_fget
and query the file handle, like my first example.You should try buffer flush - ob_flush() and flush().
This technique works, I already used it. here is a tutorial
I am sure that you can wind yourself some more. Just google "progress php flush buffer"
Try using the non-blocking version
ftp_nb_get()
andftp_nb_continue()
in a loop, and check for the saved file's size.