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 相关文章推荐
提问的智慧
Oct 09 PHP
php不用内置函数对数组排序的两个算法代码
Feb 08 PHP
PHP curl模拟浏览器采集阿里巴巴的实现代码
Apr 20 PHP
sphinx增量索引的一个问题
Jun 14 PHP
PHP连接MySQL数据的操作要点
Mar 20 PHP
PHP中遇到的时区问题解决方法
Jul 23 PHP
PHP数组去重比较快的实现方式
Jan 19 PHP
Zend Studio使用技巧两则
Apr 01 PHP
ThinkPHP3.2.3实现分页的方法详解
Jun 03 PHP
理清PHP在Linxu下执行时的文件权限方法
Jun 07 PHP
php原生数据库分页的代码实例
Feb 18 PHP
phpstorm 配置xdebug的示例代码
Mar 31 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
关于IIS php调用com组件的权限问题
2012/01/11 PHP
深入解析PHP垃圾回收机制对内存泄露的处理
2013/06/14 PHP
封装ThinkPHP的一个文件上传方法实例
2014/10/31 PHP
PHP判断手机是IOS还是Android
2015/12/09 PHP
CodeIgniter生成静态页的方法
2016/05/17 PHP
php插件Xajax使用方法详解
2017/08/31 PHP
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
学习javascript,实现插入排序实现代码
2011/07/31 Javascript
js由下向上不断上升冒气泡效果实例
2015/05/07 Javascript
jquery仅用6行代码实现滑动门效果
2015/09/07 Javascript
Kindeditor在线文本编辑器如何过滤HTML
2016/04/14 Javascript
JS模拟bootstrap下拉菜单效果实例
2016/06/17 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
完美解决jQuery 鼠标快速滑过后,会执行多次滑出的问题
2016/12/08 Javascript
JS实现上传图片实时预览功能
2017/05/22 Javascript
Vue之Vue.set动态新增对象属性方法
2018/02/23 Javascript
vue2.0模拟锚点的实例
2018/03/14 Javascript
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
Vue中通过属性绑定为元素绑定style行内样式的实例代码
2020/04/30 Javascript
Vue组件通信$attrs、$listeners实现原理解析
2020/09/03 Javascript
Python学习之asyncore模块用法实例教程
2014/09/29 Python
提升Python程序运行效率的6个方法
2015/03/31 Python
python类装饰器用法实例
2015/06/04 Python
VScode编写第一个Python程序HelloWorld步骤
2018/04/06 Python
python3 实现一行输入,空格隔开的示例
2018/11/14 Python
python 利用文件锁单例执行脚本的方法
2019/02/19 Python
Python通过cv2读取多个USB摄像头
2019/08/28 Python
使用python脚本自动创建pip.ini配置文件代码实例
2019/09/20 Python
德国最大的服装、鞋子和配件在线商店之一:Outfits24
2019/07/23 全球购物
安全教育心得体会
2013/12/29 职场文书
《猴子种果树》教学反思
2014/04/26 职场文书
市场拓展计划书
2014/05/03 职场文书
查摆问题自我剖析材料
2014/08/18 职场文书
在宿舍喝酒的检讨书
2014/09/28 职场文书
2015社区个人工作总结范文
2015/05/13 职场文书
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL