Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > GIF или PNG без модуля GD и ImageMagic


Автор: djkostya 16.11.2006, 23:22
Ребят где-то в какой-то книжки видел пример как сгенерировать простые чила (не важно по красоте)
Не подскажете как можно сделать без использования GD или ImageMagic

Автор: JUmPER 17.11.2006, 09:39
а какая связь между простыми числами и графическими библиотеками?
и какая связь с темой топика?

PS: по поводу генерации погугли на темы "решето Эратосфена" и "тест Рабина-Миллера" (может "Раббина")

Автор: djkostya 17.11.2006, 12:01
Мне нужно сделать счётчик посещений...
Я просто не так выразился (простые числа)

Автор: korob2001 27.11.2006, 22:47
Без граф. библиотек можно обойтись, но тогда твой счётчик будет текстовый. Пожалуй для счётчика посещений это и есть самы оптимальный вариант. Да и к тому же зачем генерировать, просто создай файл, записывай в него имя файла и кол-во посещений, если такая запись уже есть, то инкрементируй счётчик.
Вот простейший пример счётчика на основе DBM, просто вставляй этот код в начало каждого файла:
Код

#!/usr/bin/perl
use DB_File;
my %counter = ();
my $count = 0;
tie(%counter, "DB_File", "/home/localhost/cgi-bin/counter") or die $!;
if (exists $counter{$ENV{SCRIPT_NAME}} ) {
    $count = ++$counter{$ENV{SCRIPT_NAME}};
} else {
    $count = $counter{$ENV{SCRIPT_NAME}} = 1;
}
untie(%counter);

# Следующий код нужет только для демонстрации.
print "Content-type: text/html\n\n";
print "<html><body>";
print "Вы у нас $count посетитель";
print "</body></html>";

Только это простейший пример, если нужно подсчитывать посещения с различных IP адресов, то придётся ещё создать файл, для их учёта.

Автор: GoodBoy 28.11.2006, 10:58
Цитата(korob2001 @  27.11.2006,  22:47 Найти цитируемый пост)
Без граф. библиотек можно обойтись, но тогда твой счётчик будет текстовый

Тут ты не прав...  Запросто можно сгенерить вручную куртинку...  Помнится лет 6 назад я писал такой счётчик...

Пример его работы: user posted image

Правда есть у этого скрипта один минус.  Он генерит картинку в формате BMP.  Можно сделать и в GIF, но в тот раз я с этим не стал разбираться, а сейчас - некогда... :-)))))

Вызов скрипта осуществляется следующим образом:
<img scr="http://www.domain.ru/cgi-bin/counter.cgi?user=Name&digit=5"> 

В этом вызове определяется пользователь, для которого нужно вернуть значение счетчика и количество цифр в возвращаемом изображении. 

Формат файла записей для скрипта следующий:
Код
Vitalij||13995
Sasha||237
Booka||6
Igos||3


Если пользователь найден, то значение счетчика для него увеличивается на 1 и сохраняется в файле.   Если запрошенный пользователь не существует, то производится выход из программы. 

Далее происходит вычисление размеров изображения в соответствии с запросом пользователя.   Сразу отмечу, что в качестве исходных используются изображения цифр формата 16х24 пикселов.  После этого происходит формирование заголовка изображения в соответствии с вычисленными размерами. 

В качестве самих изображений цифр используются обыкновенные битовые карты, записанные непосредственно в самом файле скрипта, что приводит к увеличению его размеров, но позволяет обойтись без файлов с изображениями цифр и, как следствие, без дополнительный файловых операций. 

После того, как заголовок сформирован, происходит формирование непосредственно самого графического изображения цифр счетчика, после чего оно отправляется в браузер пользователя.

В некоторых случаях, если не увидите в браузере изображение, то попробуйте в качестве типа указать: image/x-bitmap.

В файле скрипта описаны массивы @header, @dig и @logo представляющие, соответственно, заголовок для изображения, массив из кодов изображений десяти цифр и изображение небольшого логотипчика, выводимого, перед цифрами в счетчике.


Код
#!/usr/bin/perl

