
環境は、いつものごとくUbuntu(16.04LTS)です。
そのほかは、OSインストール後にNginxインストールしてPHP7.0を動かせる
ようにしたあとです。
PHPでPhantomJSを稼働させるためのパッケージは、PHP PhantomJsにある。
要件は、「PHP PhantomJS requires PHP 5.3.0 or greater to run.」とあり、PHP7.0なら特に問題なくOK?
PHP PhantomJSは、Composer(PHPの依存関係をチェックしてくれる)を使ってインストールするらしい。
そんで、Composerは、
ubuntuのパッケージ版は、composer (1.0.0~beta2-1)で、
本家(https://getcomposer.org/)にあるものは、1.4.1が最新らしい。
とりあえずパッケージ版を入れる。
1 |
#>sudo apt install composer |
なんか、このパッケージ版だと、composer self-updateが使えないので、問題が起きた時は、パッケージ版をアンインストールして、本家からダウンロードしたものをインストールする必要があるらしい。
それはさておき、PHP PhantomJSのインストール!!(今の所、Ubuntuのパッケージにない)
まず、composer.jsonを以下の内容で「/var/www/」に作る。
//空のファイルをcomposer.jsonの名前で作成。
1 |
#>touch composer.json |
適当なエディタで、以下の内容をコピペ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
{ "require": { "jonnyw/php-phantomjs": "4.*" }, "config": { "bin-dir": "bin" }, "scripts": { "post-install-cmd": [ "PhantomInstaller\\Installer::installPhantomJS" ], "post-update-cmd": [ "PhantomInstaller\\Installer::installPhantomJS" ] } } |
それで、composer.jsonがある場所で
1 |
#> composer install |
(これで、PhantomJSも同時にインストールしてくれるらしい。)
すると、「/var/www/vendor」が作成されて、関係ファイルが一式用意される。
PhantomJsが、PHPで動くかテストして確認する。
まず、以下のようなjavascriptが入ったテスト用のhtmlを[/var/www/html]に作成する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> </head> <body> <div id="content"></div> </body> <script type="text/javascript"> (function () { document.addEventListener("DOMContentLoaded", function() { document.querySelector("#content").innerHTML = 'hello phantomjs'; }); })(); </script> </html> |
次に、「test.php」という以下のファイルを作る。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
//関連ファイルのインクルード require_once( '/var/www/vendor/autoload.php'); //PHP-PhantomJsのClientクラスの呼び出し use JonnyW\PhantomJs\Client; $client = Client::getInstance(); $request = $client->getMessageFactory()->createRequest(); $response = $client->getMessageFactory()->createResponse(); $url = 'file:///var/www/html/test.html'; $request->setUrl($url); //phantomjs実行パスをちゃんと指定する。ないとエラーが出る。 //which phantomjsで探せる。 $client->getEngine()->setPath('/usr/bin/phantomjs'); // phantomjs path $client->send($request, $response); echo $response->getContent(); exit(); |
コマンドで、test.phpを実行。
1 |
#>php /var/www/html/test.php |
ターミナルに「test.html」のソースが出力された時、
の部分が、
のようにhello phantomjsが入っていたらOK!