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 11 PHP
五个PHP程序员工具
May 26 PHP
php google或baidu分页代码
Nov 26 PHP
array_multisort实现PHP多维数组排序示例讲解
Jan 04 PHP
允许phpmyadmin空密码登录的配置方法
May 29 PHP
php使用parse_url和parse_str解析URL
Feb 22 PHP
详解PHP执行定时任务的实现思路
Dec 21 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
Mar 06 PHP
php版微信自动登录并获取昵称的方法
Sep 23 PHP
php实现基于openssl的加密解密方法
Sep 30 PHP
php显示页码分页类的封装
Jun 08 PHP
laravel5 Eloquent 实现事务方式
Oct 21 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
PHP3 safe_mode 失效漏洞
2006/10/09 PHP
PHP新手上路(十三)
2006/10/09 PHP
php数据库密码的找回的步骤
2011/01/12 PHP
ThinkPHP3.2.2的插件控制器功能简述
2014/07/09 PHP
php通过Chianz.com获取IP地址与地区的方法
2015/01/14 PHP
Zend Framework创建自己的动作助手详解
2016/03/05 PHP
PDO实现学生管理系统
2020/03/21 PHP
javascript 无提示关闭窗口脚本
2009/08/17 Javascript
javascript模拟地球旋转效果代码实例
2013/12/02 Javascript
在HTML代码中使用JavaScript代码的例子
2014/10/16 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
微信小程序 wxapp地图 map详解
2016/10/31 Javascript
第一个Vue插件从封装到发布
2017/11/22 Javascript
vue better-scroll插件使用详解
2018/01/25 Javascript
angular4强制刷新视图的方法
2018/10/09 Javascript
Node.js net模块功能及事件监听用法分析
2019/01/05 Javascript
JavaScript基于SVG的图片切换效果实例代码
2020/12/15 Javascript
[02:03]DOTA2亚洲邀请赛 HGT战队出场宣传片
2015/02/07 DOTA
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
zbar解码二维码和条形码示例
2014/02/07 Python
Windows上配置Emacs来开发Python及用Python扩展Emacs
2015/11/20 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
python3实现字符串的全排列的方法(无重复字符)
2018/07/07 Python
Python中拆分字符串的操作方法
2019/07/23 Python
详解在Python中以绝对路径或者相对路径导入文件的方法
2019/08/30 Python
Python的形参和实参使用方式
2019/12/24 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
Bodum官网:咖啡和茶壶、玻璃器皿、厨房电器等
2018/08/01 全球购物
英国著名书店:Foyles
2018/12/01 全球购物
adidas马来西亚官网:adidas MY
2020/09/12 全球购物
中英文自我评价常用句型
2013/12/19 职场文书
目标责任书范本
2014/04/16 职场文书
社区清明节活动总结
2014/07/04 职场文书
教师节老师寄语
2015/05/28 职场文书
担保公司2015年终工作总结
2015/10/14 职场文书