從 FTP 伺服器上獲取檔案並寫入本地檔案(non-blocking)

ftp_nb_get

(PHP 4 >= 4.3.0, PHP 5, PHP 7, PHP 8)

ftp_nb_get從 FTP 伺服器上獲取檔案並寫入本地檔案(non-blocking)

說明

ftp_nb_get(
    resource $ftp_stream,
    string $local_file,
    string $remote_file,
    int $mode = FTP_BINARY,
    int $resumepos = 0
): int

ftp_nb_get() 在 FTP 伺服器上獲取指定的遠端檔案,並儲存到本地。

ftp_get() 不同之處,在於此函式是通過非同步的方式來獲取檔案,這意味著,你的程式可以在下載檔案的同時,同步進行其它操作。

參數

ftp_stream

FTP 連線控制代碼。

local_file

儲存到的本地檔案路徑(如果檔案已存在會被覆蓋)。

remote_file

遠端檔案路徑。

mode

指定傳輸模式。必須是 FTP_ASCIIFTP_BINARY

resumepos

開始下載檔案的起始位置。

返回值

返回 FTP_FAILEDFTP_FINISHEDFTP_MOREDATA

更新日誌

版本 說明
7.3.0 mode 參數變為可選,之前是強制性的。

範例

示例 #1 ftp_nb_get() 示例

<?php

// 初始化
$ret ftp_nb_get($my_connection"test""README"FTP_BINARY);
while (
$ret == FTP_MOREDATA) {
   
   
// 可以同步干其它事
   
echo ".";

   
// 繼續下載...
   
$ret ftp_nb_continue($my_connection);
}
if (
$ret != FTP_FINISHED) {
   echo 
"下載檔案出錯...";
   exit(
1);
}
?>

示例 #2 通過 ftp_nb_get() 恢復下載一個檔案

<?php

// 初始化 
$ret ftp_nb_get($my_connection"test""README"FTP_BINARY
                      
filesize("test"));
// OR: $ret = ftp_nb_get($my_connection, "test", "README", 
//                           FTP_BINARY, FTP_AUTORESUME);
while ($ret == FTP_MOREDATA) {
   
   
// 做你愛做的事
   
echo ".";

   
// 繼續下載Ing...
   
$ret ftp_nb_continue($my_connection);
}
if (
$ret != FTP_FINISHED) {
   echo 
"下載檔案出錯...";
   exit(
1);
}
?>

示例 #3 使用 ftp_nb_get() 從指定位置恢復下載檔案

<?php

// 禁止 Autoseek
ftp_set_option($my_connectionFTP_AUTOSEEKfalse);

// 初始化
$ret ftp_nb_get($my_connection"newfile""README"FTP_BINARY100);
while (
$ret == FTP_MOREDATA) {

   
/* ... */
   
   // 繼續下載...
   
$ret ftp_nb_continue($my_connection);
}
?>

在上面的示例中,newfile 會比 FTP 伺服器上的 README 檔案小 100 bytes,因為開始下載的時候設定了偏移量為 100。如果我們不禁止 FTP_AUTOSEEK,則 newfile 檔案前面的 100 bytes 會變成 '\0'

參見

  • ftp_nb_fget() - 從 FTP 伺服器獲取檔案並寫入到一個打開的檔案(非阻塞)
  • ftp_nb_continue() - 連續獲取/發送檔案(以不分塊的方式 non-blocking)
  • ftp_fget() - 從 FTP 伺服器上下載一個檔案並儲存到本地一個已經打開的檔案中
  • ftp_get() - 從 FTP 伺服器上下載一個檔案

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *