2017-02-07 7 views
1

У меня есть следующий код php ниже, который рандомизирует изображения заголовков при загрузке страницы.Задавать конкретные файлы, содержащие текст в определенном каталоге?

<?php 
function displayBackground() { 
global $site; 
global $dirimgpth; 

$dir = 'uploads/product-images/' .$dirimgpth. ''; 
$cnt = 0; 
$bgArray= array(); 

if ($handle = opendir($dir)) { 

    while (false !== ($entry = readdir($handle))) { 

    $pathToFile = $dir.$entry; 
    if(is_file($pathToFile)) 
    { 
     if(getimagesize($pathToFile)!=FALSE) 
     { 
      $bgArray[$cnt]= $pathToFile; 
      $cnt = $cnt+1; 
     } 
    } 
} 
$myRand = rand(0,($cnt-1)); 
$val = $bgArray[$myRand]; 

} 

closedir($handle); 

echo($val); 
} 
?> 

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

Я хотел был бы изменить приведенный выше код, чтобы нацелить папку каталога, но только получить файлы изображений с определенным текстом «-header.jpg» в имени файла.

Папка каталог содержит файлы, такие как следующие:

  1. doors.jpg
  2. windows.jpg
  3. алюминиево-thumb.jpg
  4. оконного header.jpg
  5. оранжереи заголовка .jpg
  6. tiled-thumb.jpg
  7. roof-header.jpg

Результат, который мне нужен, так что случайный заголовок выводит только изображения «4,5,7» из приведенного выше списка.

ответ

0

Если $ entry - это ваше имя файла, вы можете проверить, содержит ли оно «-header» по имени или нет.

while (false !== ($entry = readdir($handle))) { 
    if (strpos($entry, '-header') !== false) { 
    $pathToFile = $dir.$entry; 
    // follow with your code 
    } 
    } 
+0

Большое спасибо за ваш ответ, теперь он работает так, как я этого хотел. Очень ценится – Craig

+0

Отличный !! Также, как сказал @Marcin Orlowski, код, который вы написали, будет иметь ограничение производительности, так как количество файлов увеличивается в вашей папке. – JoshulSharma

0

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

Я хотел был бы изменить приведенный выше код, чтобы нацелить папку каталога, но только получить файлы изображений с определенным текстом «-header.jpg» в имени файла.

Поскольку эти JPGs не изменены/добавлены/удалены так часто, как я полагаю, вы можете безопасно создать статический массив (обновляется при добавлении/удалении изображения), содержащий все имена файлов по вашему выбору, а затем просто выбрать случайный запись из этого массива.

Результат, который мне нужен, так что случайный заголовок выводит только изображения «4,5,7» из приведенного выше списка.

glob(), но опять же - это неправильный подход из-за штрафа за производительность.

Кроме того, ваш текущий код еще более болезненен, потому что вы, кажется, не только просматриваете папку, но и читаете размеры изображения. Это неправильно, потому что вам просто нужно это для изображения по вашему выбору, не для всех.