Проблема с GD

  • Автор темы Автор темы Anton63
  • Дата начала Дата начала

Anton63

Новичок
Проблема с GD

Привет!
Выложил сайт на Hut.ru
Пытаюсь сделать так, что бы при добавлении вместе с ней добавлялось сжатое изображение формата JPEG.
Вот код:

PHP:
if(is_uploaded_file($_FILES['img']['tmp_name']))//перемещение картинки на сервер
{
  $f_name = $_FILES['img']['name'];
  $path_img = '../img_ans/';
  $path_tmp = '../tmp/img_ans/';
  $final_width = 400;
  if(copy($_FILES['img']['tmp_name'], "../tmp/img_ans/".$f_name))
    {
    //добавление данных в БД и сжатие изображения
    $im = imagecreatefromjpeg($path_tmp.$f_name);
    $ox = imagesx($im);  //ширина и высота загруженого изображения
    $oy = imagesy($im);
    $nx = $final_width; //ширина и высота сжатого изображения
    $ny = floor($oy * ($final_width / $ox));
    $nm = imagecreatetruecolor($nx, $ny); //создание формы для сжатого изображения
    imagecopyresized($nm, $im, 0,0,0,0,$nx,$ny,$ox,$oy);//вставка в форму
    //Вставляем отредактированое изображение в зависимости от формата    
    imagejpeg($nm, $path_img . $name);
    unlink($path_tmp . $f_name);
  }
}


На этапе, где функция imagecreatefromjpeg() всё сткпарится, скрипт дальше не выполняется, страница не загружается полностью...

phpinfo() пишет следующее:

GD Support enabled
GD Version bundled (2.0.28 compatible)
FreeType Support enabled
FreeType Linkage with freetype
GIF Read Support enabled
GIF Create Support enabled
JPG Support enabled
PNG Support enabled
WBMP Support enabled
XBM Support enabled

Подскажите пожалуйсто в чём проблема... Уже с месяц с этим мучаюсь... Никто подсказать ничего не может... Чё мне делать???
 
SiMM
Прочитал, что то понял, что то нет...

error_reporting(E_ALL); не ругается на скрипт. В логах сервера ничего нет...
 
1 проверить наличие $path_tmp.$f_name
2 если нет - проверить права на запись $path_tmp

вообще, перемещать файл в $path_tmp есть суета излишняя. работай от $_FILES['img']['tmp_name']
 
Agr
Заменил на:
$im = imagecreatefromjpeg($_FILES['img']['tmp_name']);

echo $_FILES['img']['tmp_name']; пишет "/var/tmp/phpWSVeeW", т.е. он его закачал на сервер...

Права на папку стоят 666

На локалхосте всё работает как часы... А на хосте ничего не работает...))
Я вот думаю, что проблема скорее всего в библиотеке gd... Подскажите, может её как нибуть настроить или подключить надо... может что нибудь надо прописать в скрипте или .htaccess???
 
Anton63
Что возвращает функция imagecreatefromjpeg в твоем случае проверить можешь?
 
damngood
эээ... нет... как проверить не подскажешь???

$im = imagecreatefromjpeg($_FILES['img']['tmp_name']);
$ox = imagesx($im);

Просто если бы он что то передавал в $im, то можно было бы проверить... но он даже не переходит к следующей функции(т.е. imagesx()).

Я ставил echo "1"; до imagecreatefromjpeg() и echo "2"; после... так вот он 1 пишет, а 2 нет...
 
Если на то пошло, то сделай

var_dump(imagecreatefromjpeg($_FILES['img']['tmp_name']));

ссылку на дебаг мануал тебе давали. Там это описано.

Вообще же при отсутствии файлы, там должен был вылезти warning
 
1 попробуй с другим jpeg. Они бывают битые, и тогда бы обработка там и споткнулась, вот только отсутствие ошибок мне не нравится

2
выполни чтото другое простое, прочитай в <IMG> напр это:
Header("Content-type: image/jpeg");
$im=ImageCreate(100,100);
$grey=ImageColorAllocate ($im, 150,150,150);
ImageFill($im, 0,0,$grey);
ImageJpeg($im);
ImageDestroy($im);
 
При var_dump(imagecreatefromjpeg($_FILES['img']['tmp_name'])); ничего не происходит... ничего не выводится и скрипт дальше не работает...

Проверил, что изображения на сервер закачиваются, но битые... либо вообще не отображаются, либо с сильными искажениями... на хосте написано, что надо в .htaccess добавить строку "CharsetDisable On", я её добавил уже давно... но изображения всё равно битые...
 
imagecreatefromjpeg возвращает false в случае ошибки (кстати в мануале не написано что она кидает warning)
еще можно проверить результат ф-циями is_resource, get_resource_type

можно проверить вообще является ли изображением загруженный файл и определить тип изображения ф-цией getimagesize еще до вызова imagecreatefromjpeg

ну нафиг такие хостинги с CharsetDisable..
 
ini_set("display_errors","on"); в начале скрипта

-~{}~ 11.11.09 14:10:

вообще выполни phpinfo(); и посмотри там в каком значении установлена директива display_errors

-~{}~ 11.11.09 14:12:

только сначала выполни до ini_set, чтоб посмотреть, как было, а потом переставь после ini_set, чтоб посмотреть, как стало
 
A1x
В мануале и не будет написано, это просто факт.

-~{}~ 11.11.09 14:53:

Как вариант в начале скрипта

ini_set('gd.jpeg_ignore_warning', 1); Если версия выше 5.1.3 и фыйл битый попался
 
Я думаю может просто хост сменить??? На платном таких проблем то быть наверное не должно... На денвере то у меня всё отлично работает...
 
попробуйте еще
<IfModule mod_charset.c>
CharsetRecodeMultipartForms off
</IfModule>

но лучше хостинг сменить.
 
неа... ничего не помогает... буду хост менять тогда... и на hut.ru больше ни ногой... тех. поддержка там, кстати, никакая... мне даже не отвечают на письма...
 
Сверху