PHP实现Markdown文章上传到七牛图床的实例内容


Posted in PHP onFebruary 11, 2020

在使用 Markdown 编写文章之后,经常需要发布到不同的平台,这里会遇到一个问题,文章的图片需要手动的进行上传,管理起来非常不方便,因此,强烈建议将图片统一上传到图床中,这样的话一篇文章就可以轻松的同步到各大平台上面了。下面,用 PHP 来实现该功能,选用 七牛云 作为图床

创建并进入项目

$ mkdir markdown-images-to-qiniu

$ cd markdown-images-to-qiniu

安装七牛官方的扩展

$ composer require qiniu/php-sdk

实现思路很简单

● 读取 makrdown 文件

● 正则匹配出所有的图片

● 依次上传图片

● 将文章图片的地址替换为图床地址

● 保存替换后的文章

以下是具体的实现,首先在项目目录下创建脚本 index.php,

<?php

require 'vendor/autoload.php';

use Qiniu\Auth;

use Qiniu\Storage\UploadManager;

// 1. 读取 `makrdown` 文件

$file = $argv[1];

if(! file_exists($file) ){

  return "找不到文件{$file}";

}

$orginalContent = file_get_contents($file);

// 2. 正则匹配出所有的图片

preg_match_all(

  '/\!\[.*\]\(.+\)/',

  $orginalContent,

  $matches,

  PREG_PATTERN_ORDER

);

$mdImageArr = $matches[0];

if(! count($mdImageArr) ){

  return "无需上传图片";

}

// 3. 依次上传图片

$accessKey = '你的 AccessKey';

$secretKey = '你的 SecretKey';

$bucket = '你的七牛空间名'; // eg. mindgeek

$url = "空间所绑定的域名"; // eg. http://qiniu.site.com

$auth = new Auth($accessKey, $secretKey);

$token = $auth->uploadToken($bucket);

$uploadMgr = new UploadManager();

$content = $orginalContent;

foreach ($mdImageArr as $image) {

  $start = mb_strpos($image, '](') + 2;

  $localPath = mb_substr($image, $start, -1);

  $extension = pathinfo($localPath)['extension'];

  $uploadPath = uniqid(). ".". $extension;

  list($ret, $error) = $uploadMgr->putFile($token, $uploadPath, $localPath);

  if(! $error ){

    // 4. 将文章图片的地址替换为图床地址

    $content = str_replace($localPath, $url.$uploadPath, $content);

    echo "{$uploadPath} 上传成功。\n";

  } else {

    echo "{$uploadPath} 上传失败。\n";

  }

}

// 5. 保存替换后的文章

file_put_contents($file, $content);

使用

$ php index.php test.md

以上就是PHP脚本实现Markdown文章上传到七牛图床的详细内容,如果大家还有任何补充的内容可以联系三水点靠木小编。

PHP 相关文章推荐
PHP实现获取图片颜色值的方法
Jul 11 PHP
Yii扩展组件编写方法实例分析
Jun 29 PHP
php数组生成html下拉列表的方法
Jul 20 PHP
PHP数组函数array_multisort()用法实例分析
Apr 02 PHP
微信支付开发告警通知实例
Jul 12 PHP
PHP实现蛇形矩阵,回环矩阵及数字螺旋矩阵的方法分析
May 29 PHP
php图像验证码生成代码
Jun 08 PHP
PHP实现的MD5结合RSA签名算法实例
Oct 07 PHP
浅析PHP中的闭包和匿名函数
Dec 25 PHP
Laravel推荐使用的十个辅助函数
May 10 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
Feb 27 PHP
如何用Laravel包含你自己的帮助函数
May 27 PHP
TP5(thinkPHP5)框架使用ajax实现与后台数据交互的方法小结
Feb 10 #PHP
tp5框架基于ajax实现异步删除图片的方法示例
Feb 10 #PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
Feb 10 #PHP
tp5框架使用cookie加密算法实现登录功能示例
Feb 10 #PHP
ThinkPHP5.1+Ajax实现的无刷新分页功能示例
Feb 10 #PHP
ThinkPHP5&amp;5.1实现验证码的生成、使用及点击刷新功能示例
Feb 07 #PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
Feb 07 #PHP
You might like
php 缩略图实现函数代码
2011/06/23 PHP
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
php实例分享之二维数组排序
2014/05/15 PHP
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
PHP实现将MySQL重复ID二维数组重组为三维数组的方法
2016/08/01 PHP
PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)
2016/12/14 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
在JavaScript并非所有的一切都是对象
2013/04/11 Javascript
javascript创建createXmlHttpRequest对象示例代码
2014/02/10 Javascript
轻松学习jQuery插件EasyUI EasyUI创建RSS Feed阅读器
2015/11/30 Javascript
使用jquery.qrcode.js生成二维码插件
2016/10/17 Javascript
JS简单实现点击跳转登陆邮箱功能的方法
2017/10/31 Javascript
js控制随机数生成概率代码实例
2019/03/21 Javascript
Node.js如何优雅的封装一个实用函数的npm包的方法
2019/04/29 Javascript
vue中js判断长时间不操作界面自动退出登录(推荐)
2020/01/22 Javascript
[03:14]DOTA2斧王 英雄基础教程
2013/11/26 DOTA
[00:56]跨越时空加入战场 全新祈求者身心“失落奇艺侍祭”展示
2019/07/20 DOTA
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
Python OpenCV中的resize()函数的使用
2019/06/20 Python
python Django框架实现web端分页呈现数据
2019/10/31 Python
如何基于Python实现电子邮件的发送
2019/12/16 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
CSS3属性选择符介绍
2008/10/17 HTML / CSS
详解Html5页面实现下载文件(apk、txt等)的三种方式
2018/10/22 HTML / CSS
美国指甲油品牌:Deco Miami
2017/01/30 全球购物
美国体育用品商店:Rally House(NCAA、NFL、MLB、NBA、NHL和MLS)
2018/01/03 全球购物
夏洛特和乔治婴儿和儿童时装精品店:Charlotte and George
2018/06/06 全球购物
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
应届实习生的自我评价范文
2014/01/05 职场文书
班级活动策划书
2014/02/06 职场文书
高中教师先进事迹材料
2014/08/22 职场文书
2016七夕情人节广告语
2016/01/28 职场文书
2019银行员工个人工作自我鉴定
2019/06/27 职场文书
JavaScript严格模式不支持八进制的问题讲解
2021/11/07 Javascript
python标准库ElementTree处理xml
2022/05/20 Python