ホームページ >バックエンド開発 >PHPチュートリアル >PHPはCURL経由でファイルをアップロードします
p> PHP で CURL を使用してファイルをアップロードするには、リクエスト内のフィールドに「@」で始まるアップロードするファイルのフルパスを設定し、CURL を使用して送信するだけです。 POST モードの変数をサーバーに送信すると、サーバー側のスーパー グローバル変数 $_FILES から、対応するアップロード ファイル情報を取得できます。
<br>
以下では、例を使用してこのプロセスを示します。
<br>
ローカルにテキスト ファイル log.txt があり、そのパスは "/www/test/log.txt" で、内容は次のとおりであるとします。
this is a file for test hello PythonTab!
このファイルをサーバーにアップロードするには、-サイドスクリプト http://www.pythontab.com/upload.php で、curl_file.php という名前のローカル スクリプトを作成しました。内容は次のとおりです:
<php? //要上传的本地文件地址 "upload" = > "@/www/test/log.txt" ); $ch = curl_init(); curl_setopt($ch , CURLOPT_URL , $url); curl_setopt($ch , CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch , CURLOPT_POST, 1); curl_setopt($ch , CURLOPT_POSTFIELDS, $post_data); $output = curl_exec($ch); curl_close($ch); echo $output; ?>
curl_file.php のロジックは非常に単純で、POST 変数 $ を設定します。 post_data、upload は送信する必要があるファイルを指します。ここで注意していただきたいのは、以前に POST を使用したときは、文字列を送信し、サーバー側で file_get_contents("php//input") を使用して文字列を取得していたことです。キーと値のペアを送信することもできます。サーバー側にはスーパーグローバル変数$_POSTがあり、$_GETと同様に該当するPOSTデータの値を取得できます。ファイルをアップロードするための変数は $_POST には存在せず、$_FILES に存在することに注意してください。
<br>
上記のコードからファイルアップロードリクエストを受信するサーバーのロジックを示すために、upload.php に次のコードを書きました:
<br>
upload.php は最初に var_export を使用して $_FILES 変数を出力します標準出力を取得し、file_get_contents を使用して $_FILES['upload']['tmp_name'] が指すファイルの内容を読み取り、標準出力に出力し、$_FILES[' が指すファイルをコピーします。 ']['tmp_name'] を現在のディレクトリにアップロードします。スクリプトの標準出力は次のとおりです。
array( 'upload' => array( 'name' => 'log.txt', 'type' => 'application/octet-stream', 'tmp_name' => '/tmp/phpLUB59F', 'error' => 0, 'size' => 36, ) ) this is a file for test hello PythonTab!
$_FILES 変数にアップロード配列があることがわかります。これは、アップロードされたファイルの説明情報に対応します。ここで、name と type は、それぞれ名前とタイプを表します。 tmp_name は、アップロードされたファイルを受信した後、そのファイルを一時ファイルに書き込むため、log.txt のファイルの内容を取得できます。ファイルを読んでいます。通常、サーバーは、アップロードされたファイルを受信した後、すぐにファイルを読み取るか、ファイルを別のファイルにコピーする必要があります。これは、tmp_name が指す一時ファイルは、サーバー スクリプトの最後の Upload.php スクリプトの実行後に削除されるためです。行は、一時ファイルをターゲットファイルにコピーすることです。
<br>