当前位置:首页 > PHP教程 > php图像处理 > 列表

PHP实现Markdown文章上传到七牛图床的实例内容

发布:smiling 来源: PHP粉丝网  添加日期:2022-02-11 12:45:49 浏览: 评论:0 

在使用 Markdown 编写文章之后,经常需要发布到不同的平台,这里会遇到一个问题,文章的图片需要手动的进行上传,管理起来非常不方便,因此,强烈建议将图片统一上传到图床中,这样的话一篇文章就可以轻松的同步到各大平台上面了,下面,用 PHP 来实现该功能,选用 七牛云 作为图床。

创建并进入项目

$ mkdir markdown-images-to-qiniu

$ cd markdown-images-to-qiniu

安装七牛官方的扩展

$ composer require qiniu/php-sdk

实现思路很简单

● 读取 makrdown 文件

● 正则匹配出所有的图片

● 依次上传图片

● 将文章图片的地址替换为图床地址

● 保存替换后的文章

以下是具体的实现,首先在项目目录下创建脚本 index.php,

  1. <?php 
  2.  
  3. require 'vendor/autoload.php'
  4.  
  5. use Qiniu\Auth; 
  6.  
  7. use Qiniu\Storage\UploadManager; 
  8.  
  9. // 1. 读取 `makrdown` 文件 
  10.  
  11. $file = $argv[1]; 
  12.  
  13. if(! file_exists($file) ){ 
  14.  
  15.   return "找不到文件{$file}"
  16.  
  17.  
  18. $orginalContent = file_get_contents($file); 
  19.  
  20. // 2. 正则匹配出所有的图片 
  21.  
  22. preg_match_all( 
  23.  
  24.   '/\!\[.*\]\(.+\)/'
  25.  
  26.   $orginalContent
  27.  
  28.   $matches
  29.  
  30.   PREG_PATTERN_ORDER 
  31.  
  32. ); 
  33.  
  34. $mdImageArr = $matches[0]; 
  35.  
  36. if(! count($mdImageArr) ){ 
  37.  
  38.   return "无需上传图片"
  39.  
  40.  
  41. // 3. 依次上传图片 
  42.  
  43. $accessKey = '你的 AccessKey'
  44.  
  45. $secretKey = '你的 SecretKey'
  46.  
  47. $bucket = '你的七牛空间名'// eg. mindgeek 
  48.  
  49. $url = "空间所绑定的域名"// eg. http://qiniu.site.com 
  50.  
  51. $auth = new Auth($accessKey$secretKey); 
  52.  
  53. $token = $auth->uploadToken($bucket); 
  54.  
  55. $uploadMgr = new UploadManager(); 
  56.  
  57. $content = $orginalContent
  58.  
  59. foreach ($mdImageArr as $image) { 
  60.  
  61.   $start = mb_strpos($image'](') + 2; 
  62.  
  63.   $localPath = mb_substr($image$start, -1); 
  64.  
  65.   $extension = pathinfo($localPath)['extension']; 
  66.  
  67.   $uploadPath = uniqid(). "."$extension
  68.  
  69.   list($ret$error) = $uploadMgr->putFile($token$uploadPath$localPath); 
  70.  
  71.   if(! $error ){ 
  72.  
  73.     // 4. 将文章图片的地址替换为图床地址 
  74.  
  75.     $content = str_replace($localPath$url.$uploadPath$content); 
  76.  
  77.     echo "{$uploadPath} 上传成功。\n"
  78.  
  79.   } else { 
  80.  
  81.     echo "{$uploadPath} 上传失败。\n"
  82.  
  83.   } 
  84.  
  85.  
  86. // 5. 保存替换后的文章 
  87.  
  88. file_put_contents($file$content); 

使用

$ php index.php test.md

Tags: Markdown PHP上传七牛图床

分享到: