使用PHP搭建随机图片API教程

使用PHP搭建随机图片API教程

技术教程踏雪2021-04-25 19:53:490A+A-

预备

1.一台服务器(或许本机)

2.已搭建好php环境(网上有很多教程,这里就不赘述了),我用是nginx+php-fpm


基本原理

随机图片API,次要原理其实很复杂,就三步:

1.用一个文本文档寄存图片的链接

2.当用户恳求API时,php就去读取txt文件,然后生成随机数来随机选取一个图片链接

3.302重定向到目的图片地址


实现

下面给出最简单的实现方式,详细说明见注释

1.创建文件randImg.txt用于存放图片地址,如

https://tva1.sinaimg.cn/large/0072Vf1pgy1fodqgiodg1j31gs1191im.jpg
https://tva1.sinaimg.cn/large/a15b4afegy1fmviz5449mj21hc0u01kx.jpg
https://tva1.sinaimg.cn/large/0072Vf1pgy1fodqiemqvoj31hc0xcaxb.jpg
https://tva1.sinaimg.cn/large/0072Vf1pgy1fodqn34by0j31hc0xcqg9.jpg

2.创建randImg.php

// 1.读取randImg.txt中的内容,并以换行符分开
$str = explode("\n", file_get_contents('randImg.txt'));
// 2.得到的$str是一个String的数组,然后获取随机数index
$rand_index = rand(0,count($str)-1);
// 根据生成的随机数选取index为$rand_index的图片链接
$url = $str[$rand_index];
// 替换掉转义
$url = str_re($url);
// 3.重定向到目标url,返回302码,然后浏览器就会跳转到图片url的地址
header("Location:".$url);
// 替换掉一些换行、制表符等转义
function str_re($str){
    $str = str_replace(' ', "", $str);
    $str = str_replace("\n", "", $str);
    $str = str_replace("\t", "", $str);
    $str = str_replace("\r", "", $str);
    return $str;
  }

就上面几行,很简单吧?

抛砖引玉,然后就可以根据自己需要进行改动了


其他说明

上面给出的例子是把图片上传到新浪微博后,新浪处理后会返回一串编码,如0072Vf1pgy1fodqgiodg1j31gs1191im

根据这个编码就可以拼凑urlhttps://tva1.sinaimg.cn/large/0072Vf1pgy1fodqgiodg1j31gs1191im.jpg请求到刚上传的图片,而且新浪还很贴心地帮我们转成各种尺寸的格式,很方便,如https://tva1.sinaimg.cn/small/0072Vf1pgy1fodqgiodg1j31gs1191im.jpg获取的是小尺寸的图片

而且新浪有多个服务器,所以我们可以这样

// 列出各新浪转码后的尺寸
$size_arr = array('large', 'mw1024', 'mw690', 'bmiddle', 'small', 'thumb180', 'thumbnail', 'square');
// $_GET['size']可以获取请求中size的参数,若无指定默认large
$size = !empty($_GET['size']) ? $_GET['size'] : 'large' ;
// 随机选取新浪服务器的序号
$server_index = rand(1,4);
// in_array()匹配尺寸array
if(!in_array($size, $size_arr)){
	$size = 'large';
}
//拼接url
$url = 'https://tva'.$server_index.'.sinaimg.cn/'.$size.'/'.$sina_img.'.jpg';

注意,此时的randImg.txt保存的就是下面这些而不是完整的url了

0072Vf1pgy1fodqgiodg1j31gs1191im
a15b4afegy1fmviz5449mj21hc0u01kx
0072Vf1pgy1fodqiemqvoj31hc0xcaxb
0072Vf1pgy1fodqn34by0j31hc0xcqg9


同理,如果用jsdelivr+github作为图床的话,可以先在程序中写好url的公共部分,然后再拼接好后面的图片编号/编码


$url = 'https://cdn.jsdelivr.net/gh/xxx/xxx@master/images'.$str[$rand_index];

最后将两个文件放在同一个文件夹中,浏览器访问randImg.php即可


通常,我们会把它放在<img>中进行使用


<img src="https://yourdomain/xxx/randImg.php" alt="img">

为了避开浏览器缓存导致的同一页面的所有图片都一样,可以给同一页面调用同一接口的url后面各加个随机的参数


<img src="https://yourdomain/xxx/randImg.php?t=abc" alt="img">


点击这里复制本文地址 以上内容由踏雪博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

踏雪博客 © All Rights Reserved.  本站与中国电信无任何关系!联系邮箱 admin@mail.189.ro
Powered by Z-BlogPHP
联系我们| 关于我们| 留言建议| 网站地图