上次说到我用图片api做了文章缩略图,用的是本地储存的方式。本地储存的弊端就是,图片多了就有会占用比较多的内存和服务器资源。我们可以用另一种,利用直接调用图片链接的方式,不需要把图片储存到本地,只需要把图片上传到一些储存空间,获取图片链接即可。
另外,还可以制作一个自适应的api接口,自动识别打开接口的是移动端还是电脑端,返回不同的图片。
先说一下本地调用的接口
我们随便创建一个文件夹,比如ecy,然后我们打开这个文件夹,创建一个ecy.php文件,存放以下代码:
<?php
$img_array = glob("ecy/*.{webp,gif,jpg,png}",GLOB_BRACE);
$img = array_rand($img_array);
$dz = $img_array[$img];
header("Location:".$dz);
?>
然后在一开始创建的ecy文件夹里面,再创建一个名为ecy的文件夹,当然,这个文件名字你们可以随意,修改一下代码里面读取图片的文件夹路径就行,这里只是方便做教程。把图片放到这个ecy文件目录里面,然后本地接口就做好了。
接口就是 https://域名/ecy/ecy.php
本地接口图片体积小,图片加载出来的速度就会很快,如果你图片体积过大,那么它加载就很慢。
下面是调用外部链接的接口
也是随便创建一个文件夹api,在文件夹里面创建api.php文件和api.txt文件,然后将代码放到ecy.php里面。
<?php
//存有链接的文件名,这里是存放图片链接的txt文件
$filename = "api.txt";
if(!file_exists($filename)){
die('文件不存在');
}
//从文本获取链接
$pics = [];
$fs = fopen($filename, "r");
while(!feof($fs)){
$line=trim(fgets($fs));
if($line!=''){
array_push($pics, $line);
}
}
//从数组随机获取链接
$pic = $pics[array_rand($pics)];
//返回指定格式
$type=$_GET['type'];
switch($type){
//JSON返回
case 'json':
header('Content-type:text/json');
die(json_encode(['pic'=>$pic]));
default:
die(header("Location: $pic"));
}
然后将图片链接放到api.txt文件里面,每个图片链接一行,千万不要搞错了,每个链接一行,会随机读取一行链接输出图片。
接口就是 https://域名/api/api.php
同理,调用外地链接的图片加载速度也是看图片大小,所以建议先把图片转换成webp格式再上传储存,这样体积小就加载快了。
接下来说的是自适应接口
自适应接口会自动识别打开链接的设备,调用两个不同的接口来输出不同的图片。
上面已经说了两种不同的接口调用方式,你们可以选一种来使用,创建两个,存放不同的图片,下面教程就拿二次元竖版图片和二次元横版图片来说。我们先做好两个接口,再做自适应的接口。
横版是 https://域名/api/ecypc.php
竖版是 https://域名/api/ecype.php
两个接口文件可以放到同一个文件夹内,我们只需要区分开两个接口调用链接或者图片的文件文件夹就好了。
接下来我们在这个文件夹里面创建zsy.php文件,把下面的代码放进去。
<?php
//如何用php判断用户通过电脑端还是手机端访问网站
function isMobile(){
$useragent=isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ”;
$useragent_commentsblock=preg_match('|\(.*?\)|',$useragent,$matches)>0?$matches[0]:”;
function CheckSubstrs($substrs,$text){
foreach($substrs as $substr)
if(false!==strpos($text,$substr)){
return true;
}
return false;
}
$mobile_os_list=array('Google Wireless Transcoder','Windows CE','WindowsCE','Symbian','Android','armv6l','armv5','Mobile','CentOS','mowser','AvantGo','Opera Mobi','J2ME/MIDP','Smartphone','Go.Web','Palm','iPAQ');
$mobile_token_list=array('Profile/MIDP','Configuration/CLDC-','160×160','176×220','240×240','240×320','320×240','UP.Browser','UP.Link','SymbianOS','PalmOS','PocketPC','SonyEricsson','Nokia','BlackBerry','Vodafone','BenQ','Novarra-Vision','Iris','NetFront','HTC_','Xda_','SAMSUNG-SGH','Wapaka','DoCoMo','iPhone','iPod');
$found_mobile=CheckSubstrs($mobile_os_list,$useragent_commentsblock) ||
CheckSubstrs($mobile_token_list,$useragent);
if ($found_mobile){
return true;
}else{
return false;
}
}
$pc = 'ecypc.php';
$pe = 'ecype.php';
if (isMobile()){
header("Location:".$pe);
}else{
header("Location:".$pc);
}
?>
通过这个接口自动识别设备,我们就可以实现手机端和电脑端打开获取两种不同的图片,手机端打开调用你存放竖版图片的接口ecype.php,电脑端打开调用横版图片的ecypc.php接口,这就是自适应。
接口是 https://域名/api/zsy.php
文件名文件路径你们自行更改就好,我们上面只是给你们举个列子,不用完全参照我的。好了,教学结束,哪里不明白的话可以在评论留言问我
评论 (0)