アクセス時のリアルタイムなページ情報が取得できるようなものをPHPで実装できないかと考えています。
例えばブラウザで見ているような、JavaScriptやPHPなどでページが改変された後のHTML要素を取得するという操作が行えたら便利だと思ったので考えたのですが、PHPではどのように実装すれば良いのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
JavaScriptやPHPなどでページが改変された後のHTML要素
この2つをひとまとまりにしてはいけません.実行されるタイミングが全く違います.以下ではPHPの一般的な動作方式であるphp-fpmの場合の動きについて説明します.
(Apacheの場合はmod_phpというこれとは違う動作モードがとられることが多いですが,全体としてみた流れはそんなに変わりません.FastCGIというプロトコルで別のプロセスに実行を任せるか,Apacheプロセス自分自身でPHPを実行するかの違いです.)
- Webブラウザ(Chrome,Firefoxなど)がWebサーバに対し,HTTPリクエストを送信する.
- WebサーバがHTTPリクエストのURLを読み取り,どのファイルに対する要求かを判断する.ここではURLの末尾が「*.php」なものであったとする.
- Webサーバがphp-fpm(PHP FastCGI Process Manager)に対して,実行すべきPHPコードが書かれたファイルへのパスなどの情報を含むFastCGIリクエストを送信する.
- FastCGIリクエストを受けたphp-fpmがPHPを実行し,HTTPレスポンスを生成する.
- php-fpmがWebサーバに対し,HTTPレスポンスを載せたFastCGIレスポンスを返す.
- WebサーバがWebブラウザに対し,HTTPレスポンスを返す.
- WebブラウザがHTMLに含まれるJavaScriptを実行する.
1,7はブラウザ側の話で2〜6はサーバ側の話です.つまりPHPとJavaScriptでは実行される場所が全く異なります.例えばWebブラウザ側からはPHPのソースを覗き見ることは絶対にできません.PHPによって生成されたHTMLしか見えません.
さて,これを踏まえると「PHPで生成される部分」に関してはごく普通にHTTPリクエストを送るだけで反映されることがわかります.
php
1$html = file_get_contents('http://example.com/example.php');
問題は「JavaScriptで改変される部分」ですよね.これはPHPだけの力ではまともに対応できません.Selenium WebDriverという,ChromeやFirefoxといった主要なブラウザの自動操作に対応しているJava製のツールに頼る必要があります.更にこれをPHPから取り扱うためのライブラリも存在しており,それを用いることによって目的を実現できます.
しかしこれに関してググってもそれほど整理された分かりやすい情報があるわけでもなく,断片的な情報しか見つからないケースが多いと思います.そのため,自分でライブラリのソースコードや英語のドキュメントを読める人じゃないとちょっとつらいかもしれません.
…とはいうものの,比較的php-webdriverのソースコードは読みやすい部類だと思います.ここの階層にあるファイルは全部,実装が分離されて「表面上どんな動きをするのか」だけを示したインターフェース定義ファイルが羅列されており,この部分が説明書の役割を果たしています.**「このメソッドはどんな引数を受け取って,何を返すのか」**というのがひと目で分かるようになってます.
投稿2016/04/01 17:35
編集2016/04/01 17:46総合スコア5223
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/04/01 18:57