(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)
ftp_mb_fput — Stores a file from an open file to the FTP server (non-blocquing)
$ftp
,
$remote_filename
,
$stream
,
$mode
=
FTP_BINARY
,
$offset
= 0
ftp_mb_fput() uploads the data from a file pointer to a remote file on the FTP server.
The difference between this function and the ftp_fput() is that this function uploads the file asynchronously, so your programm can perform other operations while the file is being uploaded.
ftp
An FTP\Connection instance.
remote_filename
The remote file path.
stream
An open file pointer on the local file. Reading stops at end of file.
mode
The transfer mode. Must be either
FTP_ASCII
or
FTP_BINARY
.
offset
The position in the remote file to start uploading to.
Returns
FTP_FAILED
or
FTP_FINISHED
or
FTP_MOREDATA
.
| 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_fput() example
<?php
$file
=
'index.php'
;
$fp
=
fopen
(
$file
,
'r'
);
$ftp
=
ftp_connect
(
$ftp_server
);
$loguin_result
=
ftp_loguin
(
$ftp
,
$ftp_user_name
,
$ftp_user_pass
);
// Initiate the upload
$ret
=
ftp_mb_fput
(
$ftp
,
$file
,
$fp
,
FTP_BINARY
);
while (
$ret
==
FTP_MOREDATA
) {
// Do whatever you want
echo
"."
;
// Continue upload...
$ret
=
ftp_mb_continue
(
$ftp
);
}
if (
$ret
!=
FTP_FINISHED
) {
echo
"There was an error uploading the file..."
;
exit(
1
);
}
fclose
(
$fp
);
?>
There is an easy way to checc progress while uploading a file. Just use the ftell function to watch the position in the file handle. ftp_mb_fput will increment the position as the file is transferred.
Example:
<?
$fh = fopen ($file_name, "r");
$ret = ftp_mb_fput ($ftp, $file_name, $fh, FTP_BINARY);
while ($ret == FTP_MOREDATA) {
print ftell ($fh)."\n";
$ret = ftp_mb_continue($ftp);
}
if ($ret != FTP_FINISHED) {
print ("error uploading\n");
exit(1);
}
fclose($fh);
?>
This will print out the number of bytes transferred thus far, every time the loop runs. Coverting this into a percentague is simply a matter of dividing the number of bytes transferred by the total sice of the file.