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

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

内容导读

收集整理的这篇技术教程文章主要介绍了关于php如何调用phantomjs给微信小程序分享的问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4737字,纯文字阅读大概需要7分钟

内容图文

这篇文章主要介绍了关于关于php如何调用phantomjs给微信小程序分享的问题,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下

背景

  • CTO不让我使用golang所以只好使用php调用phantomjs

  • packagist上的composer包功能很冗余,我只需要用到phantomjs的截图功能

知识储备

  • *unix系统安装phantomjs,权限相关知识

  • 基本JavaScript语法知识

  • php exec函数调用REPL phantomjs

  • phantomjs js截图文档 http://javascript.ruanyifeng....

代码(php 代码环境为yii2框架)

<?phpnamespace weapplibraryphantomjs;use weapplibraryBizException;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 = "usrlocalbinphantomjs {$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中文网!

相关推荐:

以上就是关于php如何调用phantomjs给微信小程序分享的问题的详细内容,更多请关注Gxl网其它相关文章!

内容总结

以上是为您收集整理的关于php如何调用phantomjs给微信小程序分享的问题全部内容,希望文章能够帮你解决关于php如何调用phantomjs给微信小程序分享的问题所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。

内容备注

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。


本文关键词:

联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com