ホームページ  >  記事  >  バックエンド開発  >  PHPはCURLを介してファイルをアップロードする機能を実装します

PHPはCURLを介してファイルをアップロードする機能を実装します

不言
不言オリジナル
2018-05-31 16:28:161953ブラウズ

この記事では、主に PHP の CURL を介してファイルをアップロードする機能を紹介し、関連する属性設定と、curl ファイルのアップロード操作を使用した PHP の使用スキルを例の形式で分析します。この記事では、PHP ファイル関数の CURL を介したアップロードの実装について説明しています。参考までに皆さんと共有してください。詳細は次のとおりです:

PHP は CURL を使用してファイルをアップロードします。POST リクエストを送信し、リクエスト内の特定のフィールドをアップロードする必要のあるファイルのフルパスに設定するだけです。 "@" で始まり、CURL を使用してこの変数を POST モードでサーバーに送信すると、対応するアップロード ファイル情報がサーバー側のスーパー グローバル変数 $_FILES から取得できます。

以下に例を示してこのプロセスを示します。

ローカルにテキスト ファイル log.txt があり、そのパスは「/www/test/log.txt」で、内容は次のとおりであるとします。

this is a file for test
hello PythonTab!

このファイルをサーバーにアップロードするには-サイド スクリプト http://www .php.cn/article.html では、次の内容を含む、curl_file.php という名前のローカル スクリプトを作成しました:

<?php
$url = "http://www.php.cn/article.html";
$post_data = array(
"foo" => "bar",
//要上传的本地文件地址
"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 を使用したときは、文字列を送信し、サーバー側で <code>file_get_contents("php//input") を使用して文字列を取得していたことに注意してください。実際、POST は GET と同様にキーと値のペアを送信することもできます。サーバー側にはスーパーグローバル変数$_POSTがあり、$_GETと同様に対応するPOSTデータの値を取得できます。ファイルをアップロードするための変数は $_POST には存在せず、$_FILES に存在することに注意してください。

上記のコードからファイルアップロードリクエストを受信するサーバーのロジックを示すために、upload.php に次のコードを書きました: $post_data,其中upload指向需要发送的文件。这里要注意,我们之前使用POST都是发送一个字符串,然后在服务器端使用file_get_contents("php//input")来获取该字符串,和这里的用法不一样,其实POST也可以像GET一样,发送键值对。在服务端有一个超级全局变量$_POST可以像$_GET一样,获取相应的POST数据的值。需要注意的是,上传文件的变量不是存在着$_POST中,而是在$_FILES中。

为了展示服务端收到上述代码的文件上传请求的逻辑,我们在upload.php中写了以下代码:

<?php
echo var_export($_FILES,true);
echo file_get_contents($_FILES[&#39;upload&#39;][&#39;tmp_name&#39;]);
copy($_FILES[&#39;upload&#39;][&#39;tmp_name&#39;], "./log_copy.txt");
?>

upload.php首先使用var_export$_FILES变量输出到标准输出,然后使用file_get_contents读取$_FILES['upload']['tmp_name']所指文件的内容,并输出到标准输出,然后把$_FILES['upload']['tmp_name']

array(
&#39;upload&#39; =>
array(
&#39;name&#39; => &#39;log.txt&#39;,
&#39;type&#39; => &#39;application/octet-stream&#39;,
&#39;tmp_name&#39; => &#39;/tmp/phpLUB59F&#39;,
&#39;error&#39; => 0,
&#39;size&#39; => 36,
)
)
this is a file for test
hello PythonTab!


upload.php は最初に var_exportを使用します。 > to $_FILES 変数は標準出力に出力し、次に file_get_contents を使用して $_FILES['upload'][ が指すファイルの内容を読み取ります。 'tmp_name'] を標準出力に出力し、 $_FILES['upload']['tmp_name'] が指すファイルを log_copy.txt ファイルにコピーします。現在のディレクトリにあります。スクリプトの標準出力は次のとおりです。

rrreee

$_FILES 変数にアップロード配列があることがわかります。これは、アップロードされたファイルの説明情報に対応します。ここで、name と type は、それぞれ名前とタイプを表します。 tmp_name は、アップロードされたファイルを受信した後、そのファイルを一時ファイルに書き込むため、log.txt のファイルの内容を取得できます。ファイルを読んでいます。通常、サーバーは、アップロードされたファイルを受信した後、すぐにファイルを読み取るか、ファイルを別のファイルにコピーする必要があります。これは、tmp_name が指す一時ファイルは、サーバー スクリプトの最後の Upload.php スクリプトの実行後に削除されるためです。行は、一時ファイルをターゲットファイルにコピーすることです。 関連する推奨事項:

php は、soap を介して .Net の WebService asmx ファイルを呼び出すメソッドを実装します

PHP は、strace を介して障害の原因を特定するメソッドを実装します

🎜🎜🎜🎜 🎜

以上がPHPはCURLを介してファイルをアップロードする機能を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。