这篇文章主要介绍了关于关于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中文网!
相关推荐:
Atas ialah kandungan terperinci 关于php如何调用phantomjs给微信小程序分享的问题. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

PHP terutamanya pengaturcaraan prosedur, tetapi juga menyokong pengaturcaraan berorientasikan objek (OOP); Python menyokong pelbagai paradigma, termasuk pengaturcaraan OOP, fungsional dan prosedur. PHP sesuai untuk pembangunan web, dan Python sesuai untuk pelbagai aplikasi seperti analisis data dan pembelajaran mesin.

PHP berasal pada tahun 1994 dan dibangunkan oleh Rasmuslerdorf. Ia pada asalnya digunakan untuk mengesan pelawat laman web dan secara beransur-ansur berkembang menjadi bahasa skrip sisi pelayan dan digunakan secara meluas dalam pembangunan web. Python telah dibangunkan oleh Guidovan Rossum pada akhir 1980 -an dan pertama kali dikeluarkan pada tahun 1991. Ia menekankan kebolehbacaan dan kesederhanaan kod, dan sesuai untuk pengkomputeran saintifik, analisis data dan bidang lain.

PHP sesuai untuk pembangunan web dan prototaip pesat, dan Python sesuai untuk sains data dan pembelajaran mesin. 1.Php digunakan untuk pembangunan web dinamik, dengan sintaks mudah dan sesuai untuk pembangunan pesat. 2. Python mempunyai sintaks ringkas, sesuai untuk pelbagai bidang, dan mempunyai ekosistem perpustakaan yang kuat.

PHP tetap penting dalam proses pemodenan kerana ia menyokong sejumlah besar laman web dan aplikasi dan menyesuaikan diri dengan keperluan pembangunan melalui rangka kerja. 1.Php7 meningkatkan prestasi dan memperkenalkan ciri -ciri baru. 2. Rangka kerja moden seperti Laravel, Symfony dan CodeIgniter memudahkan pembangunan dan meningkatkan kualiti kod. 3. Pengoptimuman prestasi dan amalan terbaik terus meningkatkan kecekapan aplikasi.

Phphassignificantelympactedwebdevelopmentandextendsbeyondit.1) itpowersmajorplatformslikeworderpressandexcelsindatabaseIntions.2) php'SadaptabilityAldoStoScaleforlargeapplicationFrameworksLikelara.3)

Jenis PHP meminta untuk meningkatkan kualiti kod dan kebolehbacaan. 1) Petua Jenis Skalar: Oleh kerana Php7.0, jenis data asas dibenarkan untuk ditentukan dalam parameter fungsi, seperti INT, Float, dan lain -lain. 2) Return Type Prompt: Pastikan konsistensi jenis nilai pulangan fungsi. 3) Jenis Kesatuan Prompt: Oleh kerana Php8.0, pelbagai jenis dibenarkan untuk ditentukan dalam parameter fungsi atau nilai pulangan. 4) Prompt jenis yang boleh dibatalkan: membolehkan untuk memasukkan nilai null dan mengendalikan fungsi yang boleh mengembalikan nilai null.

Dalam PHP, gunakan kata kunci klon untuk membuat salinan objek dan menyesuaikan tingkah laku pengklonan melalui kaedah Magic \ _ _ _. 1. Gunakan kata kunci klon untuk membuat salinan cetek, mengkloning sifat objek tetapi bukan sifat objek. 2. Kaedah klon \ _ \ _ boleh menyalin objek bersarang untuk mengelakkan masalah menyalin cetek. 3. Beri perhatian untuk mengelakkan rujukan pekeliling dan masalah prestasi dalam pengklonan, dan mengoptimumkan operasi pengklonan untuk meningkatkan kecekapan.

PHP sesuai untuk pembangunan web dan sistem pengurusan kandungan, dan Python sesuai untuk sains data, pembelajaran mesin dan skrip automasi. 1.PHP berfungsi dengan baik dalam membina laman web dan aplikasi yang cepat dan berskala dan biasanya digunakan dalam CMS seperti WordPress. 2. Python telah melakukan yang luar biasa dalam bidang sains data dan pembelajaran mesin, dengan perpustakaan yang kaya seperti numpy dan tensorflow.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

PhpStorm versi Mac
Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa