V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
insoxin
V2EX  ›  问与答

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

  •  
  •   insoxin · 2017-08-09 18:10:44 +08:00 via Android · 1275 次点击
    这是一个创建于 2466 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我不是搞了个随机图片的吗

    [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'>
    最终幻想是调用的即图片原链接或能分辨出来
    求助
    3 条回复    2017-08-10 06:54:40 +08:00
    insoxin
        1
    insoxin  
    OP
       2017-08-09 21:32:12 +08:00 via Android
    已解决
    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
        2
    msg7086  
       2017-08-10 04:16:40 +08:00
    把 readfile 改成 header 302 不就好了……?
    insoxin
        3
    insoxin  
    OP
       2017-08-10 06:54:40 +08:00 via Android
    @msg7086 一开始不懂呐,一步步百度来着🌚
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1239 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:15 · PVG 07:15 · LAX 16:15 · JFK 19:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.