@header=(
0x42,0x4D,0xF6,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x76,0x00,0x00,0x00,0x28,0x00,
0x00,0x00,0x10,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x01,0x00,0x04,0x00,0x00,0x00,
0x00,0x00,0x80,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xFC,0xFC,0x00,0xFC,0x84,0x84,0x00,0x00,0x00,
0x00,0x83,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x83,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x83,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x82,0x00,0x00,0x00,0x83,0x00,0x00,
0x00,0x83,0x00,0x00,0x00,0x00);

@dig=(
[0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x00,0x01,0x11,0x11,
0x11,0x11,0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x10,0x00,0x01,0x10,0x00,0x01,0x11,
0x11,0x10,0x00,0x11,0x11,0x00,0x01,0x11,0x11,0x00,0x01,0x11,0x11,0x10,0x00,0x11,
0x11,0x00,0x01,0x11,0x11,0x10,0x00,0x11,0x11,0x00,0x01,0x11,0x11,0x10,0x00,0x11,
0x11,0x00,0x01,0x11,0x11,0x10,0x00,0x11,0x11,0x00,0x01,0x11,0x11,0x10,0x00,0x11,
0x11,0x00,0x01,0x11,0x11,0x10,0x00,0x11,0x11,0x00,0x01,0x11,0x11,0x10,0x00,0x11,
0x11,0x10,0x00,0x11,0x11,0x00,0x01,0x11,0x11,0x10,0x00,0x01,0x10,0x00,0x01,0x11,
0x11,0x11,0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x11,0x10,0x00,0x00,0x01,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11],

[0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x00,0x00,0x00,0x00,0x01,0x11,
0x11,0x11,0x00,0x00,0x00,0x00,0x01,0x11,0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,
0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,
0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,
0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,
0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,
0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,0x11,0x11,0x00,0x00,0x00,0x11,0x11,0x11,
0x11,0x11,0x00,0x00,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11],

[0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x01,0x11,
0x11,0x00,0x00,0x00,0x00,0x00,0x01,0x11,0x11,0x10,0x00,0x00,0x11,0x11,0x00,0x11,
0x11,0x11,0x00,0x00,0x01,0x11,0x00,0x11,0x11,0x11,0x10,0x00,0x00,0x01,0x11,0x11,
0x11,0x11,0x11,0x10,0x00,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x00,0x00,0x01,0x11,
0x11,0x11,0x11,0x11,0x10,0x00,0x01,0x11,0x11,0x11,0x11,0x11,0x11,0x00,0x00,0x11,
0x11,0x00,0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x00,0x11,0x11,0x11,0x10,0x00,0x11,
0x11,0x00,0x01,0x11,0x11,0x10,0x00,0x11,0x11,0x10,0x00,0x11,0x11,0x00,0x01,0x11,
0x11,0x11,0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x11,0x10,0x00,0x00,0x01,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11],

[0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x00,0x01,0x11,0x11,
0x11,0x10,0x00,0x00,0x00,0x00,0x01,0x11,0x11,0x10,0x00,0x01,0x11,0x00,0x01,0x11,
0x11,0x00,0x00,0x11,0x11,0x10,0x00,0x11,0x11,0x00,0x00,0x11,0x11,0x10,0x00,0x11,
0x11,0x10,0x01,0x11,0x11,0x10,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x00,0x00,0x11,
0x11,0x11,0x11,0x10,0x00,0x00,0x01,0x11,0x11,0x11,0x11,0x10,0x00,0x00,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x00,0x01,0x11,0x11,0x10,0x01,0x11,0x11,0x10,0x00,0x11,
0x11,0x10,0x01,0x11,0x11,0x10,0x00,0x11,0x11,0x10,0x00,0x11,0x11,0x00,0x00,0x11,
0x11,0x11,0x00,0x00,0x00,0x00,0x01,0x11,0x11,0x11,0x11,0x00,0x00,0x01,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11],

[0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x11,0x11,
0x11,0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x11,0x11,
0x11,0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x11,0x00,0x11,0x11,0x10,0x00,0x11,0x11,
0x11,0x00,0x01,0x11,0x10,0x00,0x11,0x11,0x11,0x10,0x00,0x11,0x10,0x00,0x11,0x11,
0x11,0x11,0x00,0x01,0x10,0x00,0x11,0x11,0x11,0x11,0x10,0x00,0x10,0x00,0x11,0x11,
0x11,0x11,0x11,0x00,0x00,0x00,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x00,0x11,0x11,
0x11,0x11,0x11,0x11,0x00,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11],

[0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x00,0x01,0x11,0x11,
0x11,0x10,0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x00,0x00,0x11,0x11,0x00,0x01,0x11,
0x11,0x00,0x00,0x11,0x11,0x10,0x00,0x11,0x11,0x00,0x01,0x11,0x11,0x10,0x00,0x11,
0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x11,
0x11,0x10,0x11,0x11,0x10,0x00,0x01,0x11,0x11,0x10,0x00,0x00,0x00,0x00,0x01,0x11,
0x11,0x10,0x00,0x00,0x00,0x01,0x11,0x11,0x11,0x10,0x01,0x11,0x11,0x11,0x11,0x11,
0x11,0x10,0x01,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x01,0x11,0x11,0x11,0x11,0x11,
0x11,0x10,0x00,0x00,0x00,0x00,0x01,0x11,0x11,0x10,0x00,0x00,0x00,0x00,0x01,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11],

[0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x00,0x01,0x11,0x11,
0x11,0x11,0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x00,0x01,0x11,
0x11,0x10,0x01,0x11,0x11,0x10,0x00,0x11,0x11,0x00,0x01,0x11,0x11,0x10,0x00,0x11,
0x11,0x00,0x01,0x11,0x11,0x10,0x00,0x11,0x11,0x00,0x01,0x11,0x11,0x10,0x00,0x11,
0x11,0x00,0x00,0x11,0x11,0x00,0x01,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x01,0x11,
0x11,0x00,0x01,0x00,0x00,0x01,0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,0x11,0x11,
0x11,0x10,0x00,0x01,0x11,0x11,0x11,0x11,0x11,0x11,0x00,0x00,0x01,0x11,0x11,0x11,
0x11,0x11,0x10,0x00,0x00,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x00,0x00,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11],

[0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,0x11,
0x11,0x11,0x10,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,0x11,
0x11,0x11,0x10,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x00,0x01,0x11,0x11,0x11,
0x11,0x11,0x11,0x00,0x01,0x11,0x11,0x11,0x11,0x11,0x11,0x00,0x01,0x11,0x11,0x11,
0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x00,0x01,0x11,0x11,0x11,0x01,0x11,0x11,0x00,0x00,0x11,0x11,
0x10,0x01,0x11,0x11,0x10,0x00,0x01,0x11,0x11,0x00,0x11,0x11,0x11,0x00,0x00,0x11,
0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x11,0x11,0x00,0x00,0x00,0x00,0x00,0x00,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11],

[0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x00,0x00,0x11,0x11,0x11,
0x11,0x10,0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x00,0x00,0x11,0x10,0x00,0x01,0x11,
0x11,0x00,0x01,0x11,0x11,0x00,0x01,0x11,0x11,0x00,0x01,0x11,0x11,0x00,0x01,0x11,
0x11,0x10,0x00,0x11,0x00,0x00,0x01,0x11,0x11,0x10,0x00,0x00,0x00,0x00,0x11,0x11,
0x11,0x11,0x10,0x00,0x00,0x01,0x11,0x11,0x11,0x10,0x00,0x00,0x00,0x11,0x11,0x11,
0x11,0x00,0x00,0x01,0x00,0x00,0x11,0x11,0x11,0x00,0x00,0x11,0x10,0x00,0x01,0x11,
0x11,0x00,0x01,0x11,0x11,0x00,0x01,0x11,0x11,0x00,0x01,0x11,0x11,0x00,0x01,0x11,
0x11,0x10,0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x11,0x10,0x00,0x00,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11],

[0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x00,0x00,0x11,0x11,0x11,0x11,
0x11,0x11,0x00,0x00,0x00,0x01,0x11,0x11,0x11,0x11,0x11,0x11,0x00,0x00,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x00,0x01,0x11,0x11,0x11,0x11,0x11,0x11,0x00,0x01,0x11,
0x11,0x11,0x10,0x00,0x00,0x10,0x00,0x11,0x11,0x10,0x00,0x00,0x00,0x00,0x00,0x11,
0x11,0x10,0x00,0x11,0x11,0x00,0x00,0x11,0x11,0x00,0x01,0x11,0x11,0x10,0x00,0x11,
0x11,0x00,0x01,0x11,0x11,0x10,0x00,0x11,0x11,0x00,0x01,0x11,0x11,0x10,0x00,0x11,
0x11,0x00,0x01,0x11,0x11,0x10,0x01,0x11,0x11,0x10,0x00,0x11,0x11,0x00,0x01,0x11,
0x11,0x11,0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x11,0x10,0x00,0x00,0x01,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11]);

