Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. 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_img255255255);

         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_img0000$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/" $file180100);
                        
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/" $file120180);
                        
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 Яндекс.Метрика Яндекс цитирования