這篇文章將為大家詳細講解有關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)