Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Случайный вывод картинки...
 
 автор: EvgenLog   (13.10.2005 в 22:49)   письмо автору
 
 

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

<?php
$main_img_folder 
"./$main_files_dir/Gallery/Interiors/";
$open_main_img_folder opendir($main_img_folder);
$image_extensions = array("jpg""png""bmp""jpe""jpeg");

while(
$images readdir($open_main_img_folder))
{
   
srand((double)microtime() * 1000000);
   
$img_name_array explode("."$images);
   
$img_type end($img_name_array);

   if(
is_file($main_img_folder.$images) && in_array($img_type$image_extensions))
   {
          
$filename "$main_img_folder/config.ini";
         
// Читаем содержимое файла $filename
          
$fd fopen($filename"r");
          
$bufer fread($fd,filesize($filename));
          
fclose($fd);
         
// Разбиваем содержимое файла на подстроки 
         // разделителем которых выступают , 
         // помещая их в массив $phrase 
          
$rand_img explode("\r\n",$bufer);
        
// Получаем случайный индекс массива $phrase 
          
$index rand(0,count($rand_img)-1);
          
// Вывод
          
$source=$main_img_folder.$rand_img[$index];

          
// выводим картинку на экран
                     
$size_img getimagesize($main_img_folder."/".$rand_img[$index]);
                     
$name basename ($images,".jpg");
                     echo 
"<table align='left' valign='top' border='0'>
                        <tr>
                           <td width='25'></td>
                        </tr>
                     </table>
                        <table align='left' valign='top' border='1'>
                           <tr>
                              <td align='center'>
                                 &#200;&#237;&#242;&#229;&#240;&#252;&#229;&#240;&#251;
                              </td>
                           </tr>
                           <tr>
                              <td>
                                 <img src='img.php?file=
$source' border='0' alt='$name'>
                              </td>
                           </tr>
                           <tr>
                              <td>
                                 <center>
                                 <font color='#2954D1'><b>
$size_img[0]x$size_img[1]</b><br>
                                 <a href='
$main_url/$main_files_dir/Gallery/Interiors/$name.jpg'><b>$name</b>
                                 </font>
                                 </center>
                              </td>
                           </tr>
                        </table>"
;
    }
}
?>

Заменил переменные и пути... Вместо разделителя поставил "\r\n"... Построчно выводит...
В конце концов выводится не одна картинка, а все... Что не так?

   
 
 автор: DDK   (13.10.2005 в 23:16)   письмо автору
 
   для: EvgenLog   (13.10.2005 в 22:49)
 

Вы рандомайзер и вывод HTML-кода поставили в тело цикла. Соответственно он будет с каждым циклом дублироваться и с новой картинкой. Извиняюсь, переработать ваш код времени нет, но, надеюсь, вы поняли свою ошибку.

   
 
 автор: EvgenLog   (14.10.2005 в 08:05)   письмо автору
 
   для: DDK   (13.10.2005 в 23:16)
 

Ага... Понял... Сейчас исправлю. Спасибо!

   
 
 автор: EvgenLog   (14.10.2005 в 08:41)   письмо автору
 
   для: EvgenLog   (14.10.2005 в 08:05)
 

Переработал код след. образом...

<?php
$main_img_folder 
"./$main_files_dir/Gallery/Interiors/";
$open_main_img_folder opendir($main_img_folder);
$image_extensions = array("jpg""png""bmp""jpe""jpeg");

          
$filename "$main_img_folder/config.ini";
          
// Читаем содержимое файла $filename
          
$fd fopen($filename"r");
          
$bufer fread($fd,filesize($filename));
          
fclose($fd);
          
// Разбиваем содержимое файла на подстроки
          // разделителем которых выступают ,
          // помещая их в массив $phrase
          
$rand_img explode("\r\n",$bufer);
          
// Получаем случайный индекс массива $phrase
          
$index rand(0,count($rand_img)-1);

while(
$rand_img[$index]= readdir($open_main_img_folder))
{
   
$img_name_array explode("."$rand_img[$index]);
   
$img_type end($img_name_array);

   if(
is_file($main_img_folder.$rand_img[$index]) && in_array($img_type$image_extensions))
   {

          
// Выводим фразу
          
$source=$main_img_folder.$rand_img[$index];

          
// выводим картинку на экран
                     
$size_img getimagesize($main_img_folder."/".$rand_img[$index]);
                     
$name basename($rand_img[$index],".jpg");
                     echo 
"<table align='left' valign='top' border='0'>
                        <tr>
                           <td width='25'></td>
                        </tr>
                     </table>
                        <table align='left' valign='top' border='1'>
                           <tr>
                              <td align='center'>
                                 Интерьеры
                              </td>
                           </tr>
                           <tr>
                              <td>
                                 <img src='img.php?file=
$source' border='0' alt='$name'>
                              </td>
                           </tr>
                           <tr>
                              <td>
                                 <center>
                                 <font color='#2954D1'><b>
$size_img[0]x$size_img[1]</b><br>
                                 <a href='
$main_url/$main_files_dir/Gallery/Interiors/$name.jpg'><b>$name</b>
                                 </font>
                                 </center>
                              </td>
                           </tr>
                        </table>"
;
    }
}
?>