@logo=(
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x01,0x11,0x11,0x10,0x11,0x11,0x11,0x11,0x00,0x00,0x00,0x00,0x11,0x11,
0x11,0x11,0x00,0x00,0x00,0x00,0x11,0x11,0x11,0x11,0x01,0x11,0x11,0x10,0x11,0x11,
0x11,0x11,0x01,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x00,0x01,0x11,0x11,0x11,0x11,
0x11,0x11,0x00,0x00,0x00,0x11,0x11,0x11,0x11,0x11,0x01,0x11,0x00,0x00,0x11,0x11,
0x11,0x11,0x11,0x11,0x00,0x00,0x11,0x11,0x11,0x11,0x00,0x00,0x00,0x11,0x11,0x11,
0x11,0x11,0x00,0x01,0x11,0x11,0x11,0x11,0x11,0x11,0x01,0x11,0x11,0x11,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x00,0x11,0x11,0x11,0x11,0x11,0x00,0x00,0x00,0x11,0x11,
0x11,0x11,0x00,0x00,0x00,0x10,0x11,0x11,0x11,0x11,0x00,0x11,0x10,0x11,0x11,0x11,
0x11,0x11,0x00,0x00,0x00,0x10,0x11,0x11,0x11,0x11,0x11,0x00,0x00,0x00,0x11,0x11,
0x11,0x11,0x11,0x11,0x10,0x00,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x10,0x11,0x11,
0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11);

