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

Форум PHP

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

 

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

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

тема: Не работает функция!!!
 
 автор: QestNone   (30.08.2009 в 17:12)   письмо автору
 
 

Есть функция уменьшения размера фотографии!
  function resizeimg($filename, $smallimage, $w, $h)
  {
    $ratio = $w/$h;
    $size_img = getimagesize($filename);
    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;
    }
    else
    {
      $w = $h*$src_ratio;
    }
    $dest_img = imagecreatetruecolor($w, $h);  
    $white = imagecolorallocate($dest_img, 255, 255, 255);       
    if ($size_img[2]==2)  $src_img = imagecreatefromjpeg($filename);                      
    else if ($size_img[2]==1) $src_img = imagecreatefromgif($filename);                      
    else if ($size_img[2]==3) $src_img = imagecreatefrompng($filename); 
    imagecopyresampled($dest_img, $src_img, 0, 0, 0, 0, $w, $h, $size_img[0], $size_img[1]);                
    // сохраняем уменьшенную копию в файл 
    if ($size_img[2]==2)  imagejpeg($dest_img, $smallimage);                      
    else if ($size_img[2]==1) imagegif($dest_img, $smallimage);                      
    else if ($size_img[2]==3) imagepng($dest_img, $smallimage); 
    imagedestroy($dest_img);
    imagedestroy($src_img);
    if (!file_exists($smallimage))
    { return false; } else { return true; }       
  }


передаю данные:
resizeimg('temp/000.jpg', 'temp/000_s.jpg', 1000, 1000)

Файл temp/000.jpg на сервере точно есть, а вот второй не создаётся, хотя функция возвращает true!
Куда девается файл и как в функции file_exists его находит не понятно!

  Ответить  
 
 автор: !   (30.08.2009 в 18:00)
 
   для: QestNone   (30.08.2009 в 17:12)
 

Если temp в пределах DOCUMENT ROOT, то можно выдать ссылку, по ней поймёшь где изображение.
<?php
$url 
preg_replace('#^' preg_quote($_SERVER['DOCUMENT_ROOT'], '#') . '#'''realpath($smallimage));

echo 
'<a href="' $url '">Кликни меня</a>'; exit;

Этот код поставь перед resizeimg().

Чудес не бывает, скорее всего либо в FTP-менеджере список файлов не обновился и ты не увидел, либо перепутал папку temp.

  Ответить  
 
 автор: !   (30.08.2009 в 18:05)
 
   для: !   (30.08.2009 в 18:00)
 

>Этот код поставь перед resizeimg()
Ну я имел ввиду перед return этой функции, конечно.

> $url = preg_replace('#^' . preg_quote($_SERVER['DOCUMENT_ROOT'], '#') . '#', '', realpath($smallimage));
Мудрено, абсолютный адрес необязателен, можешь просто

<?php
echo '<a href="' $smallimage '">Кликни меня</a>';

  Ответить  
 
 автор: sim5   (30.08.2009 в 18:05)   письмо автору
 
   для: QestNone   (30.08.2009 в 17:12)
 

А вывод сообщений конечно отключен?

  Ответить  
 
 автор: QestNone   (30.08.2009 в 18:29)   письмо автору
 
   для: sim5   (30.08.2009 в 18:05)
 

ТАК! все немного поменялось!
ошибка была в функции, точнее в этой строчке:
if (($size_img[0]<$w) && ($size_img[1]<$h)) return true;


т.к. фото которое я изменял было меньше 1000/1000, которые я ставил, то функция всегда выводила true!

  Ответить  
 
 автор: sim5   (30.08.2009 в 18:36)   письмо автору
 
   для: QestNone   (30.08.2009 в 18:29)
 

Если проблемы с путями (оносительно скрипта), то вы получите сообщение. Если проблемы с доступом, то вы тоже получите сообщение. Сам же скрипт создаст вашу копию, при условии, что нет проблем с двумя первыми замечаниями. Кстати, зачем имя у папки такое имя - temp, она у вас временная, только лишь для вышеуказанной операции?

  Ответить  
 
 автор: !   (30.08.2009 в 18:38)
 
   для: QestNone   (30.08.2009 в 18:29)
 

Так-с, по-моему Вы код запускаете один, а редактируете другой, ибо "1" оно может выводить, если функция true возвращает, т.е. echo true; выведет "1" как раз.

В общем, разберитесь что именно Вы редактируете, какую-то именно папку Вы смотрите.

  Ответить  
 
 автор: QestNone   (30.08.2009 в 18:39)   письмо автору
 
   для: !   (30.08.2009 в 18:38)
 

ТАК! все немного поменялось!
ошибка была в функции, точнее в этой строчке:
if (($size_img[0]<$w) && ($size_img[1]<$h)) return true;


т.к. фото которое я изменял было меньше 1000/1000, которые я ставил, то функция всегда выводила true!

  Ответить  
 
 автор: t3ma   (30.08.2009 в 18:48)   письмо автору
 
   для: !   (30.08.2009 в 18:38)
 

он ошибся в этой строчке
if (($size_img[0]<$w) && ($size_img[1]<$h)) return true;
надо заменить на
if (($size_img[0]<$w) && ($size_img[1]<$h)) return false;

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

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