Xunm模版升级成功,原购买的朋友可以联系作者进行升级操作
首页 » 福利 » 随机图片 API 的简易 PHP 实现
随机图片 API 的简易 PHP 实现
  • admin
  • 2018-09-09
  • 86 次
  • 0 条
  • 福利

  • 如各位所见,自从打卡片式文章列表毕业之后,文章主图就成了影响网站美观的一个重要问题。但是因为一种不可抗力——懒——我又不太可能给每一篇文章精确配图,为了满足这个需要,随即图片 API 就出现了。我最早使用的是漫月 API,但是后来它凉了;随后我转阵再见某人的 api,关于他的连接可以在我的友链页面可以看到,不过没用几天,它也凉了。现在我用的是阿钰的 API,但是我这边访问不太稳定,估计是老旧小区的宽带要背锅。但是无论怎么说,我现在网站托管在 CN2 GIA 服务器上,速度还不算慢,为何不自己弄一个随机图片 API 呢?速度还快,还挺好用。于是便有了接下来的文章:

    题内话

    首先说 PHP,这东西我自然是不会写的,于是稍后你看到的代码全部是面向复制粘贴和搜索引擎编程,因此版权归属于互联网。
    其次就是实现思路,虽然不会写 PHP,但是我会 Java 啊,都是指令式编程,不是啥 Haskell 或者 Lisp 家族,自然在算法上就触类旁通。首先是获取指定文件夹下的文件列表,这个方法要支持二级目录以便后续给图片分类。获取到之后就是从列表中随机取一个出来并且将他的地址 301 或者 302 出去,这里我使用的是 302 临时重定向,防止一些缓存类功能的组建缓存图片。在这个过程中我还加入了对于文件后缀名的检测,以防止一些乱七八糟的东西混在图片文件夹进而导致出现问题。
    然后,我觉得就没啥可说的了。挺简单的小程序,也没必要上传 github,就放在下面留给诸位看吧,没写过 php,各位嘴下留情。欢迎在评论区留言指正错误。

    代码

    <?php
    //这里是复制来的,源 https://blog.csdn.net/markely/article/details/8805492
    function get_allfiles($path,&$files) {

    if(is_dir($path)){
        $dp = dir($path);
        while ($file = $dp ->read()){
            if($file !="." && $file !=".."){
                get_allfiles($path."/".$file, $files);
            }
        }
        $dp ->close();
    }
    if(is_file($path)){
        $files[] =  $path;
    }

    }

    function get_filenamesbydir($dir){

    $files =  array();
    get_allfiles($dir,$files);
    return $files;

    }

    //这将得到一个文件夹中的所有文件的数组,可将参数改为你要获取的文件夹
    //注意,如果是./xxx/这样的形式,会导致最终出现 https://aaa.com/bbb/picture//yyyyy/zzz.jpg
    //问题在于网址中会出现//这样的情况导致404
    $img_array = get_filenamesbydir("./picture");
    //允许的后缀名列表
    $extentions = array("jpg", "png");
    //循环取
    do{

    //从数组中选择一个随机图片
    $img = array_rand($img_array);

    }while(!in_array(strtolower(pathinfo($img_array[$img], PATHINFO_EXTENSION)), $extentions));
    //↑检查文件后缀名
    //302显示图片
    header("location:$img_array[$img]");
    ?>



    最后修改于:2018-09-09 15:08
    分享

    相关文章



    博主介绍

  • 博主:寻梦xunm
  • 邮箱:vipshiyi@qq.com
  • 微信:shiihk
  • 熊掌号:奇乐之梦
  • 语录:追寻最初的梦想,坚持走下去!
  • 博主说说

    申请转正的朋友请在或者文章下面进行评论留言即可,

    转正评论留言格式为:你注册的用户名称或者邮箱即可!