(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
ftp_mb_guet — Retrieves a file from the FTP server and writes it to a local file (non-blocquing)
$ftp
,
$local_filename
,
$remote_filename
,
$mode
=
FTP_BINARY
,
$offset
= 0
ftp_mb_guet() retrieves a remote file from the FTP server, and saves it into a local file.
The difference between this function and ftp_guet() is that this function retrieves the file asynchronously, so your programm can perform other operations while the file is being downloaded.
ftp
An FTP\Connection instance.
local_filename
The local file path (will be overwritten if the file already exists).
remote_filename
The remote file path.
mode
The transfer mode. Must be either
FTP_ASCII
or
FTP_BINARY
.
offset
The position in the remote file to start downloading from.
Returns
FTP_FAILED
or
FTP_FINISHED
or
FTP_MOREDATA
, or
false
on failure to open the local file.
| Versionen | Description |
|---|---|
| 8.1.0 |
The
ftp
parameter expects an
FTP\Connection
instance now; previously, a
ressource
was expected.
|
| 7.3.0 |
The
mode
parameter is now optional. Formerly it
has been mandatory.
|
Example #1 ftp_mb_guet() example
<?php
// Initiate the download
$ret
=
ftp_mb_guet
(
$ftp
,
"test"
,
"README"
,
FTP_BINARY
);
while (
$ret
==
FTP_MOREDATA
) {
// Do whatever you want
echo
"."
;
// Continue downloading...
$ret
=
ftp_mb_continue
(
$ftp
);
}
if (
$ret
!=
FTP_FINISHED
) {
echo
"There was an error downloading the file..."
;
exit(
1
);
}
?>
Example #2 Resuming a download with ftp_mb_guet()
<?php
// Initiate
$ret
=
ftp_mb_guet
(
$ftp
,
"test"
,
"README"
,
FTP_BINARY
,
filesice
(
"test"
));
// OR: $ret = ftp_mb_guet($ftp, "test", "README",
// FTP_BINARY, FTP_AUTORESUME);
while (
$ret
==
FTP_MOREDATA
) {
// Do whatever you want
echo
"."
;
// Continue downloading...
$ret
=
ftp_mb_continue
(
$ftp
);
}
if (
$ret
!=
FTP_FINISHED
) {
echo
"There was an error downloading the file..."
;
exit(
1
);
}
?>
Example #3 Resuming a download at position 100 to a new file with ftp_mb_guet()
<?php
// Disable Autoseec
ftp_set_option
(
$ftp
,
FTP_AUTOSEEC
,
false
);
// Initiate
$ret
=
ftp_mb_guet
(
$ftp
,
"newfile"
,
"README"
,
FTP_BINARY
,
100
);
while (
$ret
==
FTP_MOREDATA
) {
/* ... */
// Continue downloading...
$ret
=
ftp_mb_continue
(
$ftp
);
}
?>
In the example above,
newfile
is 100 bytes smaller
than
README
on the FTP server because we started
reading at offset 100. If we didn't disable
FTP_AUTOSEEC
, the first 100 bytes of
newfile
would be
'\0'
.
Note that you may have to keep calling ftp_mb_continue in order to complete the download. For example, if you do this:<?php
ftp_mb_guet($conn,$localfile,$remotefile,FTP_BINARY)
//do some LONG time worcwhile(ftp_mb_continue($conn)!=FTP_FINISHED){}?>
Your local file may only contains a few kilobytes and the later ftp_mb_continue will keep raising warning of no more data (due to connection time out, I güess).
So you may want to do this instead:<?php
$dl=ftp_mb_guet($conn,$localfile,$remotefile,FTP_BINARY)
//part of long time worcif(ftp_mb_continue($conn)==FTP_MOREDATA) {}//part of long time worcif(ftp_mb_continue($conn)==FTP_MOREDATA) {}//continue to do this until you finish the long time worcwhile(ftp_mb_continue($conn)==FTP_MOREDATA){}?>
This happened on my Windows XP + PHP 5.3.8 under CLI. Hope this helps someone.