国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

php調(diào)用phantomjs給微信小程序分享

LeexMuller / 2079人閱讀

摘要:背景之前已經(jīng)使用寫過調(diào)用的文章不讓我使用所以只好使用調(diào)用上的包功能很冗余我只需要用到的截圖功能知識(shí)儲(chǔ)備系統(tǒng)安裝權(quán)限相關(guān)知識(shí)基本語法知識(shí)函數(shù)調(diào)用截圖文檔代碼代碼環(huán)境為框架獲取參數(shù)中文件的決定路徑獲取有權(quán)限的臨時(shí)文件目錄獲取有權(quán)限的臨時(shí)文件目

背景

之前已經(jīng)使用golang寫過調(diào)用phantomjs的文章

CTO不讓我使用golang所以只好使用php調(diào)用phantomjs

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

知識(shí)儲(chǔ)備

*unix系統(tǒng)安裝phantomjs,權(quán)限相關(guān)知識(shí)

基本JavaScript語法知識(shí)

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

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

代碼(php 代碼環(huán)境為yii2框架)
js_path = "{$dir}/script.js";
        /** @var bool|string 獲取php 有777權(quán)限的臨時(shí)文件目錄 */
        $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í)行文件必須是 絕對(duì)路徑 否則導(dǎo)致 exec 函數(shù)返回值127錯(cuò)誤
        $cmd = "usrlocalinphantomjs {$this->js_path} "$url" "$outputFilePath"";
        //捕捉不到phantomjs命令輸出結(jié)果
        exec($cmd, $output);
        //檢查截圖文件是否存在
        $isShotImgaeExist = file_exists($outputFilePath);
        if (!$isShotImgaeExist) {
            throw new BizException(0, "phantomjs截圖失敗", BizException::SELF_DEFINE);
        }
        //保存截圖到oss
        $result = $this->postScreenShotImageToOss($outputFilePath);
        //刪除臨時(shí)文件夾的截圖圖片
        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;
        }
    }

    /**
     * 調(diào)用管理后臺(tái)阿里云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腳本內(nèi)容
"use strict";
var system = require("system");
var webPage = require("webpage");
var page = webPage.create();
//設(shè)置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ù)錯(cuò)誤");
    console.log("第2個(gè)參數(shù)為url地址 第3個(gè)參數(shù)為截圖文件名稱");
    phantom.exit(1);
}

//命令行 截圖網(wǎng)址參數(shù)
var url = system.args[1];
//圖片輸出路徑
var filePath = system.args[2];
console.log("-------");
console.log(url);
console.log("-------");
console.log(filePath);
console.log("-------");

//設(shè)置瀏覽器視口
page.viewportSize = {width: 480, height: 960};
//打開網(wǎng)址
page.open(url, function start(status) {
    //1000ms之后開始截圖
    setTimeout(function () {
        //截圖格式為jpg 80%的圖片質(zhì)量
        page.render(filePath, {format: "jpg", quality: "80"});
        console.log("success");
        //退出phantomjs 避免phantomjs導(dǎo)致內(nèi)存泄露
        phantom.exit();
    }, 1000);
});
php調(diào)用phantomjs目錄結(jié)構(gòu)

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/28894.html

相關(guān)文章

  • php調(diào)用phantomjs給微信小程序分享

    摘要:背景之前已經(jīng)使用寫過調(diào)用的文章不讓我使用所以只好使用調(diào)用上的包功能很冗余我只需要用到的截圖功能知識(shí)儲(chǔ)備系統(tǒng)安裝權(quán)限相關(guān)知識(shí)基本語法知識(shí)函數(shù)調(diào)用截圖文檔代碼代碼環(huán)境為框架獲取參數(shù)中文件的決定路徑獲取有權(quán)限的臨時(shí)文件目錄獲取有權(quán)限的臨時(shí)文件目 背景 之前已經(jīng)使用golang寫過調(diào)用phantomjs的文章 CTO不讓我使用golang所以只好使用php調(diào)用phantomjs packa...

    Fourierr 評(píng)論0 收藏0
  • Laravel 生成小程序圖文海報(bào)最佳方案之一

    摘要:微信小程序官方并未提供分享到朋友圈的方法,所以目前基本整個(gè)行業(yè)都是使用生成圖文海報(bào)發(fā)到朋友圈,然后識(shí)別太陽碼進(jìn)入到小程序。背景圖片和微信頭像合成后清晰度不夠。 微信小程序官方并未提供分享到朋友圈的方法,所以目前基本整個(gè)行業(yè)都是使用生成圖文海報(bào)發(fā)到朋友圈,然后識(shí)別太陽碼進(jìn)入到小程序。 通過谷歌或者百度有很多同學(xué)已經(jīng)提供了一些解決方案,但是在我們使用后效果并不是很理想,主要體現(xiàn)在以下方面:...

    piglei 評(píng)論0 收藏0
  • balabala: dom 轉(zhuǎn)圖片場(chǎng)景和技術(shù)方案

    摘要:有一天張大胖接到了產(chǎn)品的一個(gè)需求,需求中涉及到了小程序和兩端。會(huì)后大胖對(duì)自己所知道的可以把動(dòng)態(tài)網(wǎng)頁轉(zhuǎn)成圖片的方案詳細(xì)的對(duì)比了下相信大家都知道這個(gè),這是一個(gè)瀏覽器端的庫(kù),可以把結(jié)構(gòu)轉(zhuǎn)成圖片。接下來大胖就用了最后的方案,去實(shí)施。 有一天張大胖接到了產(chǎn)品的一個(gè)需求,需求中涉及到了小程序 和 app 兩端。 主要是基于微信的一個(gè)活動(dòng),需要在 app 和小程序端生成帶二維碼的圖片,生成圖片是為了...

    vpants 評(píng)論0 收藏0
  • balabala: dom 轉(zhuǎn)圖片場(chǎng)景和技術(shù)方案

    摘要:有一天張大胖接到了產(chǎn)品的一個(gè)需求,需求中涉及到了小程序和兩端。會(huì)后大胖對(duì)自己所知道的可以把動(dòng)態(tài)網(wǎng)頁轉(zhuǎn)成圖片的方案詳細(xì)的對(duì)比了下相信大家都知道這個(gè),這是一個(gè)瀏覽器端的庫(kù),可以把結(jié)構(gòu)轉(zhuǎn)成圖片。接下來大胖就用了最后的方案,去實(shí)施。 有一天張大胖接到了產(chǎn)品的一個(gè)需求,需求中涉及到了小程序 和 app 兩端。 主要是基于微信的一個(gè)活動(dòng),需要在 app 和小程序端生成帶二維碼的圖片,生成圖片是為了...

    legendaryedu 評(píng)論0 收藏0
  • balabala: dom 轉(zhuǎn)圖片場(chǎng)景和技術(shù)方案

    摘要:有一天張大胖接到了產(chǎn)品的一個(gè)需求,需求中涉及到了小程序和兩端。會(huì)后大胖對(duì)自己所知道的可以把動(dòng)態(tài)網(wǎng)頁轉(zhuǎn)成圖片的方案詳細(xì)的對(duì)比了下相信大家都知道這個(gè),這是一個(gè)瀏覽器端的庫(kù),可以把結(jié)構(gòu)轉(zhuǎn)成圖片。接下來大胖就用了最后的方案,去實(shí)施。 有一天張大胖接到了產(chǎn)品的一個(gè)需求,需求中涉及到了小程序 和 app 兩端。 主要是基于微信的一個(gè)活動(dòng),需要在 app 和小程序端生成帶二維碼的圖片,生成圖片是為了...

    whatsns 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

LeexMuller

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<