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


php random image script for specific filenames

我正在使用以下 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);
        }
    }
?>

您可以在脚本中从第 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;
        }
    }