最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

php如何调用phantomJS截图

来源:动视网 责编:小采 时间:2020-11-27 13:59:49
文档

php如何调用phantomJS截图

php如何调用phantomJS截图:推荐:《PHP视频教程》php调用phantomJS截图知识储备*unix系统安装phantomjs,权限相关知识基本JavaScript语法知识php exec函数调用REPL phantomjsphantomjs js截图文档 http://javascript.ruanyifeng.com/tool/phant
推荐度:
导读php如何调用phantomJS截图:推荐:《PHP视频教程》php调用phantomJS截图知识储备*unix系统安装phantomjs,权限相关知识基本JavaScript语法知识php exec函数调用REPL phantomjsphantomjs js截图文档 http://javascript.ruanyifeng.com/tool/phant


推荐:《PHP视频教程》

php调用phantomJS截图

  • 知识储备

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

    基本JavaScript语法知识

    php exec函数调用REPL phantomjs

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

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

  • <?php
    namespace 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-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截图

    php如何调用phantomJS截图:推荐:《PHP视频教程》php调用phantomJS截图知识储备*unix系统安装phantomjs,权限相关知识基本JavaScript语法知识php exec函数调用REPL phantomjsphantomjs js截图文档 http://javascript.ruanyifeng.com/tool/phant
    推荐度:
    标签: 截屏 截图 php
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top