栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > PHP

php如何调用phantomJS截图

PHP 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

php如何调用phantomJS截图

推荐:《PHP视频教程》

php调用phantomJS截图

  • 知识储备

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

基本Javascript语法知识

php exec函数调用REPL phantomjs

phantomjs js截图文档 http://javascript.ruanyifeng.com/tool/phantomjs.html

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

js_path = "{$dir}/script.js";
 
 $this->temp_dir = Yii::getAlias('@runtime');
    }
    
    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;
    }
    
    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;
 }
    }
    
    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-agent
page.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截图的详细内容,更多请关注考高分网其它相关文章!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/262643.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号