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 项目的方法
Jan 02 PHP
基于php常用正则表达式的整理汇总
Jun 08 PHP
PHP把网页保存为word文件的三种方法
Apr 01 PHP
php计算当前程序执行时间示例
Apr 24 PHP
PHP解码unicode编码的中文字符代码分享
Aug 13 PHP
PHP获取毫秒级时间戳的方法
Apr 15 PHP
日常整理PHP中简单的图形处理(经典)
Oct 26 PHP
PHP对象链式操作实现原理分析
Oct 09 PHP
DWZ+ThinkPHP开发时遇到的问题分析
Dec 12 PHP
PHP简单实现冒泡排序的方法
Dec 26 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
May 11 PHP
Laravel框架定时任务2种实现方式示例
Dec 08 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
一些花式咖啡的配方
2021/03/03 冲泡冲煮
php广告加载类用法实例
2014/09/23 PHP
php集成动态口令认证
2016/07/21 PHP
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
ext 列表页面关于多行查询的办法
2010/03/25 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
js取滚动条的尺寸的函数代码
2011/11/30 Javascript
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
jQuery 事件的命名空间简单了解
2013/11/22 Javascript
分享2个jQuery插件--jquery.fileupload与artdialog
2014/12/26 Javascript
详解Javascript事件驱动编程
2016/01/03 Javascript
JavaScript代码生成PDF文件的方法
2016/02/26 Javascript
JavaScript实现自动切换图片代码
2016/10/11 Javascript
微信小程序 教程之wxapp视图容器 scroll-view
2016/10/19 Javascript
使用AngularJS2中的指令实现按钮的切换效果
2017/03/27 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
vsCode安装使用教程和插件安装方法
2020/08/24 Javascript
微信小程序与后台PHP交互的方法实例分析
2018/12/10 Javascript
jQuery实现的模仿雨滴下落动画效果
2018/12/11 jQuery
JavaScript中将值转换为字符串的五种方法总结
2019/06/06 Javascript
[02:44]DOTA2英雄基础教程 魅惑魔女
2014/01/07 DOTA
django 外键model的互相读取方法
2018/12/15 Python
python实现二维数组的对角线遍历
2019/03/02 Python
python或C++读取指定文件夹下的所有图片
2019/08/31 Python
Python运行DLL文件的方法
2020/01/17 Python
Python无头爬虫下载文件的实现
2020/04/02 Python
windows下python 3.9 Numpy scipy和matlabplot的安装教程详解
2020/11/28 Python
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
高二物理教学反思
2014/02/08 职场文书
《日月潭》教学反思
2014/02/28 职场文书
超市周年庆活动方案
2014/08/16 职场文书
规范化管理年活动总结
2014/08/29 职场文书
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
评职称个人总结
2015/03/05 职场文书
2015年收银工作总结范文
2015/04/01 职场文书
三八妇女节致辞
2015/07/31 职场文书