用于特定文件名的php随机图像脚本

时间:2012-06-21 04:54:33

标签: php image random

我正在使用以下PHP脚本在我的网站上显示一个随机图像,它工作得很好,除了它会抓取我不希望它抓取的图像所以我想在脚本中添加一个检查以便它如果它以字母“TN-”开头,它只会抓取一个图像,但我不是一个php编码器,所以我想我会请专家在这里寻求帮助。

<?php

    // files to search for
    $extList = array();
        $extList['gif'] = 'image/gif';
        $extList['jpg'] = 'image/jpeg';
        $extList['jpeg'] = 'image/jpeg';
        $extList['png'] = 'image/png';

    // set to specific image if needed
    // null will result in a random image
    $img = null;

    // path to the directory you want to scan
    $directory = './';
    if (substr($directory,-1) != '/') {
        $directory = $directory.'/';
    }

    // if img is set, show it
    if (isset($_GET['img'])) {
        $imageInfo = pathinfo($_GET['img']);
        if (
            isset( $extList[ strtolower( $imageInfo['extension'] ) ] ) &&
            file_exists( $directory.$imageInfo['basename'] )
        ) {
            $img = $directory.$imageInfo['basename'];
        }
    } 
    // if img isnt set, grab a random
    else {
        //cycle through directory and subfolders
        $it = new RecursiveDirectoryIterator("$directory");
        foreach(new RecursiveIteratorIterator($it) as $file)
        {
            $file_info = pathinfo($file);
            if (
                isset( $extList[ strtolower( $file_info['extension'] ) ] )
            ) {
                $items[] = $file;
            }
        }
        sort($items);
        // get the random image
        if (count($items) > 0) {
            $imageNumber = time() % count($items);
            $img = $directory.$items[$imageNumber];
        }
    }

    // if img isnt null, display it
    if ($img!=null) {
        $imageInfo = pathinfo($img);
        $contentType = 'Content-type: '.$extList[ $imageInfo['extension'] ];
        header ($contentType);
        readfile($img);
    } 
    // else, try to create one or give error
    else {
        if ( function_exists('imagecreate') ) {
            header ("Content-type: image/png");
            $im = @imagecreate (100, 100)
                or die ("Cannot initialize new GD image stream");
            $background_color = imagecolorallocate ($im, 255, 255, 255);
            $text_color = imagecolorallocate ($im, 0,0,0);
            imagestring ($im, 2, 5, 5,  "IMAGE ERROR", $text_color);
            imagepng ($im);
            imagedestroy($im);
        }
    }
?>

1 个答案:

答案 0 :(得分:1)

您可以在脚本中从第32行开始的块中添加一个检查:

    //cycle through directory and subfolders
    $it = new RecursiveDirectoryIterator("$directory");
    foreach(new RecursiveIteratorIterator($it) as $file)
    {
        $file_info = pathinfo($file);
        if (
            isset( $extList[ strtolower( $file_info['extension'] ) ] ) &&
            strpos( $file_info['basename'], 'TN-') === 0
        ) {
            $items[] = $file;
        }
    }