运用新浪Sae的服务做一个自己的图床[防盗链、动态水印]

Sae的速度不仅快,而且还有一些很有用的服务,例如StorageImageFetchURL。我们今天就用这些服务与Sae的应用空间来自己搭一个图床。

[Update]

2015-05-07 本博客已迁回分布式VPS。目前Sae已经挂掉了(需要收费)

这个图床主要是存放我博客的图片,所以防盗链和水印是必须要有的,况且Sae的服务这么方便,所以我第一时间就选用了Sae作为图床。

图床一般都会有数据库来记录上传的图片的识别名称,用于便利地找到图片。而我选择的就是随机数加日期这种不可能重复的搭配作为作为上传的图片的名称,用Storage作为保存空间。

然后显示图片再通过Image来动态地打上水印,原图其实是没有水印的。只是每次显示的时候加上了水印。我还加了一个很好用的功能,就是上传远程图片,这个功能主要是通过Sae的服务FetchURL来抓取的。(转载文章必备的工具)

下面是源代码:

Config.php 配置文件的代码

<?php
$prev_url = 'msae.sinaapp.com'; //防盗链网址
$storage = 'msae'; //Storage名称
$copy = '本图片来自 https://Msae.Sinaapp.Com/'; //版权
?>

Index.php 首页文件的代码

<?php
include 'config.php';
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
<title>Msae - 我的Sae</title>
</head>
<style>
body {
    font-family:"微软雅黑";
}
</style>
<body>
<div>
  <h3>∏上传图片</h3>
  <form enctype="multipart/form-data" method="post">
  <input name="file" type="file"/>
  <input type="submit" name="upload" value="上传"/>
  </form>
<?php
if(isset($_POST['upload'])){
  if(strstr($_FILES['file']['name'],'.jpg')){
      $stor = new SaeStorage();
    $name = rand(10000,50000).'_'.date('YmdHis');
      $stor->upload($storage,$name.'.jpg',$_FILES['file']['tmp_name']);
    
    echo '<a href="show.php?key='.$name.'" target="_blank">预览图片</a>';
  }else{
    echo '<script>alert("不符合上传要求!")</script>';
  }
}
?>
</div>
<div>
  <h3>∏远程上传图片</h3>
  <form enctype="multipart/form-data" method="post">
  <input name="file" type="text"/>
  <input type="submit" name="catch" value="抓取"/>
  </form>
<?php
if(isset($_POST['catch'])){
  
  if($_POST['file'] != '' && strstr($_POST['file'],'.jpg')){
    $f = new SaeFetchurl();
  
    while($img_data==''){
    $img_data = $f->fetch($_POST['file']);
    }
    
    if($img_data!=''){
    $stor = new SaeStorage();
    $name = rand(10000,50000).'_'.date('YmdHis');
    $stor->write($storage,$name.'.jpg',$img_data);
    
    echo '<a href="show.php?key='.$name.'" target="_blank">预览图片</a>';
    }
  }else{
    echo '<script>alert("不符合上传要求!")</script>';
  }
}
?>
</div>
<div>_Gemini.Ki 纯手工打造[https://fdawn.com/]</div>
</body>
</html>

Show.php 获取图片的文件的代码

<?php
include 'config.php';
if(strstr($_SERVER['HTTP_REFERER'],$prev_url)){
  
  if($_GET['key']!=''){
    header("Content-type: image/jpg");
  
    $stor = new SaeStorage();
    $img_data = $stor->read($storage,$_GET['key'].'.jpg');
    
    if($img_data!=''){
    $img = new SaeImage($img_data);
      $font = array("name"=>SAE_MicroHei, "size"=>12, "weight"=>170, "color"=>"#ffffff");
        $img->annotate($copy, 1, SAE_SouthEast, $font);
    
      $img->exec('jpg',true);
    }
  }
}else{
    echo '本站禁止盗链![https://fdawn.com/]';
}
?>

[使用说明]

1.先开通Storage

2.修改配置文件config.php的里面配置

[重要说明]

如果直接用GET的方式访问图片的话,会提示盗链。因为我的防盗链检测的是来源地址!!!(虽然可以伪造,但你也可以加入一些奇技淫巧来过滤。我在这就不展示了)

标签:运用, 新浪, sae, 服务, 自己, 图床, 防盗链, 动态, 水印

该文章由 Shiqi 原创并发布在 被遗忘的曙光 技术博客

转载请标明来源:https://blog.fdawn.com/PHP/1.html

仅有 1 条评论

  1. Bertie

    I found just what I was needed, and it was enrintaiteng!

添加新评论