Выводит опять все фотки... В чём дело???

   
 
 автор: Football   (14.10.2005 в 20:32)   письмо автору
 
   для: EvgenLog   (14.10.2005 в 08:41)
 

Приведите пожалуйста пример файла, в котром это всё храниться.
Да, и сколько картинок необходимо выводить? Если одну, то цикл не нужен.

   
 
 автор: Football   (14.10.2005 в 20:47)   письмо автору
 
   для: EvgenLog   (14.10.2005 в 08:41)
 

Вот в общем, написал скрипт. Он если надо вывести одну картнику:

<?
Error_Reporting
(E_ALL E_NOTICE); // убираем ошибки
$dir="photo/"// путь к дирректории
$file_img="img.txt"// файл с картинками, описаниями
$img=file($file_img); // записываем строку в массив
$img_count=count($img); // считаем кол-во элементов
$img_vivod=rand(0,$img_count-1); // выбираем случайную картинку
$razdelitel="|"// это разделитель строки
$img_param=explode($razdelitel,$img[$img_vovod]); // разделяем строку, всё записываем в массив
/*
Ну а здесь ты уже сам сделаешь таблицу со своими рисунками. Там думаю уже сам додумаешься!
*/
print "Вот тут и будет таблица с картинками";
?>

Сам файл имеет конструкцию:

1.jpg|Первая фотка
2.jpg|Вторая фотка
3.jpg|Третья фотка

   
 
 автор: EvgenLog   (14.10.2005 в 23:33)   письмо автору
 
   для: Football   (14.10.2005 в 20:47)
 

Хм... А как тогда массив обойти? Мне ведь нужно ещё и масштабировать их налету...

   
 
 автор: EvgenLog   (14.10.2005 в 23:48)   письмо автору
 
   для: EvgenLog   (14.10.2005 в 23:33)
 

Пример файла такой...
...
...
31.jpg
11.jpg
...
...
Выводить нужно одну случайныю картинку и масштабировать одновременно... Пробовал убрать цикл... Не работает...

   
 
 автор: Евгений Петров   (15.10.2005 в 00:02)   письмо автору
 
   для: EvgenLog   (14.10.2005 в 23:48)
 

Попробуй такой код. Правда он не масштабирует картинки:
<?
function Tree($directory)
{
  global 
$pathes;
  
$dir opendir($directory);
  while(
$file readdir($dir))
  {
    if(
is_file($directory."/".$file) && preg_match("/gif|bmp|jpg|png|jpeg/i",strrchr($file".")))
      
$pathes[] = $directory."/".$file;
    elseif(
is_dir($directory."/".$file) && ($file!=".") && ($file!=".."))
      
Tree($directory."/".$file);
  }
  
closedir($dir);
}
Tree("C:\Pictures");
echo 
$pathes[rand(0,count($pathes))];
?>

и если картинок очень много будет, то память неэкономно расходуется.

   
 
 автор: EvgenLog   (15.10.2005 в 00:11)   письмо автору
 
   для: Евгений Петров   (15.10.2005 в 00:02)
 

Спасибо... Попробую, но сначала добъю этот код! У меня получилось убрать цикл - работате, но картинка то выводится, то не выводится... Он видимо, что-то не то ещё выводит, вот таким код стал...

<?php
$main_img_folder 
"./$main_files_dir/Gallery/Interiors/";
$open_main_img_folder opendir($main_img_folder);
$image_extensions = array("jpg""png""bmp""jpe""jpeg");

          
$filename "$main_img_folder/config.ini";
          
// Читаем содержимое файла $filename
          
$fd fopen($filename"r");
          
$bufer fread($fd,filesize($filename));
          
fclose($fd);
          
// Разбиваем содержимое файла на подстроки
          // разделителем которых выступают ,
          // помещая их в массив $phrase
          
$rand_img explode("\r\n",$bufer);
          
// Получаем случайный индекс массива $phrase
          
