Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

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

 

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

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

тема: добавить в массив названия файлов
 
 автор: Лена   (25.11.2008 в 15:31)   письмо автору
 
 


<?php
  $array_img 
= array();
if (
$dir = opendir("lightbox/images")) {
  while ((
$file = readdir($dir)) !== false) {
  if(
$file!= "." && $file!= ".."){
    
array_push($array_img,$file);
  print 
"<pre>";
  
print_r($array_img);
  print 
"</pre>";
  }
  }  
  
closedir($dir);
}
?>


Можно ли как-то по-другому составить массив из названий файлов, которые входят в данную директорию?

  Ответить  
 
 автор: sim5   (25.11.2008 в 15:52)   письмо автору
 
   для: Лена   (25.11.2008 в 15:31)
 

<?
$array_img 
= array();
foreach (
glob("lightbox/images/*.*") as $filename) $array_img[] = basename($filename);

  Ответить  
 
 автор: Лена   (25.11.2008 в 16:47)   письмо автору
 
   для: sim5   (25.11.2008 в 15:52)
 

Спасибо, получилось.
Интересно вот что. В полученном массиве сначала идут все файлы jpeg, потом все gif, а не вразброс, как при array_push

  Ответить  
 
 автор: sim5   (25.11.2008 в 17:01)   письмо автору
 
   для: Лена   (25.11.2008 в 16:47)
 

А надо разбросать?

  Ответить  
 
 автор: Лена   (25.11.2008 в 17:22)   письмо автору
 
   для: sim5   (25.11.2008 в 17:01)
 

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

  Ответить  
 
 автор: sim5   (25.11.2008 в 18:29)   письмо автору
 
   для: Лена   (25.11.2008 в 17:22)
 

Лучше организовать структуру папок так, чтобы обойтись без рекурсий. Зачем в Lightbox выводить сложную структуры вложенных папок? Может быть разделить вывод по разделам (категориям)?

  Ответить  
 
 автор: Лена   (25.11.2008 в 21:31)   письмо автору
 
   для: sim5   (25.11.2008 в 18:29)
 

Попробую по разделам выводить. У меня все равно в базе в таблице картинок есть id модуля. Что получится, покажу.

  Ответить  
 
 автор: BinLaden   (25.11.2008 в 21:33)   письмо автору
 
   для: Лена   (25.11.2008 в 17:22)
 

glob() по умолчанию сортирует полученный список файлов.

  Ответить  
 
 автор: Лена   (25.11.2008 в 23:34)   письмо автору
 
   для: BinLaden   (25.11.2008 в 21:33)
 

Теперь расскажу, что делаю.
Для каждой картинки создается уменьшенная копия, все эти копии выводятся в броузер по 4 штуки в ряд. Кликаешь на уменьшенной картинке - появляется ее реальный размер.


<?php
//уменьшаем картинки
  
function resizeimg($filename, $smallimage, $w, $h){
   
// коэффициент сжатия изображения, которое будем генерить
    
$ratio = $w/$h;
    
// размеры исходного изображения
        
$size_img = getimagesize($filename);
        
$type = $size_img['mime'];

        
// Если размеры меньше, то масштабирования не нужно
    
if (($size_img[0]<$w) && ($size_img[1]<$h)) return true;
    
// получим коэффициент сжатия исходного изображения
    
$src_ratio=$size_img[0]/$size_img[1];

    
// размеры уменьшенной копии, сохраняем пропорции источника
    
if ($ratio < $src_ratio)
      
$h = $w/$src_ratio;    // $h - высота уменьшенной копии
    
else
      
$w = $h*$src_ratio; // $w - ширина уменьшенной копии

    
$dest_img = imagecreatetruecolor($w, $h);  // $dest_img - уменьшенная копия
    
$white = imagecolorallocate($dest_img, 255, 255, 255);

         switch(
$type){
      case 
"image/jpeg": $src_img = imagecreatefromjpeg($filename); break;
      case 
"image/png":  $src_img = imagecreatefrompng($filename);  break;
      case 
"image/gif":  $src_img = imagecreatefromgif($filename);  break;
      default: return 
false;
    }
    
// масштабируем изображение
    
imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h,
$size_img[0], $size_img[1]);
    
// сохраняем уменьшенную копию в файл
     
switch($type){
      case 
"image/jpeg":
      
$img = imageJpeg($dest_img,$smallimage);
      break;
      case 
"image/png":  
      
$img = imagePng($dest_img,$smallimage);
      break;
      case 
"image/gif":  
      
$img = imageGif($dest_img,$smallimage);
      break;
    
    }
// чистим память от созданных изображений
imagedestroy($dest_img);
imagedestroy($src_img);
return 
$smallimage;
}

//директория, где лежат картинки
$array_img = array(); 
foreach(
glob("lightbox/images/*.*") as $filename)
$array_img[] = basename($filename);

$galery = "<table border = '1px'>";
                for(
$i=0;$i<count($array_img);$i++){
                
$file = $array_img[$i];
                
$size = getimagesize("lightbox/images/" . $file);
                
//$type = $size['mime'];
                        
if(!($i%4)) $galery .= "<tr>";
                        
//горизонт. или вертик. картинка
                        
if($size[0]>$size[1]){
                        
$img = resizeimg("lightbox/images/" . $file, "lightbox/images/copy/" . $file, 180, 100);
                        
header("Content-type:" . $type);
                        
$galery .= "<td><a href='lightbox/images/" . $file . "'><img border='0' src='" . $img . "' 
width='180' height='100' alt = '" 
.$file . "'></a></td>";
                        }else{ 
                        
$img = resizeimg("lightbox/images/" . $file, "lightbox/images/copy/" . $file, 120, 180);
                        
header("Content-type:" . $type);
                        
$galery .= "<td><a href='lightbox/images/" . $file . "'><img border='0' src='" . $img . "' 
width='120' height='180' alt = '" 
.$file . "'></a></td>";
                        }
                    if(!(
$i+1%4)) $galery .= "</tr>";
                }
$galery .= "</table>";
print 
$galery;
?>


Проблема в типе изображения. У меня сейчас выводятся только jpg -файлы. Потому что при передаче заголовка не определена $type. Пробую ее определить $type = $size['mime']; - и у меня вообще ничего не выводится. Пустая страница. Что мне делать?

  Ответить  
 
 автор: Trianon   (26.11.2008 в 00:04)   письмо автору
 
   для: Лена   (25.11.2008 в 23:34)
 

вызовы header() здесь вообще только мешают.

  Ответить  
 
 автор: sim5   (26.11.2008 в 05:39)   письмо автору
 
   для: Лена   (25.11.2008 в 23:34)
 

Во-первых убрать передачу заголовков (их нужно передавать, если изображение формируется и отдается в браузер средствами GD). Во-вторых не делать так - готовить малые копии изображений нужно при загрузке их на сервер, а не на лету, для показа галереии в Lightbox.

  Ответить  
Rambler's Top100
вверх

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