[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があることが前提。