Разное поведение функции создания превью на локальном и удалённом хостинге

VANHALEN

Новичок
Здравствуйте! Я сразу прошу прощения за наглый вопрос, но на то есть крайняя необходимость, сам уже не разберусь. Я вобще довольно плохо знаю пхп, но тем не менее умудряюсь таки иногда делать на нём сайты. Когда то для себя я насписал что-то наподобие CMS, которую до сих пор с успехом использую. Но тут встал вопрос ребром. раньше в фотоальбомах я использовал чужую функцию создания превью. Вызывал её дважды в админке, перед загрузкой фотографии. Первый раз создавал саму превьюшку, второй раз ресайзил большую картинку для нормального просмотра. Функция неплохая, но делала превьюшки пропорциональные (квадрат в который вписывается пропорциональное изображение, остальное заливается цветом). И вот, мне позарез понадобилась лёгкая функция с более гибкими настройками, а конкретно чтобы ещё и квадратные делала превьюшки. Нашёл, подключил.. всё отлично. Но! Чуть подправить просто необходимо. Во первых: я вызываю функцию из другого файла и мне вообще не нужны отправляемые ей заголовки. Ну ладно бы только на заголовки ругалась, я просто отключил показ ошибок, но она на реальном сервере ведёт себя вообще по другому. Она пытается после создания изображения, вывести его в браузер (на локальном такого нет. она просто работает). Причём это у неё не получается. На выданой странице нет никакого исходного кода. Результат в прикреплённом файле. Причём всё, что её положено она всё-таки делает (обрезает и накладывает копирайт). Собственно функция в приложеном файле.

На локалке PHP 5.3.3, GD bundled (2.0.34 compatible)
На сервере PHP 5.2.14 GD bundled (2.0.34 compatible)

ВОПРОС:

- Можно ли избавиться от посылки заголовков?
- Почему такой вот результат? Кстати видимо из-за них.
- Может посоветуете функцию с похожим функционалом и размером, но более актуальную (эта датирована 2009 вроде)
 

Вложения

AmdY

Пью пиво
Команда форума
ой, извиняюсь, а что за версия оперы, давно такого не видел.

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

VANHALEN

Новичок
Ужо смотрел до этого. В том то и дело. Заголовки уже давным давно есть. Мне же не нужно выводить результат в браузер, как видимо изначально было задумано (создание превью на лету с выводом). Мне надо просто тупо сохранить 2 результата и имена с путями записать в базу данных. Я не пойму почкму практически при одинаковых серверах, на локалке всё работает.

вам нужно на время отладки убрать заголовок который говорит браузеру что будет послана картинка. после этого будет выведена ошибка и бинарный хлам - тело картинки.
Боюсь наврать, но кажися бинарники выскакивали, когда я пытался передать метод обрезки в качестве переменной. Я ставил условие: если кратинка меньше 1000 пикселей по большей стороне, то делать из неё большую не надо, просто скопировать и поставить надпись. Короче без заголовков сейчас функция не может понять imagecreatefromjpeg, imagecreatefromgif или imagecreatefrompng.
Ну вобщем идея такая. Заголовки эти видимо предназначались для непросредственного вывода в браузер. А нужно определить тип файла без этой байды, чтобы тупо вызывать функцию.

ой, извиняюсь, а что за версия оперы, давно такого не видел.
Это последняя 11.52 Просто настраиваю под себя по старинке. По новому интерфейс слишком перегруженый. Я прикрепил файлик, если интересно будет. Я и боковые понели настраиваю немнго по старинке. Поиск зато удобный. одна строка поиска и куча кнопок. один раз написал, потом нажимаешь где искать. Можно и мульти кнопки делать. Одно нажатие - поиск например картинок на многих сайтах сразу. Ну и внизу поиск по странице, с выделением по мере ввода.

P.S. Ну и по делу. Другие функции тоже рассматриваю с похожим функционалом. В этой кстати поддержки bmp нет.
 

Вложения

VANHALEN

Новичок
Помогло открытие админки в IE. Он выдал html код. На скрипт вёл себя неадекватно совсем по другой причине. Ошибка была в том месте, где функция вызывалась, а точнее выше её и к самой функции никакого отношения не имела. Разобрался и с заголовками. Нашёл где закоментировать их.
PHP:
    if (($t == 0)&&(file_exists($f))) {
        switch ($type) {
            case 1: //header("Content-type: image/gif");
                $dest = imagecreatefromgif($f) or die ("Cannot Initialize new GD image stream");
                break;
            case 2: //header("Content-type: image/jpeg"); 
                $dest = imagecreatefromjpeg($f) or die ("Cannot Initialize new GD image stream");
                break;
            case 3: //header("Content-type: image/png"); 
                $dest = imagecreatefrompng($f) or die ("Cannot Initialize new GD image stream");
                break;
Но теперь проблемма в следующем.. Я подставил условие до вызова функции, чтобы при размере картинки меньше требуемой по большей стороне, она копировалась без изменений, но всё равно проходила через функцию, чтобы поставить надпись. Надпись теперь кстати тоже передаю в функцию в качестве переменной (так удобнее). Короче если t=0 (тоесть только наложить текст), функция тупо не работет. выдаёт бинарный хлам, картинку не загружает. Наверное это уже разговор для другой темы.

Также непонятен параметр t=2 (вырезать фиксированный кусок.) Зачем это может пригодиться?

Тему наверное можно закрыть.
 

VANHALEN

Новичок
Усё, справился.. Собрал свою функцию по частям.

Умеет:
- Уменьшать картинку пропорционально с подгоном по большей стороне (вторую переменную размера вообще выкинул)
- Вырезать квадрат из центра если картинка горизонтальная и оттуда где обычно морда лица, если вертикальная
- В зависимости от аргументов функции ставить либо граффический, либо текстовой (любым ttf шрифтом) логотип в правый нижний угол. В случае текстового ещё вычисляет какой длинны будет строка и сколько отступить о края
- Перез вызовом делаю проверку, если большая сторона меньше заданного, не увеличитвать фотку а просто ставить логотип и копировать как есть
- Так же перед вызовом нормализуется имя файла (в начало добавляется дата и время загрузки, временная зона, кирилица в транслит, пробелы в _ и всё переводится в нижний регистр)

Вобщем не функция, а сказка получилась.. Настраивается всё как хочешь, работает как часы. Только с PNG вроде какая то беда. В будущем включу туда обработку bmp и ещё каких нибудь плюшек.
 
Сверху