這篇文章主要介紹了關於php如何呼叫phantomjs給微信小程式分享的問題,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下
背景
CTO不讓我使用golang所以只好用php呼叫phantomjs
packagist上的composer套件功能很冗餘,我只需要用到phantomjs的截圖功能
知識儲備
*unix系統安裝phantomjs,權限相關知識
基本JavaScript語法知識
php
exec
函數呼叫REPL
phantomjsphantomjs 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('@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中文網!
相關推薦:
以上是關於php如何呼叫phantomjs給微信小程式分享的問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

DependencyInjection(DI)inPHPenhancescodeflexibilityandtestabilitybydecouplingdependencycreationfromusage.ToimplementDIeffectively:1)UseDIcontainersjudiciouslytoavoidover-engineering.2)Avoidconstructoroverloadbylimitingdependenciestothreeorfour.3)Adhe

到Improveyourphpwebsite的實力,UsEthestertate:1)emplastOpCodeCachingWithOpcachetCachetOspeedUpScriptInterpretation.2)優化的atabasequesquesquesquelies berselectingOnlynlynnellynnessaryfields.3)usecachingsystemssslikeremememememcachedisemcachedtoredtoredtoredsatabaseloadch.4)

是的,ItispossibletosendMassemailswithp.1)uselibrarieslikeLikePhpMailerorSwiftMailerForeffitedEmailsending.2)enasledeLaysBetenemailstoavoidSpamflagssspamflags.3))

DependencyInjection(DI)inPHPisadesignpatternthatachievesInversionofControl(IoC)byallowingdependenciestobeinjectedintoclasses,enhancingmodularity,testability,andflexibility.DIdecouplesclassesfromspecificimplementations,makingcodemoremanageableandadapt

使用PHP發送電子郵件的最佳方法包括:1.使用PHP的mail()函數進行基本發送;2.使用PHPMailer庫發送更複雜的HTML郵件;3.使用SendGrid等事務性郵件服務提高可靠性和分析能力。通過這些方法,可以確保郵件不僅到達收件箱,還能吸引收件人。

計算PHP多維數組的元素總數可以使用遞歸或迭代方法。 1.遞歸方法通過遍歷數組並遞歸處理嵌套數組來計數。 2.迭代方法使用棧來模擬遞歸,避免深度問題。 3.array_walk_recursive函數也能實現,但需手動計數。

在PHP中,do-while循環的特點是保證循環體至少執行一次,然後再根據條件決定是否繼續循環。 1)它在條件檢查之前執行循環體,適合需要確保操作至少執行一次的場景,如用戶輸入驗證和菜單系統。 2)然而,do-while循環的語法可能導致新手困惑,且可能增加不必要的性能開銷。

在PHP中高效地哈希字符串可以使用以下方法:1.使用md5函數進行快速哈希,但不適合密碼存儲。 2.使用sha256函數提高安全性。 3.使用password_hash函數處理密碼,提供最高安全性和便捷性。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。