[Jie Ge が簡単に PHP について語る] 第 16 弾 --- ファイル転送ツール cURL の高度な応用
上記の内容の続きを見てみましょう。 上記は、curl In の使い方を簡単に紹介したものです。この記事では、curl の高度なアプリケーションを 4 つのステップで説明します。
リクエストの関連情報を取得するには、curl の実行が完了した後、curl_getinfo() を使用します。
- // 新しい cURL リソースを作成します
- $ch =curl_init("http://www.lampbrother.net");
-
- // URL と対応するオプションを設定します
- curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
- // エラーがあるかどうかを確認します
- if(!curl_errno($ch))
- {
- $info =curl_getinfo($ch);
- var_dump($info);
- }
- // URL を取得してブラウザに渡します
- $html =curl_exec($ch);
- //cURL リソースを閉じ、システム リソースを解放します
- curl_close($ch);
- ?>
打印出来的内容为:
array
'url' => string 'http://www.lampbrother.net'
(length=26)
'content_type' =>
null
'http_code' => int
0
'header_size' => int
0
'request_size' => int
0
'filetime' => int
0
'ssl_verify_result' => int
0
'redirect_count' => int
0
'total_time' => float
0
'namelookup_time' => float
0
'connect_time' => float
0
'pretransfer_time' => float
0
'size_upload' => float
0
'size_download' => float
0
'speed_download' => float
0
'speed_upload' => float
0
'download_content_length' => float
-1
'upload_content_length' => float
-1
'starttransfer_time' => float
0
'redirect_time' => float
0
'certinfo' =>array
空
'redirect_url' => 文字列
'' (長さ=0)
返された配列には次の情報が含まれます:
"url" //リソースネットワークアドレス
"content_type" //コンテンツのエンコーディング
"http_code" //HTTP ステータス コード
“header_size” //ヘッダーサイズ
"request_size" //リクエストのサイズ
"filetime" //ファイル作成時間
"ssl_verify_result" //SSL 検証結果
“redirect_count” //ジャンプテクノロジー
“total_time” //かかった合計時間
“namelookup_time” //DNS クエリに時間がかかります
“connect_time” //接続待機時間
“pretransfer_time” // 転送前の準備時間
"size_upload" //アップロードされたデータのサイズ
“size_download” //ダウンロードしたデータのサイズ
"speed_download" //ダウンロード速度
"speed_upload" //アップロード速度
"download_content_length" //ダウンロード コンテンツの長さ
“upload_content_length” //アップロードされたコンテンツの長さ
"starttransfer_time" //転送開始時間
"redirect_time" //リダイレクト時間の消費
curl を使用して、POST モードでデータを送信するブラウザをシミュレートすることもできます:
まず、POST データを印刷できるページを作成しましょう:
- var_dump($_POST);
- ?>
POST データを送信するブラウザをシミュレートする新しいページを作成します:
- $url = "http://localhost/post.php";
- $post_data = 配列(
- "著者"=>"李潔",
- "タイトル"=>"李傑が PHP について語る"
- );
- //初期化、新しい cURL リソースを作成します
- $ch =curl_init();
- //URL と対応するオプションを設定します
- 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);
- //URL を取得してブラウザに渡します
- $out =curl_exec( $ch );
- //cURL リソースを閉じ、システム リソースを解放します
- curl_close($ch);
- echo $output ;
- ?>
印刷結果:
配列
'作成者' => 文字列
'李潔' (長さ=4)
'タイトル' => 文字列
'Jie Ge が PHP について語ります' (length=11)
強力なカールが投稿データの受け渡しに役立っていることがわかります。
1. 投稿データを post.php ページに渡します
2.post.php ページには、
ページに出力された投稿データが表示されます
3.curlはpost.phpで受け取って出力した投稿データを取得してページ上に出力します!
post を使用してデータを転送できるだけでなく、ファイルをアップロードすることもできます。方法は基本的に同じです。
curl.php
- $url = "http://localhost/upload.php";
- $post_data = array(
- "title"=> ;"すごい!!!",
- "pic"=>"@d: リー・ウェンカイの美しいヌード写真.jpg"
- );
-
- //初期化、新しい cURL リソースを作成します
- $ch =curl_init();
-
-
- //URL と対応するオプションを設定します
- 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);
-
-
- // URL を取得してブラウザに渡します
- $out =curl_exec($ch);
-
-
- //cURL リソースを閉じ、システム リソースを解放します
- curl_close($ch);
- echo $output;
- ?>
upload.php
- var_dump($_FILES);
- ?>
返される値:
配列
'pic' =>配列
'name' => 文字列 'Li Wenkai の美しいヌード写真.jpg'
(長さ=18)
'type' => 文字列 'application/octet-stream'
(長さ=24)
'tmp_name' => 文字列
'F:LAMPBrotherEnvironmentalwamp_32tmpphp9A73.tmp' (長さ=52)
'エラー' => int 0
'サイズ' => int 0
- $post_data = array(
- "title"=>"Amazing!!!",
- "pic"=>"@d: 李文凱の美しいヌード写真.jpg "
- );
アップロードする際の注意点は、アップロードするファイル名の前に@記号を付ける必要があることです!
cURL バッチ処理:
cURL には、複数の URL 接続を同期または非同期で処理できる高度なアプリケーションであるバッチ ハンドラーもあります: 。
- // cURL リソースのペアを作成します
- $ch1 =curl_init();
- $ch2 =curl_init ( );
- // URL と対応するオプションを設定します
- curl_setopt($ch1, CURLOPT_URL, "http://www.li-jie.me/") ;
- curl_setopt($ch1, CURLOPT_HEADER, 0);
- curl_setopt($ch2, CURLOPT_URL, "http://www.lampbrother.net/");
- curl_setopt($ch2, CURLOPT_HEADER, 0);
- // バッチ cURL ハンドルを作成します
- $mh =curl_multi_init();
- //ハンドルを 2 つ追加します
- curl_multi_add_handle($mh,$ch1);
- curl_multi_add_handle($mh,$ch2);
- $running=null;
- //実行バッチハンドル
- do {
- usleep(10000);
- curl_multi_exec($mh,$ running);
- } while ($running > 0);
- // すべてのハンドルを閉じる
- curl_multi_remove_handle($mh, $ch1) ;
- curl_multi_remove_handle($mh, $ch2);
- curl_multi_close($mh);
- ?>
$running は、http://www.li-jie.me と http://www.lampbrother.net からページ コンテンツを収集し、複数の URL のバッチ処理を実装します。
ご覧のとおり、将来的には、コレクション Web サイトでは file_get_contents と fopen を廃止する必要があります。Web アプリケーションに多くの色を追加する強力な cURL を使用してください。