[gollem] Fwd: [PHP-DEV] New FTP extension functionality

Chuck Hagenbuch chuck@horde.org
Thu, 1 Aug 2002 16:07:33 -0400



----- Forwarded message from sesser@php.net -----
    Date: Sat, 27 Jul 2002 08:52:46 +0200
    From: Stefan Esser <sesser@php.net>
Reply-To: Stefan Esser <sesser@php.net>
 Subject: [PHP-DEV] New FTP extension functionality
      To: php-dev@lists.php.net

Hi,

yesterday I did several commits to the FTP extension. Due to the fact that
I do not know how I can document the stuff myself and right now am lacking
the time here is a brief instruction:

Stefan Esser

---------------------------------------------------------------------------
5 new constants
---------------

FTP_AUTOSEEK     new option for get/set_option: when enabled (which is 
default)
                 get/put requests with a resumepos/startpos will first seek
                 to the wanted position within the stream
                 
FTP_AUTORESUME   automaticly determine resumepos/startpos for get/put 
request
                 (does only work if AUTOSEEK is enabled)

FTP_FAILED       asynchronous transfer has failed
FTP_FINISHED     asynchronous transfer has finished
FTP_MOREDATA     asynchronous transfer is still active

New optional 5th parameter
--------------------------

Added optional "startpos" to ftp_put/ftp_fput (works like in the async 
examples)
Added optional "resumepos" to ftp_get/ftp_fget (works like in the async 
examples)

New asynchronous FTP functions
------------------------------

int ftp_async_get(resource ftp_stream, string local_file, string 
remote_file, int mode[, int resumepos])
int ftp_async_fget(resource ftp_stream, resource fp, string remote_file, 
int mode[, int resumepos])
int ftp_async_put(resource ftp_stream, string remote_file, string 
local_file, int mode[, int startpos])
int ftp_async_fput(resource ftp_stream, string remote_file, resource fp, 
int mode[, int startpos])
int ftp_async_continue(resource ftp_stream)


Example (Downloading a file):
-----------------------------

...
// Initate the Download
$ret = ftp_async_get ($my_connection, "test", "README", FTP_BINARY);
while ($ret == FTP_MOREDATA) {
   
   // Do whatever you want
   echo ".";

   // Continue downloading...
   $ret = ftp_async_continue ($my_connection);
}
if ($ret != FTP_FINISHED) {
   echo "There was an error downloading the file...";
   exit(1);
}
...

Example (Uploading a file):
-----------------------------

...
// Initiate the Upload
$ret = ftp_async_put ($my_connection, "test.remote", "test.local", 
FTP_BINARY);
while ($ret == FTP_MOREDATA) {
   
   // Do whatever you want
   echo ".";

   // Continue uploading...
   $ret = ftp_async_continue ($my_connection);
}
if ($ret != FTP_FINISHED) {
   echo "There was an error uploading the file...";
   exit(1);
}
...


Example (Resume downloading a file):
------------------------------------

...
// Initate 
$ret = ftp_async_get ($my_connection, "test", "README", FTP_BINARY, 
                      filesize("test"));
// OR: $ret = ftp_async_get ($my_connection, "test", "README", 
//                           FTP_BINARY, FTP_AUTORESUME);
while ($ret == FTP_MOREDATA) {
   
   // Do whatever you want
   echo ".";

   // Continue downloading...
   $ret = ftp_async_continue ($my_connection);
}
if ($ret != FTP_FINISHED) {
   echo "There was an error downloading the file...";
   exit(1);
}
...

Example (Resume uploading a file):
----------------------------------

...
// Initiate
$ret = ftp_async_put ($my_connection, "test.remote", "test.local", 
                      FTP_BINARY, ftp_size("test.remote"));
// OR: $ret = ftp_async_put ($my_connection, "test.remote", "test.local", 
//                           FTP_BINARY, FTP_AUTORESUME);

while ($ret == FTP_MOREDATA) {
   
   // Do whatever you want
   echo ".";

   // Continue uploading...
   $ret = ftp_async_continue ($my_connection);
}
if ($ret != FTP_FINISHED) {
   echo "There was an error uploading the file...";
   exit(1);
}
...

Example (Resume downloading at position 100 to a new file):
-----------------------------------------------------------
...
// Disable Autoseek
ftp_set_option ($my_connection, FTP_AUTOSEEK, FALSE);

// Initiate
$ret = ftp_async_get ($my_connection, "newfile", "README", FTP_BINARY, 100);
while ($ret == FTP_MOREDATA) {

   ...
   
   // Continue downloading...
   $ret = ftp_async_continue ($my_connection);
}
...

newfile is now 100 bytes smaller than README on the ftp because
we started reading at offset 100. If we have not have disabled
AUTOSEEK the first 100 bytes of newfile will be '\0'...



-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

----- End forwarded message -----


-chuck

--
Charles Hagenbuch, <chuck@horde.org>
"After a few minutes the most aromatic and nice smelling Italian coffee 
 will come out of the exhaustpipe." - Our stove-top espresso pot