%FORM={};
$x_size=16;
$y_size=24;

&parseform;

$user=$FORM{'user'};
$digits_in_image=$FORM{'digit'};

open COUNTF, "<counter.dat";
@countrec=<COUNTF>;
close COUNTF;
$counter=0;
for ($i=0; $i<@countrec; $i++)
  {  if ($countrec[$i]=~/$FORM{user}/)
       {  @records=split(/\|\|/, $countrec[$i]);
          $records[1]++;
          $counter=$records[1];
          $countrec[$i]=$records[0]."||".$records[1]."\n";
       }
  }
exit if ($counter==0);
open COUNTF, ">counter.dat";
flock COUNTF, 2;
print COUNTF @countrec;
flock COUNTF, 8;
close COUNTF;

$digits_in_image+=1;

$image_size=$digits_in_image*$x_size*$y_size*2; # полный размер изображения
$ret_size=$image_size+118;                      # полный размер файла

@ret=@header;

$ret[2]=$ret_size-(int($ret_size/256)*256);     # младший байт размера файла
$ret[3]=int($ret_size/256);                     # старший байт размера файла
$ret[34]=$image_size-(int($image_size/256)*256);# младший байт размера изображения
$ret[35]=int($image_size/256);                  # старший байт размера изображения
$ret[18]=$digits_in_image*$x_size;              # размер изображения по оси Х

@count=split (//, $counter);
if (($digits_in_image-1)>length($counter))
  {  for ($i=0; $i<($digits_in_image-1-length($counter)); $i++)
       {  unshift @count, 0;
       }
  }


for ($i=0; $i<24; $i++)
  {  for ($j=0; $j<8; $j++)
       {  push @ret, $logo[$i*8+$j];
       }
     for ($k=0; $k<@count; $k++)
       {  for ($j=0; $j<8; $j++)
            {  push @ret, $dig[$count[$k]][$i*8+$j];
            }
       }
  }

# ---------- For write to file -----------
# open BMPF, ">counter.bmp";
# foreach $byte (@ret)
#   {  print BMPF chr($byte);
#   }
# close BMPF;
# ----------------------------------------

# -------- For write to brouser ----------
print "Content-Type: image/bmp\n\n";
foreach $byte (@ret)
  {  print chr($byte);
  }
# ----------------------------------------

sub parseform
{  local($name, $value, $pair, $buffer, @pairs);

   @pairs=split(/&/, $ENV{'QUERY_STRING'});
   foreach $pair (@pairs)
     {  ($name, $value)=split(/=/, $pair);
        $value=~tr/+/ /;
        $value=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
        $FORM{$name}=$value;
     }
   return(1);
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)