[php] phpでjavascriptをコマンドレベルで実行できるPHP PhantomJSをインストール
目次
phpでjavascriptをコマンドレベルで実行できるPHP PhantomJSをインストール
cronを使用してphpのコマンドレベルでjavascriptを実行しようとしたのだが、
javascriptは基本的にブラウザで実行されるためサーバサイドで実行できない
PhantomJSというライブラリがあってコマンドレベルでjavascriptを実行できるが、
PhantomJSをPHPで使用できる「PHP PhantomJS」をCentOSにインストール
インストール
composerを使用してインストールするので、composer環境がない場合はcomposerを事前に準備しておくこと
composer.jsonに以下のコードを追記
{ "scripts": { "post-install-cmd": [ "PhantomInstaller\\Installer::installPhantomJS" ], "post-update-cmd": [ "PhantomInstaller\\Installer::installPhantomJS" ] }, "require": { "jonnyw/php-phantomjs": "4.*" } }
composerを使用してインストール
php composer.phar require "jonnyw/php-phantomjs:4.*"
使い方:
他のパッケージ同様、vender/autoload.phpをrequireすれば良い
サンプル(webページの画面キャプチャをjpegで保存):
getMessageFactory()->createCaptureRequest( $web_url, // url 'GET', // method 3000); // timeout(second) $client->getEngine()->addOption('--proxy=host:port'); $request->setQuality(75); // default 75 $request->setCaptureDimensions($viewport_width, $viewport_height); // キャプチャ範囲 $request->setFormat('jpeg'); // pdf, png, jpeg, bmp, ppm, gif $request->setOutputFile($output_file); $request->setViewportSize($viewport_width, $viewport_height); $response = $client->getMessageFactory()->createResponse(); $client->send($request, $response); header('Content-type: image/jpeg'); readfile($output_file); } ?>
注意点:
インストールが成功したにもかかわらず
"Error when executing PhantomJs procedure "default" - File does not exist or is not executable: bin/phantomjs"
とphantomjsが見つからないというエラーが発生した場合は
$client->getEngine()->setPath('/usr/bin/phantomjs'); // phantomjs path
とphantomjsのパスを通してあげると動作する
/usr/bin/にphantomjsがあることが前提。