PHPでファイルを別のサーバーにアップロードする方法(FTP・cURL活用)
はじめに
PHPには、ファイルストリームを開く「fopen」、データを読み込む「fread」、データをファイルに書き込む「fwrite」といった標準関数が用意されています。
ここで重要なのは、これらの関数が扱うファイルリソースは、必ずしもローカルマシン上の場所を指す必要がないという点です。リモートサーバーへの接続にもそのまま利用できます。
方法1:FTP経由でファイルを転送する
以下は、ローカルサーバー上のファイルをFTPサーバーへ転送する基本的な例です。
$file = "file_name.jpg";
$destination = fopen("ftp://username:password@example.com/" . $file, "wb");
$source = file_get_contents($file);
fwrite($destination, $source, strlen($source));
fclose($destination);
この例では、画像ファイルをFTPサーバーへ転送しています。まず転送先のサーバーを書き込みモード("wb")で開き、そこへ画像データを書き込み、最後にストリームを閉じるという流れです。
なお、実際の運用では認証情報をソースコード内に直接記述せず、環境変数や設定ファイルで管理することを推奨します。
方法2:cURL拡張モジュールを使う
cURL拡張モジュールは、Client URL Library(libcurl)を利用して、ある場所から別の場所へファイルを転送するための強力な仕組みです。cURLを使った処理は、次の流れで実装します。
- 最初にセッションを初期化する
- 必要な転送オプションを設定する
- 転送を実行する
- セッションを閉じる
セッションの初期化:curl_init
cURLセッションは「curl_init」関数で初期化できます。この関数は、他のcURL関数と組み合わせて使用できるリソース(ハンドル)を返します。
オプションの設定:curl_setopt
アップロード先のURLや転送セッションに関する各種設定は、「curl_setopt」関数を使って行います。この関数には、cURLリソース、設定内容を表す定義済み定数、およびオプション値を引数として渡します。
以下に具体的なコード例を示します。
$session_begin = curl_init();
curl_setopt($session_begin, CURLOPT_POST, true);
curl_setopt($session_begin, CURLOPT_POSTFIELDS, array('file' => 'path/to/file.txt'));
curl_setopt($session_begin, CURLOPT_URL, 'https://server2/upload.php');
curl_exec($session_begin);
curl_close($session_begin);
このコードでは、POSTリクエストとしてファイルを送信し、アップロード先のURLを指定しています。
転送先となる2つ目のサーバー側では、このリクエストを通常のファイルアップロードとして受け付けられます。つまり、受信側は $_FILES を使った標準的なアップロード処理を実装しておくだけで対応可能です。
-
HTMLでファイルアップロードボタンを作成する方法をわかりやすく解説
HTMLでファイルアップロードボタンを作成するには、<input>要素のtype属性に「file」を指定します。これにより、ユーザーが自分のPCやスマートフォンからファイルを選択してアップロードできるボタンが簡単に設置できます。 コード例 <!DOCTYPE html> <html> <head> <title>ファイルアップロードボタンの例</title> </head> <body> <h1>ファイルアップロードボタンの例</h1> <p>「ファイルを選択」ボ
-
PHPのreadfile()関数とは?使い方とパラメータを解説
PHPのreadfile()関数は、指定したファイルを読み込み、その内容を出力バッファへ書き出すための組み込み関数です。ファイルの中身をそのままブラウザに出力したい場合や、ファイルダウンロード処理を実装する際によく利用されます。 構文 readfile(file_path, include_path, context) パラメータ file_path − 読み込む対象となるファイルへのパスを指定します。 include_path − このパラメータをTRUEに設定すると、include_path(インクルードパス)内からファイルを検索します。デフォルトはFALSEです。 context −