关于 PHP 随机图片那个衍生的一个小问题

2017-08-09 18:10:44 +08:00
 insoxin
我不是搞了个随机图片的吗

[code]//api.isoyu.com/mm_images.php[/code]
最开始百度到的代码
[code]<?php
/**********************************************
* Filename : img.php
* Author : freemouse
* Date : 2010/12/27
* Usage:
* <img src=img.php>
* <img src=img.php?folder=images2/>
***********************************************/
if($_GET['folder']){
$folder=$_GET['folder'];
}else{
$folder='/uploads/2017/07/';
}
//存放图片文件的位置
$path = $_SERVER['DOCUMENT_ROOT']."/".$folder;
$files=array();
if ($handle=opendir("$path")) {
while(false !== ($file = readdir($handle))) {
if ($file != "." && $file != "..") {
if(substr($file,-3)=='gif' || substr($file,-3)=='jpg') $files[count($files)] = $file;
}
}
}
closedir($handle);

$random=rand(0,count($files)-1);
if(substr($files[$random],-3)=='gif') header("Content-type: image/gif");
elseif(substr($files[$random],-3)=='jpg') header("Content-type: image/jpeg");
readfile("$path/$files[$random]");
?>
[/code]
非常不错,不过有个小缺点查看不了图片直链地址,比如看到某个露骨图片,想删却不知道文件名
清一色 php 文件名
继续百度
效果一样又谷歌搜了搜
[code]<?php //随机输出目录中的图片
$image_directory = "./uploads/2017/07/"; //设定图片目录
$image_type = array(".jpg",".gif",".png"); //设定图片类型
echo "<img src='".$image_directory."/".image_rand_output($image_directory,$image_type)."'>"; // 输出图片

function image_rand_output($image_directory,$image_type) //随机输出图片函数
{
$dh = dir($image_directory);
while (false !== ($image = $dh -> read()))
{
if(in_array(strtolower(strrchr($image,".")),$image_type))
$image_array[] = $image;
}
$dh -> close();
$key = array_rand($image_array);
return $image_array[$key];
}
?>[/code]
这种是显示即随机图片,不过不能调用

然后手改了一下
header("location:$image_directory./".image_rand_output($image_directory,$image_type)."");

可以调用了,直接访问也会直链图
https://api.isoyu.com/mm_images.php
但是调用查看原图还是 php 文件
<img src='//api.isoyu.com/mm_images.php'>
最终幻想是调用的即图片原链接或能分辨出来
求助
1278 次点击
所在节点    问与答
3 条回复
insoxin
2017-08-09 21:32:12 +08:00
已解决
1.伪静态<唐伯虎>
RewriteEngine On
RewriteRule ^/images/(.+?\.jpg)$ /img.php?name=$1
2.@姬長信,我推荐用第一种方法,如果让我想,我把返回的文件名字放在响应头,或者是以 cookie 的形式返回,通过在控制台查看 set_cookie 信息就知道这是哪一个文件了。其他方案楼下回答😤
(冰封 /@Ta/2017-08-09 16:43)
3. 如果懒得查看控制台信息了,那就把文件标志写入图片中再显示出来吧(当然不会修改后写人本地),貌似此方案不够第一个方案好😔🙄
(冰封 /@Ta/2017-08-09 16:46)
msg7086
2017-08-10 04:16:40 +08:00
把 readfile 改成 header 302 不就好了……?
insoxin
2017-08-10 06:54:40 +08:00
@msg7086 一开始不懂呐,一步步百度来着🌚

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/381745

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX