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

PHPのftp_nb_fput()関数の使い方:非同期でFTPサーバーへファイルをアップロードする方法

PHPのftp_nb_fput()関数は、開いているローカルファイルからデータを読み込み、FTPサーバー上のファイルとしてアップロード(保存)します。

この関数は非同期(ノンブロッキング)で動作するのが特徴です。通常のftp_fput()関数はアップロードが完了するまでスクリプトの処理が停止しますが、ftp_nb_fput()を使用すると、アップロードの進行中でも他の処理を並行して実行できます。

構文

ftp_nb_fput(con, remote_file, open_file, transfer_mode, beg_pos);

パラメータ

  • con − ftp_connect()で取得したFTP接続リソース

  • remote_file − アップロード先となるサーバー上のファイルパス

  • open_file − fopen()などで開いたローカルファイルのポインタ

  • transfer_mode − データ転送モード。以下のいずれかを指定します。

    - FTP_ASCII:テキストファイル向けのアスキーモード
    - FTP_BINARY:画像や実行ファイルなど向けのバイナリモード

  • beg_pos − アップロードを開始するファイル内の位置(省略可能)。途中からの再開などに利用できます。

戻り値

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

  • FTP_FAILED − 送受信に失敗した

  • FTP_FINISHED − 送受信が正常に完了した

  • FTP_MOREDATA − 送受信が進行中である

戻り値がFTP_MOREDATAの間は、ftp_nb_continue()関数を呼び出して転送を継続させる必要があります。

使用例

以下は、ローカルファイル「new.txt」をFTPサーバーの「demo.txt」として非同期にアップロードする例です。

<?php
    $ftp_server = "192.168.0.4";
    $ftp_user = "jacob";
    $ftp_pass = "tywg61gh";

    // FTPサーバーに接続
    $con = ftp_connect($ftp_server) or die("$ftp_server に接続できませんでした");

    // ログイン
    $login = ftp_login($con, $ftp_user, $ftp_pass);

    $my_serverfile = "demo.txt";  // アップロード先のファイル名
    $local_file = "new.txt";      // ローカルのファイル名

    // ローカルファイルを読み込みモードで開く
    $file_pointer = fopen($local_file, "r");

    // 非同期でアップロードを開始
    $c = ftp_nb_fput($con, $my_serverfile, $file_pointer, FTP_BINARY);

    // 転送が完了するまで継続
    while ($c == FTP_MOREDATA) {
        $c = ftp_nb_continue($con);
        // この間に進捗表示など別の処理を実行できる
    }

    if ($c != FTP_FINISHED) {
        echo "ファイルのアップロード中にエラーが発生しました!";
        exit(1);
    }

    // 接続を閉じる
    ftp_close($con);
?>

ポイント

  • 大きなファイルを扱う場合でも、アップロード中にユーザーへの応答やプログレスバーの表示など、他の処理を行えます。

  • 転送モードには、テキストファイルならFTP_ASCII、画像や圧縮ファイルなどならFTP_BINARYを指定するのが基本です。

  • 処理終了後はftp_close()で必ず接続を閉じましょう。

  1. PHPのdelete()関数とは?使い方とサンプルコードをわかりやすく解説

    PHPのdelete()関数は、指定したファイルを削除するための関数です。削除したいファイルのパスをパラメータとして渡すことで、そのファイルをシステムから削除できます。 構文(Syntax) delete(file_path) パラメータ(Parameters) file_path: 削除したいファイルのパスを指定します。相対パス・絶対パスのどちらでも指定可能です。 戻り値(Return) delete()関数は、処理結果に応じて以下のブール値を返します。 true: ファイルの削除が成功した場合 false: ファイルの削除に失敗した場合(ファイルが存在しない、権限がないなど) 使用

  2. PHPのcopy()関数とは?使い方・パラメータ・実行例をわかりやすく解説

    PHPのcopy()関数は、指定したファイルを別の場所へコピーするための組み込み関数です。この関数を実行すると、コピー元(ソース)ファイルをもとに、コピー先(デスティネーション)として新しいファイルが作成されます。なお、コピー先にすでに同名のファイルが存在する場合は、そのファイルは上書きされる点に注意してください。構文(Syntax)copy(source_file, dest_file)パラメータsource_file − コピー元となるファイルを指定します。dest_file − コピー先のファイルパスを指定します。戻り値(Return値)copy()関数は、処理結果に応じて以下のブール値