内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

php怎樣調用phantomJS截圖

這篇文章將為大家詳細講解有關php怎樣調用phantomJS截圖,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

成都創(chuàng)新互聯(lián)從2013年成立,是專業(yè)互聯(lián)網技術服務公司,擁有項目成都做網站、成都網站建設網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元鹽池做網站,已為上家服務,為鹽池各地企業(yè)和個人服務,聯(lián)系電話:18982081108

php調用phantomJS截圖

  • 知識儲備

*unix系統(tǒng)安裝phantomjs,權限相關知識

基本JavaScript語法知識

php exec函數(shù)調用REPL phantomjs

phantomjs js截圖文檔 http://javascript.ruanyifeng.com/tool/phantomjs.html

  • 代碼(php 代碼環(huán)境為yii2框架)

<?php
namespace weapp\library\phantomjs;
use weapp\library\BizException;
class ScreenShot
{
    /** @var string 獲取phantomjs 參數(shù)中 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";
        //執(zhí)行的phantomjs命令
        //phantomjs 可執(zhí)行文件必須是 絕對路徑 否則導致 exec 函數(shù)返回值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 函數(shù)的命令行參數(shù)
if (system.args.length !== 3) {
    console.log(system.args);
    console.log('參數(shù)錯誤');
    console.log('第2個參數(shù)為url地址 第3個參數(shù)為截圖文件名稱');
    phantom.exit(1);
}
//命令行 截圖網址參數(shù)
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截圖
本文網址:http://www.rwnh.cn/article32/pgsosc.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供營銷型網站建設、標簽優(yōu)化、網站維護、外貿網站建設Google、網站內鏈

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都網站建設公司
南充市| 永川市| 德格县| 阿合奇县| 呼图壁县| 三亚市| 淮滨县| 资源县| 商洛市| 平定县| 嘉定区| 青铜峡市| 常熟市| 石河子市| 西贡区| 长沙市| 云霄县| 札达县| 手机| 昌吉市| 宜城市| 贞丰县| 板桥市| 牙克石市| 贵溪市| 杭锦旗| 确山县| 乌什县| 临潭县| 广安市| 新余市| 常州市| 新竹县| 西充县| 松潘县| 洞口县| 南安市| 固镇县| 林甸县| 印江| 达日县|