您好,欢迎访问一九零五行业门户网

关于php如何调用phantomjs给微信小程序分享的问题

这篇文章主要介绍了关于关于php如何调用phantomjs给微信小程序分享的问题,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下
背景cto不让我使用golang所以只好使用php调用phantomjs
packagist上的composer包功能很冗余,我只需要用到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目录结构
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注!
相关推荐:
关于php管道插件 league\pipeline的解析
关于利用vue-laravel前端和后端分离写一个博客的方法
以上就是关于php如何调用phantomjs给微信小程序分享的问题的详细内容。
其它类似信息

推荐信息