当前位置:首页 > PHP教程 > php上传下载 > 列表

PHP脚本实现Markdown文章上传到七牛图床

发布:smiling 来源: PHP粉丝网  添加日期:2022-06-03 08:26:07 浏览: 评论: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.  
  19. $orginalContent = file_get_contents($file); 
  20.  
  21. // 2. 正则匹配出所有的图片 
  22.  
  23. preg_match_all( 
  24.  
  25.     '/\!\[.*\]\(.+\)/', 
  26.  
  27.     $orginalContent, 
  28.  
  29.     $matches, 
  30.  
  31.     PREG_PATTERN_ORDER 
  32.  
  33. ); 
  34.  
  35. $mdImageArr = $matches[0]; 
  36.  
  37. if(! count($mdImageArr) ){ 
  38.  
  39.     return "无需上传图片"; 
  40.  
  41. } 
  42.  
  43. // 3. 依次上传图片 
  44.  
  45. $accessKey = '你的 AccessKey'; 
  46.  
  47. $secretKey = '你的 SecretKey'; 
  48.  
  49. $bucket = '你的七牛空间名'; // eg. mindgeek 
  50.  
  51. $url = "空间所绑定的域名";  // eg. http://qiniu.site.com 
  52.  
  53. $auth = new Auth($accessKey, $secretKey); 
  54.  
  55. $token = $auth->uploadToken($bucket); 
  56.  
  57. $uploadMgr = new UploadManager(); 
  58.  
  59. $content = $orginalContent; 
  60.  
  61. foreach ($mdImageArr as $image) { 
  62.  
  63.     $start = mb_strpos($image, '](') + 2; 
  64.  
  65.     $localPath = mb_substr($image, $start, -1); 
  66.  
  67.     $extension = pathinfo($localPath)['extension']; 
  68.  
  69.     $uploadPath = uniqid(). ".". $extension; 
  70.  
  71.     list($ret, $error) = $uploadMgr->putFile($token, $uploadPath, $localPath); 
  72.  
  73.     if(! $error ){ 
  74.  
  75.         // 4. 将文章图片的地址替换为图床地址 
  76.  
  77.         $content = str_replace($localPath, $url.$uploadPath, $content); 
  78.  
  79.         echo "{$uploadPath} 上传成功。\n"; 
  80.  
  81.     } else { 
  82.  
  83.         echo "{$uploadPath} 上传失败。\n"; 
  84.  
  85.     } 
  86.  
  87. } 
  88.  
  89. // 5. 保存替换后的文章 
  90.  
  91. file_put_contents($file, $content); 

使用:

$ php index.php test.md

Tags: Markdown文章上传

分享到: