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中实现进程间通讯
Oct 09 PHP
php5中date()得出的时间为什么不是当前时间的解决方法
Jun 30 PHP
phpmyadmin 3.4 空密码登录的实现方法
May 29 PHP
php生成略缩图代码
Jul 16 PHP
PHP中如何调用webservice的实例参考
Apr 25 PHP
php strnatcmp()函数的用法总结
Nov 27 PHP
thinkphp模板用法和内容输出实例
Nov 28 PHP
php实现猴子选大王问题算法实例
Apr 20 PHP
Yii实现Command任务处理的方法详解
Jul 14 PHP
PHP实现数据库的增删查改功能及完整代码
Apr 18 PHP
PHP PDOStatement::debugDumpParams讲解
Jan 30 PHP
基于PHP实现邮箱验证激活过程详解
Oct 28 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下实现一个阿拉伯数字转中文数字的函数
2008/07/10 PHP
php生成QRcode实例
2014/09/22 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
PHP使用SOAP调用API操作示例
2018/12/25 PHP
采用CSS和JS,刚好我最近有个站点要用到下拉菜单!
2006/06/26 Javascript
js indexOf()定义和用法
2012/10/21 Javascript
javascript定时变换图片实例代码
2013/03/17 Javascript
JavaScript中几个重要的属性(this、constructor、prototype)介绍
2013/05/19 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
httpclient模拟登陆具体实现(使用js设置cookie)
2013/12/11 Javascript
JavaScript中Textarea滚动条不能拖动的解决方法
2015/12/15 Javascript
Angular外部使用js调用Angular控制器中的函数方法或变量用法示例
2016/08/05 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
2016/11/07 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
angular2中router路由跳转navigate的使用与刷新页面问题详解
2017/05/07 Javascript
基于JS实现网页中的选项卡(两种方法)
2017/06/16 Javascript
深入理解vue $refs的基本用法
2017/07/13 Javascript
基于JavaScript实现淘宝商品广告效果
2017/08/10 Javascript
Vue中v-for的数据分组实例
2018/03/07 Javascript
spirngmvc js传递复杂json参数到controller的实例
2018/03/29 Javascript
如何使用CSS3+JQuery实现悬浮墙式菜单
2019/06/18 jQuery
vscode中eslint插件的配置(prettier配置无效)
2019/09/10 Javascript
Vue项目结合Vue-layer实现弹框式编辑功能(实例代码)
2020/03/11 Javascript
JS中的继承操作实例总结
2020/06/06 Javascript
Python的shutil模块中文件的复制操作函数详解
2016/07/05 Python
Python中easy_install 和 pip 的安装及使用
2017/06/05 Python
Django用户认证系统 User对象解析
2019/08/02 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
2014年纠风工作总结
2014/12/08 职场文书
检讨书模板大全
2015/05/07 职场文书
新年晚会开场白
2015/05/29 职场文书
Python echarts实现数据可视化实例详解
2022/03/03 Python
铁头也玩根德 YachtBoy YB-230......
2022/04/05 无线电
nginx七层负载均衡配置详解
2022/07/15 Servers