Как получить случайное изображение из каталога с помощью PHP - PullRequest
18 голосов
/ 19 ноября 2009

У меня есть один каталог с названием images / tips.

Теперь в этом каталоге у меня много изображений, которые можно изменить.

Я хочу, чтобы скрипт PHP считывал каталог, находил изображения, а из найденных изображений выбирал случайное изображение.

Есть идеи, как это сделать?

Ответы [ 10 ]

56 голосов
/ 19 ноября 2009
$imagesDir = 'images/tips/';

$images = glob($imagesDir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);

$randomImage = $images[array_rand($images)]; // See comments

Вы можете отправить 2-й аргумент array_rand(), чтобы получить более 1.

4 голосов
/ 19 ноября 2009
$images = glob('images/tips/*');
return $images[rand(0, count($images) - 1)];

Однако это не гарантирует, что одно и то же изображение не будет выбрано дважды подряд.

1 голос
/ 11 января 2016

Договорились с Алексеем. Используйте простую функцию.

function RandImg($dir)
{
$images = glob($dir . '*.{jpg,jpeg,png,gif}', GLOB_BRACE);

$randomImage = $images[array_rand($images)];
return $randomImage;
}

$the_image = RandImg('images/tips/');
echo $the_image;
1 голос
/ 03 октября 2014
function get_rand_img($dir)
{
    $arr = array();
    $list = scandir($dir);
    foreach($list as $file)
    {
        if(!isset($img))
        {
            $img = '';
        }
        if(is_file($dir . '/' . $file))
        {
            $ext = end(explode('.', $file));
            if($ext == 'gif' || $ext == 'jpeg' || $ext == 'jpg' || $ext == 'png' || $ext == 'GIF' || $ext == 'JPEG' || $ext == 'JPG' || $ext == 'PNG')
            {
                array_push($arr, $file);
                $img = $file;
            }
        }
    }
    if($img != '')
    {
        $img = array_rand($arr);
        $img = $arr[$img];
    }
    $img = str_replace("'", "\'", $img);
    $img = str_replace(" ", "%20", $img);
    return $img;
}


echo get_rand_img('images');

замените 'images' на вашу папку.

1 голос
/ 16 февраля 2012
<?php
   foreach (glob("gallery/*") as $filename) {
         echo '<li><a href="'.$filename.'" title=""><img src="'.$filename.'" alt="" /></a> </li>';      
       }
?>

Посмотрите на этот код, используйте его определенно, если он полезен для вас. Он загружает все файлы из папки и печатает их в указанном формате. Я сделал этот код для использования с лайтбоксом.

0 голосов
/ 25 октября 2018

создайте папку "php" в корне вашего веб-сервера и поместите в этот файл php rotate.php ...

<?php
  ###############################################
  # Simple Php Image Rotator - 1.1 - 24.10.2018 #
  # Alessandro Marinuzzi - http://www.alecos.it #
  ###############################################
  function rotate($folder) {
    $list = scandir($folder);
    $fileList = array();
    $img = '';
    foreach ($list as $file) {
      if (is_file($folder . '/' . $file)) {
        $ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
        if ($ext == 'gif' || $ext == 'jpeg' || $ext == 'jpg' || $ext == 'png') {
          $fileList[] = $file;
        }
      }
    }
    if (count($fileList) > 0) {
      $imageNumber = time() % count($fileList);
      $img = $folder . '/' . $fileList[$imageNumber];
    }
    return $img;
  }
?>

Использование (например, в корне у вас может быть папка "pic", содержащая ваши изображения):

<a href="/<?php include("php/rotate.php"); echo rotate("pic"); ?>">

другое использование с использованием библиотеки highslide:

<a href="/<?php include("php/rotate.php"); echo rotate("pic"); ?>" class="highslide" onclick="return hs.expand(this)"><img src="/<?php echo rotate("pic"); ?>" title="Click To Enlarge" alt="Random Gallery" width="90" height="67"></a>
0 голосов
/ 20 апреля 2018
$folder = "images";
$results_img_arr = array();
if (is_dir($folder))
{
        if ($handle = opendir($folder))
        {
                while(($file = readdir($handle)) !== FALSE)
                {
                    if(!in_array($file,array(".","..")))
                        $results_img_arr[] = $folder."/".$file;
               }
         closedir($handle);
        }
}
$ran_img_key  = array_rand($results_img_arr);

$img_path = $results_img_arr[$ran_img_key];
0 голосов
/ 01 июня 2013

Проще:

$directory = "medias/photos/";
$img = glob($directory . "*.jpg");
shuffle($img);
0 голосов
/ 19 ноября 2009

Загрузить папку с изображениями:

$folder = opendir(images/tips/);

Создание таблицы из файлов / изображений из каталога:

$i = 0;
while(false !=($file = readdir($folder))){
if($file != "." && $file != ".."){
    $images[$i]= $file;
    $i++;
    }
}

Случайный выбор:

$random_img=rand(0,count($images)-1);

Показывать на странице:

echo '<img src="images/tips'.$images[$random_img].'" alt="" />';

Надеюсь, это поможет. Конечно, вложите это в <?php ?>.

0 голосов
/ 19 ноября 2009

Вы можете использовать opendir () для чтения имен файлов из этого каталога, сохраняя каждое имя файла в массиве. Затем используйте rand () с минимальными и максимальными значениями, соответствующими ключам массива, чтобы выбрать элемент из массива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...