如各位所见,自从打卡片式文章列表毕业之后,文章主图就成了影响网站美观的一个重要问题。但是因为一种不可抗力——懒——我又不太可能给每一篇文章精确配图,为了满足这个需要,随即图片 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]");
?>

none
 赞赏   点赞 0
如果觉得我的文章对你有用,请随意赞赏


推荐文章

寻梦xunm

寻梦xunm

奇乐博客专注于Typecho开源程序模板的设计和开发。致力于不断追求设计感和代码的精简语义化只为做出更好的作品。