$index rand(0,count($rand_img)-1);

   if(
is_file($main_img_folder.$rand_img[$index]))
   {

          
// Выводим фразу
          
$source=$main_img_folder.$rand_img[$index];

          
// выводим картинку на экран
                     
$size_img getimagesize($main_img_folder."/".$rand_img[$index]);
                     
$name basename($rand_img[$index],".jpg");
                     echo 
"<table align='left' valign='top' border='0'>
                        <tr>
                           <td width='25'></td>
                        </tr>
                     </table>
                        <table align='left' valign='top' border='1'>
                           <tr>
                              <td align='center'>
                                 Интерьеры
                              </td>
                           </tr>
                           <tr>
                              <td>
                                 <img src='img.php?file=
$source' border='0' alt='$name'>
                              </td>
                           </tr>
                           <tr>
                              <td>
                                 <center>
                                 <font color='#2954D1'><b>
$size_img[0]x$size_img[1]</b><br>
                                 <a href='
$main_url/$main_files_dir/Gallery/Interiors/$name.jpg'><b>$name</b>
                                 </font>
                                 </center>
                              </td>
                           </tr>
                        </table>"
;
    }
?>

   
 
 автор: Boss   (15.10.2005 в 00:34)   письмо автору
 
   для: EvgenLog   (15.10.2005 в 00:11)
 

Попробуйте так:


$pictures = array('11.jpg', '12.jpg'); ' и так далее, загоняйте в массив картинки
srand((float)microtime()*100000000);
shuffle($pictures);
for ($i=0; $i<1;$i++)
{ echo $pictures[$i]; }

   
 
 автор: EvgenLog   (15.10.2005 в 00:59)   письмо автору
 
   для: Boss   (15.10.2005 в 00:34)
 

загонять каждую картинку в массив? Их количество будет постоянно менятся, они будут загружаться пользователями...
Вот объясните мне кто-нибудь... Я изменил скрипт вот так...

<?
...
$img_name_array explode("."$rand_img[$index]);
          
$img_type end($img_name_array);


if(
is_file($main_img_folder.$rand_img[$index]) && in_array($img_type$image_extensions)
&& 
$name basename($rand_img[$index],".jpg"))
   {
      
$source=$main_img_folder.$rand_img[$index];

          
// выводим картинку на экран
                     
$size_img getimagesize($main_img_folder."/".$rand_img[$index]);
...
?>

Теперь с вероятностью в 30% - 40% ничего не показывается...
Я прикрепил полный код скрипта, может кто посмотрит в чём там дело?

   
 
 автор: Football   (15.10.2005 в 13:00)   письмо автору
 
   для: EvgenLog   (14.10.2005 в 23:33)
 

Что значит масштабировать картинку?
И зачем тебе массив обходить, если у тебя все данные файла в массив записываются?

   
 
 автор: OZ_   (15.10.2005 в 13:11)   письмо автору
 
   для: Football   (15.10.2005 в 13:00)
 

А каждой картинке соответствует своя подпись? Если так - используйте код Football, иначе код Евгения Петрова.

   
 
 автор: EvgenLog   (15.10.2005 в 13:16)   письмо автору
837 байт
 
   для: OZ_   (15.10.2005 в 13:11)
 

Короче напарился я с этим кодом, но написал всё таки свой и он великолепно работает, но пока только для одного формата "*.jpg".
Он прикреплён к сообщению, если кому интересно, то посмотрите, обсудите, укажите на недостатки... И т.д.... Всем спасибо за помощь!

P.S. Скрипт использует ещё один файл... Это как раз тот, что масштабирует картинки на лету... Но его я не стал прикреплять...

   
 
 автор: Football   (15.10.2005 в 16:25)   письмо автору
 
   для: EvgenLog   (15.10.2005 в 13:16)
 

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

$max:=2; // кол-во выводимых картинок
for ($i=0;$i<$max;$i++) {
// Тут будет идти сам код
}

   
 
 автор: EvgenLog   (15.10.2005 в 20:18)   письмо автору
 
   для: Football   (15.10.2005 в 16:25)
 

Не мне одну надо... Но всё равно спасибо! Вдруг пригодится...

   
 
 автор: Евгений Петров   (15.10.2005 в 21:29)   письмо автору
 
   для: Football   (15.10.2005 в 13:00)
 

1) EvgenLog писал что ему надо вывести картинк и масштабировать её.
2) Где я там массив обхожу, скрипт рекурсивно обходит каталог и вложенные в него каталоги ищет графические файлы и заносит пути в массив, а потом из массива рандомом выбирается один файл.

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования