PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPのftp_nb_fget()関数とは?構文・パラメータ・使い方を解説

PHPのftp_nb_fget()関数は、FTPサーバー上のファイルを非同期(ノンブロッキング)でダウンロードし、すでに開かれているローカルファイルへ書き込むための関数です。通常のftp_fget()と異なり、ダウンロード中もスクリプトの処理を継続できるため、進行状況の表示などを行いたい場合に便利です。

構文

ftp_nb_fget(con, open_file, server_file, transfer_mode, beg_pos);

パラメータ

  • con − FTP接続リソース(ftp_connect()で取得した接続)を指定します。

  • open_file − ダウンロードしたデータを保存する、ローカル側で開かれているファイルポインタを指定します。

  • server_file − ダウンロード対象となるサーバー上のファイルパスを指定します。

  • transfer_mode − 転送モードを指定します。以下のいずれかの値が使用可能です。

    ・FTP_ASCII(アスキーモード)

    ・FTP_BINARY(バイナリモード)

  • beg_pos − ダウンロードを開始するファイル内の位置(オフセット)を指定します。省略可能です。

戻り値

ftp_nb_fget()関数は、以下のいずれかの値を返します。

  • FTP_FAILED − 送受信に失敗したことを示します。

  • FTP_FINISHED − 送受信が完了したことを示します。

  • FTP_MOREDATA − 送受信が進行中であることを示します。

使用例

以下は、ftp_nb_fget()関数を使ってファイルを非同期ダウンロードする例です。FTP_MOREDATAが返される間はループ処理でftp_nb_continue()を呼び出し、ダウンロードを継続します。

<?php
   $ftp_server="192.168.0.4";
   $ftp_user="jacob";
   $ftp_pass="tywg61gh";
   $con = ftp_connect($ftp_server) or die("Could not connect to $ftp_server");
   $login = ftp_login($con, $ftp_user, $ftp_pass);
   $my_serverfile = "demo.txt";
   $local_file = "new.txt";
   $file_pointer = fopen($local_file,"w");
   $c = ftp_nb_fget($con, $file_pointer, $my_serverfile, FTP_BINARY);
   while ($c == FTP_MOREDATA){
      // ダウンロードを継続
      $c = ftp_nb_continue($con);
   }
   if ($c != FTP_FINISHED){
      echo "サーバーファイルのダウンロード中にエラーが発生しました!";
      exit(1);
   }
   // 接続とファイルを閉じる
   ftp_close($con);
   fclose($file_pointer);
?>

この例では、まずftp_connect()でFTPサーバーに接続し、ftp_login()で認証を行います。その後、ローカルファイルを書き込みモードで開き、ftp_nb_fget()でバイナリモードによる非同期ダウンロードを開始します。戻り値がFTP_MOREDATAの間はダウンロードが継続中のため、ftp_nb_continue()を繰り返し呼び出します。完了後は戻り値がFTP_FINISHEDになるため、エラー判定を行い、最後に接続とファイルを閉じて処理を終了します。

  1. PHPのftp_cdup()関数とは?使い方とサンプルコードを解説

    ftp_cdup()関数は、FTPサーバー上の現在のディレクトリを、その親ディレクトリ(1階層上のディレクトリ)へ変更します。サブディレクトリで作業中に、上位の階層へ戻りたい場合に便利な関数です。 構文 ftp_cdup(con); パラメータ con − FTP接続のリソース(ftp_connect()で取得した接続)を指定します。 戻り値 ftp_cdup()関数は、ディレクトリの移動に成功した場合にTRUEを、失敗した場合にFALSEを返します。戻り値を判定することで、移動が正しく行われたかどうかを確認できます。 使用例 以下は、現在のディレクトリを親ディレクトリへ移動させる

  2. PHPのftp_alloc()関数とは?使い方とサンプルコードを解説

    ftp_alloc() 関数は、FTPサーバーにファイルをアップロードする前に、そのファイル用のディスクスペースを事前に確保するための関数です。内部的にはFTPの「ALLO」コマンドを送信し、サーバー側に十分な空き容量が存在するかどうかを確認できます。対応していないサーバーもありますが、大きなファイルを扱う際にはアップロード失敗の防止に役立ちます。 構文 ftp_alloc(connection, size_of_file, res); パラメータ connection − 使用するFTP接続(ftp_connect() で取得した接続リソース) size_of_file − 確保する容量(