>  기사  >  백엔드 개발  >  PHP는 phantomjs를 호출하여 WeChat 애플릿과 공유합니다.

PHP는 phantomjs를 호출하여 WeChat 애플릿과 공유합니다.

不言
不言원래의
2018-07-06 16:41:141810검색

이 글은 주로 WeChat 애플릿과 공유하기 위해 PHP에서 phantomjs를 호출하는 것에 대해 소개합니다. 이제는 필요한 친구들과 공유할 수 있습니다.

knowledge Reserve# 🎜 🎜#

  • *유닉스 시스템 설치 phantomjs, 권한 관련 지식

  • 기본 JavaScript 구문 지식

    #🎜 🎜 #

  • php
  • phantomjs

    exec函数调用REPL

  • phantomjs js 스크린샷 문서 http://javascript.ruanyifeng....#🎜🎜 #
  • 코드(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(&#39;@runtime&#39;);
        }
    
        /**
         * 截图并上传
         * @param string $url
         * @param string $filename
         * @return string
         * @throws BizException
         */
        public function screenShotThenSaveToOss(string $url, string $filename = &#39;temp.jpg&#39;)
        {
            //输出图片的路径
            $outputFilePath = "{$this->temp_dir}/$filename";
            //执行的phantomjs命令
            //phantomjs 可执行文件必须是 绝对路径 否则导致 exec 函数返回值127错误
            $cmd = "\usr\local\bin\phantomjs {$this->js_path} &#39;$url&#39; &#39;$outputFilePath&#39;";
            //捕捉不到phantomjs命令输出结果
            exec($cmd, $output);
            //检查截图文件是否存在
            $isShotImgaeExist = file_exists($outputFilePath);
            if (!$isShotImgaeExist) {
                throw new BizException(0, &#39;phantomjs截图失败&#39;, 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 = &#39;raw_file_name&#39;;
    
            $file = new \CURLFile($screenshot_path, &#39;image/jpeg&#39;, &#39;file&#39;);
            $tokenArray = $this->getOssPolicyToken(&#39;fetch&#39;);
            $url = $tokenArray->host;
            $postData = [
                &#39;key&#39; => "{$tokenArray->dir}/$ossKey",
                &#39;policy&#39; => $tokenArray->policy,
                &#39;OSSAccessKeyId&#39; => $tokenArray->accessid,
                &#39;success_action_status&#39; => &#39;200&#39;,
                &#39;signature&#39; => $tokenArray->signature,
                &#39;callback&#39; => $tokenArray->callback,
                &#39;file&#39; => $file
            ];
            $ch = curl_init();
            //$data = array(&#39;name&#39; => &#39;Foo&#39;, &#39;file&#39; => &#39;@/home/user/test.png&#39;);
            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 &#39;&#39;;
            } else {
                return $res->data->url;
            }
        }
    
        /**
         * 调用管理后台阿里云oss token接口
         * @param null $url
         * @return array
         */
        public function getOssPolicyToken($url = null)
        {
            $url = \Yii::$app->params[&#39;oss_screen_shot_token_api&#39;];
            $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 자바스크립트 스크립트 콘텐츠

"use strict";
var system = require(&#39;system&#39;);
var webPage = require(&#39;webpage&#39;);
var page = webPage.create();
//设置phantomjs的浏览器user-agent
page.settings.userAgent = &#39;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&#39;;

//获取php exec 函数的命令行参数
if (system.args.length !== 3) {
    console.log(system.args);
    console.log(&#39;参数错误&#39;);
    console.log(&#39;第2个参数为url地址 第3个参数为截图文件名称&#39;);
    phantom.exit(1);
}

//命令行 截图网址参数
var url = system.args[1];
//图片输出路径
var filePath = system.args[2];
console.log(&#39;-------&#39;);
console.log(url);
console.log(&#39;-------&#39;);
console.log(filePath);
console.log(&#39;-------&#39;);

//设置浏览器视口
page.viewportSize = {width: 480, height: 960};
//打开网址
page.open(url, function start(status) {
    //1000ms之后开始截图
    setTimeout(function () {
        //截图格式为jpg 80%的图片质量
        page.render(filePath, {format: &#39;jpg&#39;, quality: &#39;80&#39;});
        console.log(&#39;success&#39;);
        //退出phantomjs 避免phantomjs导致内存泄露
        phantom.exit();
    }, 1000);
});

php는 phantomjs 디렉토리 구조를 호출합니다# 🎜 🎜#

위 내용은 모두의 학습에 도움이 되기를 바라는 내용입니다. 중국사이트!

PHP는 phantomjs를 호출하여 WeChat 애플릿과 공유합니다.관련 권장사항:

Laravel WeChat 애플릿은 매개변수를 사용하여 사용자 세부정보와 애플릿 코드 확장 분석을 얻습니다

#🎜 🎜## 🎜🎜#

gitbash PHP 실행 출력 중국어 무작위 코딩 솔루션

php 빠른 정렬 코드# 🎜🎜#

위 내용은 PHP는 phantomjs를 호출하여 WeChat 애플릿과 공유합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.