这篇文章主要介绍了关于php调用phantomjs给微信小程序分享,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
知识储备*unix系统安装phantomjs,权限相关知识
基本javascript语法知识
php exec函数调用repl phantomjs
phantomjs js截图文档 http://javascript.ruanyifeng....
代码(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目录结构
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注!
相关推荐:
laravel微信小程序获取用户详细信息及带参数小程序码扩展的分析
gitbash php执行输出中文乱编解决方式
php的快速排序的代码
以上就是php调用phantomjs给微信小程序分享的详细内容。