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

Форум PHP

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

 

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

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

тема: создание миниатюр
 
 автор: Roma   (06.08.2007 в 14:12)   письмо автору
 
 

Всем привет!!!
Подскажите пожалуйста, в чем моя ошибка...
Взял скрипт с форума, который создает миниатюрки.
Создаю их при выборке из БД.
Миниатюры должны храниться в папке small_photo/раздел/подраздел/.
Есть проверка на существование папок "раздел" и "подраздел". Собственно проблема в том, что папки создаются, а миниатюрки не копируются, при этом никаких ошибок скрипт не выводит...

<?php

  
function resizeimg($filename$smallimage$w$h$color)
  {
    list(
$width$height$type$attr) = @getimagesize$smallimage );
    
// определим коэффициент сжатия изображения, которое будем генерить
    
$ratio $w/$h;
    
// получим размеры исходного изображения
    
list($width$height$type$attr) = @getimagesize$filename );
    
// Если размеры меньше, то масштабирования не нужно
    
if (($width<$w) && ($height<$h)) return true;
    
// получим коэффициент сжатия исходного изображения
    
$src_ratio=$width/$height;

    
// Здесь вычисляем размеры уменьшенной копии, чтобы при масштабировании сохранились
    // пропорции исходного изображения
    
if ($ratio<$src_ratio)
    {
      
$h $w/$src_ratio;
    }
    else
    {
      
$w $h*$src_ratio;
    }
    
// создадим пустое изображение по заданным размерам
    
$dest_img imagecreatetruecolor($w$h);
    
$white imagecolorallocate($dest_img255255255);
    if (
$type==2)  $src_img imagecreatefromjpeg($filename);
    else if (
$type==1$src_img imagecreatefromgif($filename);
    else if (
$type==3$src_img imagecreatefrompng($filename);
    
    
// масштабируем изображение функцией imagecopyresampled()
    // $dest_img - уменьшенная копия
    // $src_img - исходной изображение
    // $w - ширина уменьшенной копии
    // $h - высота уменьшенной копии
    // $width - ширина исходного изображения
    // $height - высота исходного изображения
    
imagecopyresampled($dest_img$src_img0000$w$h$width$height);
   
    
// сохраняем уменьшенную копию в файл или выводим на экран
      
if ($type==1imagegif ($dest_img$smallimage);
        else if (
$type==2imagejpeg($dest_img$smallimage);
           else if (
$type==3imagepng ($dest_img$smallimage);
    
    
// чистим память от созданных изображений
    
imagedestroy($dest_img);
    
imagedestroy($src_img);
    return 
true;
  }
    require (
"./inc/config.inc");
    
$query=mysql_query("select * from photo order by ID_PHOTO limit 5;");
    if(
$query)
    {
        while(
$res=mysql_fetch_array($query))    
        {
            
//в таблице photo поле FILENAME содержит путь к файлу, начиная с папки photo
    // т.е photo/раздел/подраздел/имя_файла
   
preg_match("/photo\/+([0-9]+)\/([0-9)]+)\/(.*)/i",$res['FILENAME'],$str);
            
print_r($str);
            
chdir(DIR_FS_DOCUMENT_ROOT."small_photo/");
            if(!
is_dir($str[1]))
            {
                
mkdir($str[1]);
                
chmod($str[1],'0755');
            }
            
chdir($str[1]);
            if(!
is_dir($str[2]))
            {
                
mkdir($str[2]);
                
chmod($str[2],'0755');
            }
            
resizeimg($res['FILENAME'],"small_".$res['FILENAME'],100,100,0);
            echo
"<img src=small_".$res['FILENAME']." width='100' height='100'>&nbsp;";
        }    
    }
?>

Надеюсь, объяснил понятно, заранее спасибо

   
 
 автор: Roma   (06.08.2007 в 15:19)   письмо автору
 
   для: Roma   (06.08.2007 в 14:12)
 

Ошибка связана с функцией chdir.
Немного изменил код:

<?php
require ("./inc/config.inc");
    
$query=mysql_query("select * from photo order by ID_PHOTO limit 5;");
    if(
$query)
    {
        while(
$res=mysql_fetch_array($query))    
        {
            
preg_match("/photo\/+([0-9]+)\/([0-9)]+)\/(.*)/i",$res['FILENAME'],$str);
            if(!
is_dir(DIR_FS_DOCUMENT_ROOT."small_photo/".$str[1]))
            {
                
chdir(DIR_FS_DOCUMENT_ROOT."small_photo/");
                
mkdir($str[1]);
                
chmod($str[1],'0777');
            }            
            if(!
is_dir(DIR_FS_DOCUMENT_ROOT."small_photo/".$str[1]."/".$str[2]))
            {
                
chdir(DIR_FS_DOCUMENT_ROOT."small_photo/".$str[1]);
                
mkdir($str[2]);
                
chmod($str[2],'0777');
            }
            
$filename="small_".$res['FILENAME'];
            
resizeimg($res['FILENAME'],$filename,100,100,0,0);
                
//echo"ok";else echo"no";
            
echo"<img src=small_".$res['FILENAME']." width='100' height='100'>&nbsp;";
        }    
    }
?>

Теперь, если папки /раздел/подраздел/ существуют, миниатюры создаются, если же не существуют, создаются папки, и только при повторном обновлении страницы создаются миниатюры
В чем причина?

   
 
 автор: Roma   (06.08.2007 в 16:34)   письмо автору
 
   для: Roma   (06.08.2007 в 15:19)
 

нашел причину: все это связано с chdir.
Теперь другая проблема: файл размеров 300кб и разрешением 1600х1200 не принимает.
Это связано с какими-то ограничениями на размер или разрешение, или ошибка в коде?

   
 
 автор: Proger   (06.08.2007 в 17:12)   письмо автору
 
   для: Roma   (06.08.2007 в 16:34)
 

Вывод ошибок включите и увидете! А если нек увидите ничего про это, то ошибка в коде. но это врятли....

   
Rambler's Top100
вверх

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