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()で必ず接続を閉じましょう。
-
PHPのdelete()関数とは?使い方とサンプルコードをわかりやすく解説
PHPのdelete()関数は、指定したファイルを削除するための関数です。削除したいファイルのパスをパラメータとして渡すことで、そのファイルをシステムから削除できます。 構文(Syntax) delete(file_path) パラメータ(Parameters) file_path: 削除したいファイルのパスを指定します。相対パス・絶対パスのどちらでも指定可能です。 戻り値(Return) delete()関数は、処理結果に応じて以下のブール値を返します。 true: ファイルの削除が成功した場合 false: ファイルの削除に失敗した場合(ファイルが存在しない、権限がないなど) 使用
-
PHPのcopy()関数とは?使い方・パラメータ・実行例をわかりやすく解説
PHPのcopy()関数は、指定したファイルを別の場所へコピーするための組み込み関数です。この関数を実行すると、コピー元(ソース)ファイルをもとに、コピー先(デスティネーション)として新しいファイルが作成されます。なお、コピー先にすでに同名のファイルが存在する場合は、そのファイルは上書きされる点に注意してください。構文(Syntax)copy(source_file, dest_file)パラメータsource_file − コピー元となるファイルを指定します。dest_file − コピー先のファイルパスを指定します。戻り値(Return値)copy()関数は、処理結果に応じて以下のブール値