質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

395閲覧

複数のサイトにPOSTデータを送信し非同期でHTMLを取得する方法

akitasoran

総合スコア20

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2018/02/06 08:40

編集2018/02/06 15:51

複数のサイトにPOSTデータを送信し非同期でHTMLを取得するプログラムが書けません。

POSTデータなしで複数のURLからHTMLを非同期で取得することと、POSTデータを送信してサイトからHTMLを取得すること(1つのみ)はできました。

以下のサイトのプログラムを組み合わせればできるかと思い、POSTがあるときとないときをif文で分ければ良いと思ったのですが、上手くできませんでした。

回答よろしくお願い致します。

[PHP]file_get_contenst()で複数サイトのhtmlを非同期・高速に取得する | nanoblog
http://nanoappli.com/blog/archives/5743

file_get_contentsでPOSTデータ送信 - Qiita
https://qiita.com/songfei1983/items/fad52c87f84999fb0a45

回答を受けていま現時点でのプログラムを以下に追記しました。

質問をしてからプログラムを修正していたら非同期で取得することはなんとかできましたのですが、以下のプログラムを実行するとPOSTで取得したHTMLが画面に表示されてしまします。

元々の質問からは外れてしまいましたが、回答よろしくお願い致します。

lang

1//取得したいページのURL 2$url = array(); 3$url[] = ''; 4$url[] = ''; 5 6//POSTするkey 7$postName = array(); 8$postName[] = ''; 9$postName[] = ''; 10 11//POSTする値 12$postValue = array(); 13$postValue[] = ''; 14$postValue[] = ''; 15 16$htmlText = getHtml( $url, $postName, $postValue); 17 18if (!function_exists('getHtml')){ 19 function getHtml( $urlList, $postName, $postValue ) { 20 $resList = array(); 21 22 $handle = curl_multi_init(); 23 24 for($n = 0; $n < count($urlList); $n++){ 25 $res = curl_init( $urlList[$n] ); 26 27 if (!empty($postName[$n])){ 28 $postData = array( $postName[$n] => $postValue[$n] ); 29 curl_setopt( $res, CURLOPT_POST, TRUE); 30 curl_setopt( $res, CURLOPT_POSTFIELDS, http_build_query($postData)); 31 }else{ 32 curl_setopt( $res, CURLOPT_RETURNTRANSFER, TRUE ); 33 } 34 35 curl_multi_add_handle( $handle, $res ); 36 37 $resList[] = $res; 38 } 39 40 do { 41 curl_multi_exec( $handle, $isRunning ); 42 } while ( $isRunning ); 43 44 $htmlTextList = array(); 45 foreach ( $resList as $res ) { 46 $htmlTextList[] = curl_multi_getcontent( $res ); 47 } 48 49 foreach ( $resList as $res ) { 50 curl_multi_remove_handle( $handle, $res ); 51 curl_close( $res ); 52 } 53 54 curl_multi_close( $handle ); 55 56 return $htmlTextList; 57 } 58} 59add_shortcode('getHtml', 'getHtml');

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kei344

2018/02/06 10:24

ご自身で試されたコードを質問文に追記し、「何」が「どのように」わからないのか、コードのどの部分で詰まっているのかなどを具体的に追記されたほうが回答が望めると思います。
guest

回答2

0

mpyw/co
コードも書いてないんで、ざっくり回答ですが、v7.0- ならこれ使うといろいろ制御できて面白かったです。

投稿2018/02/06 14:43

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

自己解決

PHP

1curl_setopt( $res, CURLOPT_RETURNTRANSFER, TRUE );

これを記述すれば出力されないんですね。

またわからないところが出てきましたが、とりあえず今回疑問だった分は解決できました。

ありがとうございました。

投稿2018/02/06 18:03

akitasoran

総合スコア20

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問