推荐:《PHP视频教程》
PHP调用phantomJs截图
知识储备
*unix系统安装phantomJs,权限相关知识
基本JavaScript语法知识
PHP exec函数调用REPL phantomJs
phantomJs Js截图文档 http://JavaScript.ruanyifeng.com/tool/phantomJs.HTML
代码(PHP 代码环境为yii2框架)
<?PHPnamespace weapp\library\phantomJs;use weapp\library\BizException;class ScreenShot{ /** @var string 获取phantomJs 参数中 Js文件的决定路径 */ private $Js_path; /** @var bool|string 获取PHP 有777权限的临时文件目录 */ private $temp_dir; function __construct() { $dir = __DIR__; $this->Js_path = "{$dir}/script.Js"; /** @var bool|string 获取PHP 有777权限的临时文件目录 */ $this->temp_dir = \Yii::getAlias('@runtime'); } /** * 截图并上传 * @param string $url * @param string $filename * @return string * @throws BizException */ public function screenShotthenSavetoOss(string $url, string $filename = 'temp.jpg') { //输出图片的路径 $outputfilePath = "{$this->temp_dir}/$filename"; //执行的phantomJs命令 //phantomJs 可执行文件必须是 绝对路径 否则导致 exec 函数返回值127错误 $cmd = "\usr\local\bin\phantomJs {$this->Js_path} '$url' '$outputfilePath'"; //捕捉不到phantomJs命令输出结果 exec($cmd, $output); //检查截图文件是否存在 $isShotimgaeExist = file_exists($outputfilePath); if (!$isShotimgaeExist) { throw new BizException(0, 'phantomJs截图失败', BizException::SELF_define); } //保存截图到oss $result = $this->postscreenShotimageToOss($outputfilePath); //删除临时文件夹的截图图片 unlink($outputfilePath); return $result; } /** * 上传截图到阿里云直传oss * @param string $screenshot_path * @return string */ public function postscreenShotimageToOss(string $screenshot_path): string { $ossKey = 'raw_file_name'; $file = new \CURLfile($screenshot_path, 'image/jpeg', 'file'); $tokenArray = $this->getosspolicyToken('fetch'); $url = $tokenArray->host; $postData = [ 'key' => "{$tokenArray->dir}/$ossKey", 'policy' => $tokenArray->policy, 'OSSAccessKeyID' => $tokenArray->accessID, 'success_action_status' => '200', 'signature' => $tokenArray->signature, 'callback' => $tokenArray->callback, 'file' => $file ]; $ch = curl_init(); //$data = array('name' => 'Foo', 'file' => '@/home/user/test.png'); curl_setopt($ch, CURLOPT_URL, $url); // disable SSL verification curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_SAFE_UPLOAD, true); // required as of PHP 5.6.0 curl_setopt($ch, CURLOPT_POSTFIELDS, $postData); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 20); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 20); //curl_setopt($ch, CURLOPT_httpheader, ["Content-Type: $mime_type"]); $res = curl_exec($ch); $res = Json_decode($res); curl_close($ch); if (empty($res) || $res->code != 0) { return ''; } else { return $res->data->url; } } /** * 调用管理后台阿里云oss token接口 * @param null $url * @return array */ public function getosspolicyToken($url = null) { $url = \Yii::$app->params['oss_screen_shot_token_API']; $ch = curl_init(); // disable SSL verification curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // Will return the response, if false it print the response curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // Set the url curl_setopt($ch, CURLOPT_URL, $url); // Execute $result = curl_exec($ch); // Closing curl_close($ch); $res = Json_decode($result); if (empty($res) || $res->code != 0) { return []; } else { return $res->data; } }}phantomJs JavaScript脚本内容"use strict";var system = require('system');var webPage = require('webpage');var page = webPage.create();//设置phantomJs的浏览器user-agentpage.settings.userAgent = 'Mozilla/5.0 (iPhone; cpu iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1';//获取PHP exec 函数的命令行参数if (system.args.length !== 3) { console.log(system.args); console.log('参数错误'); console.log('第2个参数为URL地址 第3个参数为截图文件名称'); phantom.exit(1);}//命令行 截图网址参数var url = system.args[1];//图片输出路径var filePath = system.args[2];console.log('-------');console.log(url);console.log('-------');console.log(filePath);console.log('-------');//设置浏览器视口page.vIEwportSize = {wIDth: 480, height: 960};//打开网址page.open(url, function start(status) { //1000ms之后开始截图 setTimeout(function () { //截图格式为jpg 80%的图片质量 page.render(filePath, {format: 'jpg', quality: '80'}); console.log('success'); //退出phantomJs 避免phantomJs导致内存泄露 phantom.exit(); }, 1000);});总结
以上是内存溢出为你收集整理的php如何调用phantomJS截图全部内容,希望文章能够帮你解决php如何调用phantomJS截图所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)