GD+TTF != параллельная генерация баннеров

NA

Guest
GD+TTF != параллельная генерация баннеров

Первое и главное: все работает прекрасно! Русские надписи выводятся, шрифты грузятся по абсолютным и относительным путям - словом, коммунизм по полной программе.

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

На мой взгляд, это может быть вызвано конфликтами при параллельном обращении к файлу шрифта. Вопрос: Как побороть этот глюк?

И продолжение проблемы: пошел другим путем, нашел кучу т.н. "модифицированых" шрифтов для GD, в виде c+h+png файлов. Если бы "вклеить" шрифт в сам сценарий, думается, проблема с доступом решилась бы сама собой, НО: как это сделать, я не смог нигде найти.

Заранее спасибо ;)
 

fixxxer

К.О.
Партнер клуба
Ответа на твой вопрос не знаю, но генерить такого рода картинки на лету очень расточительно. Если бы ты у нас хостился, по башке бы получил. :)
 

ONK

Пассивист PHPСluba
NA, помоему тут проблемма не одновременном доступе к файлам шрифтов, а почти наверняка в работе ПХП с памятью... Потому и апач падает (само собой что пхп в этом случае должен быть установлен модулем апача).

Попробуй заюзать ПХП в CGI режиме, вполне реально что проблемма исчезнет.
 

fixxxer

К.О.
Партнер клуба
Тогда у него будет другая проблема - Premature end of headers :)

Ваще, нефиг так ПХП загружать. Кэшировать картинки надо.
 

NA

Guest
Apache 1.3.27, PHP 4.3.3RC

Про расточительность согласен полностью, просто каприз такой в голову ударил - рисовать баннер в виде календарного листочка, но кроме даты, выводить текущее время, вроде как "...время не ждет" ((с)Чайф ;)

fixxxer
...а какой вариант ты бы предложил? В принципе, можно их создавать раз в минуту (а, если убрать время, то и раз в сутки, при наступлении новой даты) - не теряя идеи "время не ждет", но здесь у меня полный пробел, как правильно отслеживать смену минуты (даты).
 

fixxxer

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

Календарные листочки тоже заранее можно заготовить, их всего 7 разных штук надо :) Ну и генерить новый в 0:00 по crontab. (или при первом обращении после смены суток).

Если вывод текстом не подходит (фонт какой-нибудь хитрый), можно заготовить картинки с циферками... :) (прозрачные гифы)
 

NA

Guest
...ты имеешь в виду, что, если выводить только ОДНУ текстовую строку, проблема исчезнет? Я, в общем-то, и так рисую по заранее готовому фону, правда, в несколько строк - число, месяц, день недели, время... я тогда это дело подоптимизирую, и завтра-послезавтра отчитаюсь, чем все кончилось ;)

P.S.: Если все так, как описываетONK, то и ImageCopy вместо ImageTTFText мало чем должен помочь.
Хотя: если я отключаю только вывод текста, но рисую всякие там круги-прямоугольники, ошибка не возникает. Поэтому я и думаю, что дело кнокретно в выводе текста, а самым слабым местом мне видится доступ к файлу шрифта.
 

NA

Guest
> Календарные листочки тоже заранее можно заготовить, их всего 7 разных штук надо

неее... их 14 надо - на серые будни и яркие праздники поправка ;)
 

ONK

Пассивист PHPСluba
NA, ты прверь на Unix сервере (если дадут), уверен там проблемм не будет. Баги проявляются там где они есть, и нет ничего удивително в том, что отказавшись от использования одной из функций, вдруг прекратилось проявление бага.

ПС, как условно параллельный доступ к одному файлу на чтение может уронить апач? Никак.

ППС. У меня под виндой генератор графиков с русским текстом при достижении некоторого количества запросов в секунду начинает давать утечку памяти в главном демоне Апча (с чего бы), раздувая его до сотен мегабайт. Спасает тлько перезапуск Апача.
 

fixxxer

К.О.
Партнер клуба
Ясно, что доступ к одному и тому же файлу на чтение совершенно не причем. Скорее всего, при таком количестве запросов становится плохо Апачу, ПХП или екстеншену (а в результате плохо все равно Апачу) :). Но снизить нагрузку можно запросто.

Кстати, зачем ImageCopy? Что, все уже забыли о тех временах, когда верстали HTML и накладывали на фоновую картинку (<table ... background="..">) сверху другую (<img...>)? :) Так вот, это самый производительный способ. :)
 

fixxxer

К.О.
Партнер клуба
Я бы вообще весь календарь сделал без использования GD... :)
 

NA

Guest
ONK
я под Фрю буду выкладывать результат, но тестить там пока не смогу, скорее всего. А мысль про исчезновение бага со сменой платформы мне светит и греет ;)

Про именно доступ на чтение-запись я тоже не уверен, но, возможно, есть какое-то внутреннее защитное ограничение на количество дескрипторов для одного и того же файла, или что-то в этом духе. Это все догадки от безнадежности :(

Насчет описанного в ППС - ОГО, больше сказать нечего...
 

NA

Guest
fixxxer
...так ведь мне надо отдать image/jpg, а не iframe!
Это баннер, косящий под календарь, а не страничка-календарик ;)
 

ONK

Пассивист PHPСluba
Автор оригинала: fixxxer
Затести. Тебе процесс кильнёт и всё... :)
В данном случае это не проблемма. Сколько там у тебя можно процессов от одного пользователя запустить? ;)
 

fixxxer

К.О.
Партнер клуба
будешь экспериментировать - меня предупреди, чтобы я в top-е сидел в это время :D
 
Сверху