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 创建文件(文件夹)以及目录操作代码
Mar 04 PHP
如何批量替换相对地址为绝对地址(利用bat批处理实现)
May 27 PHP
yii框架通过控制台命令创建定时任务示例
Apr 30 PHP
php实现兼容2038年后Unix时间戳转换函数
Mar 18 PHP
使用PHP如何实现高效安全的ftp服务器(一)
Dec 20 PHP
php中使用GD库做验证码
Mar 31 PHP
php版微信公众号自定义分享内容实现方法
Sep 22 PHP
PHP制作登录异常ip检测功能的实例代码
Nov 16 PHP
php + nginx项目中的权限详解
May 23 PHP
老生常谈PHP面向对象之标识映射
Jun 21 PHP
实现PHP中session存储及删除变量
Oct 15 PHP
php判断IP地址是否在多个IP段内
Aug 18 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中如何同时使用session和cookie来保存用户登录信息
2013/07/05 PHP
php实现递归的三种基本方式
2020/07/04 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
2016/11/25 PHP
PHP远程连接oracle数据库操作实现方法图文详解
2019/04/11 PHP
JS定时器实例
2013/04/17 Javascript
JavaScript获取某年某月的最后一天附截图
2014/06/23 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
简单谈谈javascript代码复用模式
2015/01/28 Javascript
Javascript BOM学习小结(六)
2015/11/26 Javascript
Javascript基于AJAX回调函数传递参数实例分析
2015/12/15 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
深入理解JQuery循环绑定事件
2016/06/02 Javascript
AngularJS入门之动画
2016/07/27 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
Bootstrap基本插件学习笔记之标签切换(17)
2016/12/08 Javascript
Javascript Event(事件)的传播与冒泡
2017/01/23 Javascript
微信小程序组件 marquee实例详解
2017/06/23 Javascript
JS+Ajax实现百度智能搜索框
2017/08/04 Javascript
layer关闭弹出窗口触发表单提交问题的处理方法
2019/09/25 Javascript
Python HTTP客户端自定义Cookie实现实例
2017/04/28 Python
python实现二叉树的遍历
2017/12/11 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
python 二维数组90度旋转的方法
2019/01/28 Python
pyQT5 实现窗体之间传值的示例
2019/06/20 Python
python调用私有属性的方法总结
2020/07/24 Python
宝塔面板出现“open_basedir restriction in effect. ”的解决方法
2021/03/14 PHP
美国派对用品及装饰品网上商店:Shindigz
2016/07/30 全球购物
世界最大的海报和艺术印刷商店:AllPosters.com
2017/02/01 全球购物
戴尔美国官方折扣店:Dell Outlet
2018/02/13 全球购物
JackJones官方旗舰店:杰克琼斯男装
2018/03/27 全球购物
青年创业培训欢迎词
2014/01/08 职场文书
网上蛋糕店创业计划书
2014/01/24 职场文书
入党思想汇报怎么写
2014/04/03 职场文书
优秀毕业生主要事迹材料
2015/11/04 职场文书
python tkinter实现定时关机
2021/04/21 Python
MySQL8.0.24版本Release Note的一些改进点
2021/04/22 MySQL