Мы — долго запрягаем, быстро ездим, и сильно тормозим.
www.lissyara.su —> статьи —> FreeBSD —> WWW —> apache 2.0

Apache2 + php5 + mod_fastcgi

Автор: lissyara.


    Пришла пора переходить на второй апач и пятый php (навеяно грядущим завершением поддержки php4 и будущим выходом php6). Пора ловить глюки на новой платформе :) Было решено заменить на своём сервере старую связку на более новую. Ввиду того, что все кричат более медленную работу php5 и apache2, да и крутится это будет не на FreeBSD 4.11, как в прошлый раз, а на FreeBSD 6.2, решил как-то всё это ускорить. Решение подсказали давно, тока опробовать не доходили руки. Дошли :)
   Однако, предложенное там решение с полпинка не завелось - а разбираться было лениво - выходной всё же, порылся в портах, и нашёл другой модуль, его и будем ставить. Поехали - рихтуем /etc/make.conf, добавляем туда такие опции:
# default PHP version
DEFAULT_PHP_VER=5
PORTSDIR?=      /usr/ports

# apache2
.if ${.CURDIR} == ${PORTSDIR}/www/apache20
# SSL - кому надо - включат - мне на этой машине не нужен
WITHOUT_SSL=            YES
# Включение поддержки suExec
WITH_SUEXEC=            YES
# Корневая директория suExec
SUEXEC_DOCROOT=         /
# Cубдиректория пользователя
SUEXEC_USERDIR=         www
# Файл лога suExec
SUEXEC_LOGFILE=         /var/log/httpd/suexec.log
.endif

   После чего ставим софт (подразумевается что установка чистая - иначе вначале снесите php4 и апачу 1.3) на машину. Апач:
host% make -C /usr/ports/www/apache20/ install clean

   PHP:
host% make -C /usr/ports/lang/php5/ install clean

   Лезет окошко, где выбираем такие опции - опять же - мне не нужна CLI версия, и я её не выбрал - вам может быть нужна:
+----------------------------------------------------------------+
|                    Options for php5 5.2.3                      | 
|                                                                |
|[ ] CLI        Build CLI version                                |
|[X] CGI        Build CGI version                                |
|[ ] APACHE     Build Apache module                              |
|[ ] DEBUG      Enable debug                                     |
|[X] SUHOSIN    Enable Suhosin protection system (not for jails) |
|[X] MULTIBYTE  Enable zend multibyte support                    |
|[ ] IPV6       Enable ipv6 support                              |
|[X] MAILHEAD   Enable mail header patch                         |
|[X] REDIRECT   Enable force-cgi-redirect support (CGI only)     |
|[X] DISCARD    Enable discard-path support (CGI only)           |
|[X] FASTCGI    Enable fastcgi support (CGI only)                |
|[X] PATHINFO   Enable path-info-check support (CGI only)        |
|                                                                |
|                                                                |
|                   [  OK  ]       Cancel                        |
+----------------------------------------------------------------+

   Также ставим сам модуль mod_fastcgi:
host% make -C /usr/ports/www/mod_fastcgi install clean

   Проверяем PHP:
host% echo '<?php echo "test string \n"; ?>' | php-cgi
X-Powered-By: PHP/5.2.3
Content-type: text/html

test string
host% 

   Работает. Раскомментируем строчку установленного модуля в конфиге апача:
host% grep " fastcgi_module " /usr/local/etc/apache2/httpd.conf
LoadModule fastcgi_module     libexec/apache2/mod_fastcgi.so

   После чего в конец конфига апача дописываем такое:
# added by lissyara 2007-07-19 in 23:36

# конфиг модуля
<IfModule mod_fastcgi.c>
        # конфиг модуля.
        # полный список опций - доступен по следующему адресу
        # http://www.fastcgi.com/mod_fastcgi/docs/mod_fastcgi.html
        # тут приведены лишь те, которые я заюзал
        # -singleThreshold - Целое число, мжду 0 и 100, используеммое
        # для определения, может ли быть завершён последний экземпляр
        # приложения FastCGI. Если менеджер процессов, вычисляет, что
        # фактор загрузки для приложения меньше заданного порога, то
        # последний экземпляр завершается. Для работы приложения в
        # режиме "idle" долгого времени, вы должны задать значение
        # ближе к 1, однако, если более приоритетна память, или время
        # CPU, более применимо значение 100. Значение 0 предотвращает
        # завершение последнего экземпляра приложения; это - значение
        # по умолчанию, и менять его не рекомендуется (особенно, если
        # установлена -appConnTimeout)
        # -minProcesses - минимальное общее число динамических приложений
        # FastCGI, разрешённых к работе в любое время, без убивания
        # менеджером процессов.
        # -restart - заставляет менеджер процессов повторно запускать
        # приложения в случае сбоя (подобно статическим приложениям)
        # -idle-timeout - число секунд бездействия приложения FastCGI,
        # до прерывания запроса и логгирования события. Таймер бездейстаия
        # применяется лишь к долго висящим соединениям приложений FastCGI.
        # Если запрос будет находиться в очереди к приложению, но
        # приложение не отвечает (путём записи и сброса) в течение этого
        # периода, то запрос будет прерван. Если связь с приложением
        # успешно завершается, но не завершается с клиентом, (ответ -
        # buffered), таймаут не применяется.
        # -killInterval - Определяет, как часто менеджером процессов
        # применяется политика завершения динамических экземпляров
        # приложения. Меньшее число приводит к более агессивной политике,
        # большее - к менее агрессивной.
        # -autoUpdate - вызывает проверку модулем mod_fastcgi проверку
        # времени модификации приложения на диске до обработки каждого
        # запроса. Если приложение на диске изменилось, уведомляется
        # менеджер процессов и все работающие экземпляры программы
        # уничтожаются. Вообще, предпочтительно, чтобы этот тип
        # функциональности был встроен в приложение (например, каждый
        # 100-й запрос проверяет, есть ли новая версия на диске, и выходит
        # если это так). Могут быть ошибки, если эта опция применяется с
        # опцией -restart
        # -pass-header - имя заголовка запроса HTTP для передачи среде
        # request. Эта опция делает доступным содержимое заголовков,
        # которые обычно недоступны (например, Authorization) в окружении GCI.
        FastCgiConfig   -singleThreshold 30 -minProcesses 2 -restart    \
                        -idle-timeout 400 -killInterval 200 -autoUpdate \
                        -pass-header HTTP_AUTHORIZATION
        # используетс ядля включения враппера
        FastCgiWrapper /usr/local/sbin/suexec
        # директория где хранятся сокеты
        FastCgiIpcDir /var/run/fastcgi
        # предпринимаемые для такого типа файлов действия
        Action application/x-httpd-fastphp /php-fcgi/php.sh
        Action application/x-httpd-php /php-fcgi/php.sh
        # добавляем типы файлов - у меня нету типа .php4 .php5 и т.д.
        # если у вас есть - добавльте через пробелы в этой строке
        AddType application/x-httpd-fastphp     .php
        # Обработка файлов апачем
        <Location /php-fcgi/>
                Options ExecCGI FollowSymLinks
                SetHandler fastcgi-script
        </Location>
</IfModule>

# директория с данными
<Directory      "/usr/home/*/www/data">
        Options         Indexes FollowSymLinks MultiViews
        AllowOverride   All
        Order           deny,allow
        Allow from      all
</Directory>
# директория скриптов пользователя
<Directory "/usr/home/*/www/cgi-bin">
        AllowOverride None
        Options None
        Order allow,deny
        Allow from all
</Directory>

# какие файлы считать индексными в директориях
# (выше, в конфиге есть такая же директива - я её закомментил)
DirectoryIndex index.php index.html index.htm

# включаем виртуалхосты основанные на именах
NameVirtualHost *:80

# первый виртуальный хост. Он будет показываться вместо всех
# несконфигирирвоанных виртуалхостов, при обращении к этому серверу
<VirtualHost *:80>
        ServerAdmin     admin@my-domain.ru
#       AliasMatch      ^/~([^/]+)(/.*)*        /usr/home/$1/data$2
        DocumentRoot    /usr/home/my-domain/www/data
        ServerName      host.my-domain.su
        SuexecUserGroup my-domain   my-domain
        Alias           /php-fcgi/      /usr/home/my-domain/www/cgi-bin/
        CustomLog       /var/log/httpd/httpd-access.log       combined
        ErrorLog        /var/log/httpd/httpd-error.log
</VirtualHost>

# остальные сайты. Мне удобней, когда конфиги лежат в одном месте:
Include /usr/local/etc/apache2/configs/*.conf

   Эти конфиги повторяют конфиг первого виртуалхоста, который приведён в предыдущем листинге. Где-то в процесе установки, не забываем создать юзера, от которого будет работать дефолтовый виртуалхост. У меня он называется 'my-domain'. Также, для каждого виртуалхоста пишем скрипт такого виду:
host% more /usr/home/my-domain/www/cgi-bin/php.sh
#!/bin/sh

PHP_FCGI_CHILDREN=4
export PHP_FCGI_CHILDREN
#PHP_FCGI_MAX_REQUESTS=5000
#export PHP_FCGI_MAX_REQUESTS

exec /usr/local/bin/php-cgi

   Делаем соответствующего пользователя его владельцем, и делаем его исполняемым:
host% chown my-domain:my-domain /usr/home/my-domain/www/cgi-bin/php.sh
host% chmod 555 /usr/home/my-domain/www/cgi-bin/php.sh
host%

   Добавлям строчки в rc.conf:
# apache 2
apache2_enable="YES"

   Также, нужно в группу пользователя добавить пользователя www:
host% pw groupmod my-domain -m www

   Остаются ограничения, описанные в прошлой статье - 16 групп, и, соответтсвенно максимум 15 пользователей. Лечится также - в исходниках ядра правим такую строку:
host% grep NGROUPS_MAX /usr/src/sys/sys/syslimits.h

   Соответсвенно сюда вписываем нужное число, и пересобираем ядро. (Обещщают с семёрки сделать чтобы менялось штатными средствами, но пока не сделали...) Как вариант - возможно включение ACL на разделе - но это замедлит рбоату с ФС (не пробовал, но по идее должно замедлять :)). Ну и всё. Можно создавать директорию для конфигов отсутствующих пока хостов, и запускать:
host% mkdir /usr/local/etc/apache2/configs
host% /usr/local/etc/rc.d/apache2.sh start
Starting apache2.
host% ps -aux | grep http
root    54653  0,0  1,1  4572  2872  ??  Ss  20:09   0:00,02 /usr/local/sbin/httpd
www     54654  0,0  1,1  4512  2828  ??  S   20:09   0:00,00 /usr/local/sbin/httpd
www     54655  0,0  1,2  4580  2904  ??  S   20:09   0:00,00 /usr/local/sbin/httpd
www     54656  0,0  1,2  4580  2904  ??  S   20:09   0:00,00 /usr/local/sbin/httpd
www     54657  0,0  1,2  4580  2904  ??  S   20:09   0:00,00 /usr/local/sbin/httpd
www     54658  0,0  1,2  4580  2904  ??  S   20:09   0:00,00 /usr/local/sbin/httpd
www     54659  0,0  1,2  4580  2904  ??  S   20:09   0:00,00 /usr/local/sbin/httpd
root    54661  0,0  0,2  1520   560  p1  R+  20:09   0:00,00 grep http
host% ps -aux | grep php-cgi
my-domain 54663  5,1  4,1 17584 10440  ??  S   20:09   0:00,21 /usr/local/bin/php-cgi
my-domain 54662  1,6  2,6 14268  6676  ??  Ss  20:09   0:00,09 /usr/local/bin/php-cgi
my-domain 54664  0,0  2,7 14268  6688  ??  S   20:09   0:00,00 /usr/local/bin/php-cgi
my-domain 54665  0,0  2,7 14268  6688  ??  S   20:09   0:00,00 /usr/local/bin/php-cgi
my-domain 54666  0,0  2,7 14268  6688  ??  S   20:09   0:00,00 /usr/local/bin/php-cgi
root    54669  0,0  0,3  1604   880  p1  S+  20:09   0:00,00 grep php-cgi
host% sockstat | grep /var/run/fastcg
my-domain php-cgi   54666 0  stream /var/run/fastcgi/dynamic/01922bbd806480551bf38bec
my-domain php-cgi   54665 0  stream /var/run/fastcgi/dynamic/01922bbd806480551bf38bec
my-domain php-cgi   54664 0  stream /var/run/fastcgi/dynamic/01922bbd806480551bf38bec
my-domain php-cgi   54663 0  stream /var/run/fastcgi/dynamic/01922bbd806480551bf38bec
my-domain php-cgi   54662 0  stream /var/run/fastcgi/dynamic/01922bbd806480551bf38bec
www     httpd     54654 12 stream /var/run/fastcgi/dynamic/01922bbd806480551bf38bec
host%

   Такой листинг вы увидите лишь если будет хоть одно обращение. Иначе - тока работающий апач. В случае любых проблем - уровень логов в конфиге - дебаг, и смотрим логи.

P.S. По итогам пары дней тестирования: Прилично быстрей чем в режиме чистого cgi.



размещено: 2007-07-23,
последнее обновление: 2007-08-20,
автор: lissyara


creativ, 2007-07-23 в 17:52:17

А почему не Apache 2.2?

lissyara, 2007-07-23 в 17:57:51

Я до позавчера жил на 1.3 и не чуствовал себя ущербным.
Зачем мне 2.2?

wizard, 2007-07-23 в 18:50:01

Сам видишь насколько удобнее юзать fast_cgi :))) а на форуме вначале обос***л меня :(

lissyara, 2007-07-23 в 19:28:30

это была конструктивная критика :))

wizard, 2007-07-23 в 22:22:10

кстати вот в связке fast-cgi ещё прикольно вот это юзать http://php-fpm.anight.org/

maserg, 2007-07-30 в 19:16:29

а где можно посмотреть сравнение скорости работы php как модуля и через fast-cgi

абырвалг, 2007-07-31 в 21:19:56

опечатка:
но это замедлит рбоату с ФС

paix, 2007-08-09 в 11:03:40

интересная статья...
Но господа, а что вы будете делать если юзеры пропишут например  PHPRC="vuln_php.ini" во враппере fastcgi?
Опять же если сайты все ваши то на нет и суда нет ;)

paix, 2007-08-09 в 11:05:44

моя статья об этом же только с ручной сборокой и заточкой под директадмин, может кому будет интересно...
http://directadmin.com/forum/showthread.php?t=16399

lissyara, 2007-08-09 в 11:06:08

вначале есть ссылка на прошлую статью. Там этот вариант описан.
Вкратце - man chflags

SniZ, 2007-08-19 в 17:24:09

господа, а зачем юзать fast-cgi?
просто не могу понять...

lissyara, 2007-08-19 в 21:24:10

быстрей чем чистый cgi

Denya, 2007-09-15 в 16:20:45

FastCGI очень рулит.
FastCGI намного шустрее и ЭКОНОМИЧНЕЕ! Сотня php-cgi процессов в памяти кушает что-то там меньше 200мб, кажется. httpd процессы без mod_php весят заметно меньше, и их тоже может быть много :) Короче, однозначно плюс.
php-fpm — штука хорошая, но сыроватая. Но по заявленым фичам — очень порадовало :) Я когда его ставил, она у меня не завелась, пришлось откатиться. Но проблема не в нем была, а в зацикливании одного скрипта :-( Еще раз экспериментировать лень.

2lissyara, может я и ошибаюсь, но все же. Апач должен заупскать не более 1 php-cgi процесса. Все потому, что php сам управляет созданием child-процессов. А если у вас apache запустит 2 процесс-менеджера php, то все это будет работать не так, как должно. Например, кеширование байткода...
Хотя по скриншоту ps -aux'а все нормально вроде :-)
Пару раз встречал про это упоминание в статьях. Например, в неплохой статье на хабре:
http://www.habrahabr.ru/blog/webdev/19129.html

Соответственно, конфиг-строчка у меня такая:
FastCgiConfig -maxClassProcesses 1 -maxProcesses 250 -idle-timeout 100 -pass-header HTTP_AUTHORIZATION

Во sh-враппер, запускающий сам php, я еще прописываю:
PHP_FCGI_MAX_REQUESTS=500
export PHP_FCGI_MAX_REQUESTS

Это на тот случай, чтобы процессы не жирнели и периодически убивались.

2paix Папку, где хранится шелл-скрипт (а в перспективе — и отдельный php.ini) можно вполне смело вынести из DocRoot'а и вообще убрать из зоны выдимости FTP-аккаунтов. Т.е. вместо /cgi-bin/, доступного юзеру, можно узнести куда-нибудь в /home/fcgi/. И никакой юзер не сможет ничего поменять.
У нас такая проблема стояла и мы вот так вот ее успешно решили.

banec, 2007-09-21 в 12:19:09

Для тех кто наткнулся на то что ни чего не работает!
нужно до установить из портов php5-extensions !

paix, 2007-09-24 в 16:14:19

Вопросик по производительности FastCGI
http://forum.lissyara.su/viewtopic.php?f=8&t=5052

abigor, 2007-11-29 в 9:31:08

Странно, но на
[root@dedic abigor]# uname -rs
FreeBSD 7.0-BETA3
[root@dedic abigor]#

при сборке apache22 он гадость отказался брать настройки из /etc/make.conf
пришлось принудительно ему говорить:
make SUEXEC_DOCROOT=/var/web SUEXEC_USERDIR=public_html SUEXEC_LOGFILE=/var/log/httpd/httpd-suexec.log install clean
После этого все заработало на ура.

Дмитрий., 2007-12-06 в 13:47:47

Автору респект - отличная статья. Неплохо бы еще, конечно, для каждого виртуального хоста в папке cgi-bin сделать chflags schg,uunlnk php.sh

MDV, 2008-07-10 в 8:05:52

SetHandler fastcgi-script
вижу
А AddHandler где?

Гога Салеля, 2008-08-15 в 9:58:17

Спасибо !!!

Pez!, 2008-10-19 в 0:02:52

Огромное спасибо автору - после того как я ВНИМАТЕЛЬНО все прочитал оно наконец-то заработало как надо )))

pro2on, 2008-10-25 в 23:21:20

Нужно не забыть еще и каталог создать:
#cd /var/log
# mkdir httpd

а так - большое спасибо. учусь вообще по этому сайту.

Pez!, 2008-10-26 в 6:57:41

хм, странно, у меня само создало этот каталог и в нем появился лог suexec

m4rkell, 2009-03-02 в 20:54:25

Задолбался рыть, как модключить расширения  php5_extensions?  Уже переустанавливал их, не помогает! подскажите плиз!!!

dfsdsf, 2009-03-25 в 9:59:36

sdfsdfdsf

Key, 2009-04-11 в 20:06:42

Как насчет такого решения:
cat ../apache22-peruser-mpm/pkg-descr
Peruser is an Apache 2 modules based on metuxmpm. The fundamental
concept behind them is to run each apache child process as its own
user and group, each handling its own set of virtual hosts. Peruser
and recent metuxmpm releases can also chroot() apache processes.
The result is a sane and secure web server environment for your
users, without kludges like PHP's safe_mode.

desruptor, 2009-12-17 в 18:36:52

кто делал по этой статье, покажите плз свой httpd -l

у меня подозрение что Suexec не вкомпилился, потому как на apachectl -t выводится вот такое

Invalid command \'SuexecUserGroup\', perhaps mis-spelled or defined by a module not included in the server configuration

udaff, 2009-12-20 в 8:26:33

httpd -l
Compiled in modules:
 core.c
 prefork.c
 http_core.c
 mod_so.c

udaff, 2009-12-20 в 8:30:42

Работает нормально, но в лог httpd-error.log постоянно сыплется:
[Sun Dec 20 07:20:03 2009] [warn] FastCGI: (dynamic) server "/home/hosting/sites/tor.ххх.ua/cgi-bin/php.sh" (uid 1002, gid 1002) restarted (pid 18253)
[Sun Dec 20 07:20:19 2009] [warn] FastCGI: (dynamic) server "/home/hosting/sites/tor.ххх.ua/cgi-bin/php.sh" (pid 18253) termination signaled
[Sun Dec 20 07:20:19 2009] [warn] FastCGI: (dynamic) server "/home/hosting/sites/tor.ххх.ua/cgi-bin/php.sh" (pid 18253) terminated by calling exit with status

Нормально это или нет? Как победить, что бы было нормально.

udaff, 2009-12-20 в 8:33:31

так точнее:
[Sun Dec 20 07:20:19 2009] [warn] FastCGI: (dynamic) server "/home/hosting/sites/tor.ххх.ua/cgi-bin/php.sh" (pid 18253) terminated by calling exit with status '0'

Артём, 2010-09-27 в 0:56:31

В новом PHP 5.3 нету пункта
[X] FASTCGI    Enable fastcgi support (CGI only)
каков выход?

sergio, 2010-12-08 в 14:39:47

 uid: (my-domain/my-domain) gid: (1001/my-domain) cmd: php.sh

lumen, 2011-01-14 в 10:50:40

Если php работает как php-cgi, то для обработки .htaccess необходимо использовать pecl-htscanner
(ставим из портов) и установить патч для него, он исправляет работу со сторокавыми типа данных
используемых в php_value и в php_flag
Патч
http://blog.hbis.fr/wp-content/uploads/2009/04/patch-htscanner-parser-20090401.gz

Пример настройки htscanner:
Добавляем в php.ini
[htscanner]
htscanner.extension_dir = "/usr/local/lib/php/20090626-zts/"
htscanner.extension = "htscanner.so"
htscanner.config_file = ".htaccess"
htscanner.default_docroot = "/"
htscanner.default_ttl = 300
htscanner.stop_on_error = 0


добавляем в .htaccess (указывайте те параметры которые вам нужны)
<IfModule mod_php5.c>
 php_value allow_call_time_pass_reference 1
 php_value session.use_trans_sid 0
 php_value display_errors 1
#  php_value mbstring.func_overload 1
 php_value mbstring.internal_encoding UTF8
</IfModule>

[i]

yava88, 2012-06-15 в 19:40:56

|[ ] APACHE     Build Apache Module     |

А разве этот модуль не потребуется? Как без него то..

lumen, 2012-06-16 в 20:29:05

А зачем, тут же php-cgi

Bella, 2016-05-19 в 13:05:29

What part of  do you come from? <a href=" http://nicktuckerphotography.com/shoot-everything-friday-photo/#visiting ">bay cialis for sale espanol daily 5 mg</a>  &ldquo;It would mean everything, man,&rdquo; said Heat forward LeBron James. &ldquo;First of all, it means that I&rsquo;m doing my part and I&rsquo;m helping our team get better. It would mean everything to our team. That&rsquo;s what we&rsquo;re here for. We work our tails off every day. If it can pay off with another Finals appearance, we&rsquo;d represent the Eastern Conference the best way we can.&rdquo;

Rodney, 2016-06-06 в 20:38:47

Can you put it on the scales, please? <a href=" http://www.mygetmore.com/cheap-metronidazole-online.pdf ">flagyl buy online australia</a>  UPI licenses content directly to print outlets, online media and institutions of all types. In addition, UPI's distribution partners provide our content to thousands of businesses, policy groups and academic institutions worldwide. Our audience consists of millions of decision-makers who depend on UPI's insightful and analytical stories to make better business or policy decisions.
<a href=" http://travel-semantics.com/penegra-100-kaufen.pdf ">penegra for erectile dysfunction</a>  They showed -as well - a starker link between people's performance and their backgrounds in England and Northern Ireland. Adults who had at least one parent involved in a university-level education scored 26.7 points higher in literacy than those with parents who did not pursue such qualifications.  This compared to an international average of 18 points difference between the two groups.  In numeracy, the figures were even more stark - a 31.1 point difference in the UK compared with 19.5 internationally.

Elvis, 2016-07-02 в 11:26:58

How much notice do you have to give? <a href=" http://levitra.blue/#exceed ">buy levitra usa</a>  Country cutie Carrie Underwood's is off the market — and has the rock to prove it! The 26-year-old singer showed off the ring fiance Ottawa Senators hockey player Mike Fischer gave her while cheering him on at a hockey game on Dec. 21. The five-plus carat diamond ring is worth almost $150,000, reported People.com.

Reuben, 2016-08-31 в 23:24:12

An estate agents <a href=" http://bigskybikes.com/when-is-viagra-going-generic-in-canada.pdf#craftsman ">buy cialis viagra canada</a>  It was the first time in NHL history that a team scored its first goal  of the season on a penalty shot, according to the Elias Sports Bureau.  The Lightning went 0 for 5 on the power play, failing to score on a pair  of 5-on-3 advantages, while allowing the two short-handed goals.
<a href=" http://www.stpatricks5k.com/viafem-canada.pdf#wallpaper ">viafem canada
</a>  "I'm not convinced that concerns about the Fed have beenfully priced in, but we are seeing a bit of a bounce-back today,and the bulls remain firmly in control of the market for now,"said Uri Landesman, president of Platinum Partners in New York.



 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0635 секунд
Из них PHP: 45%; SQL: 55%; Число SQL-запросов: 77 шт.
Исходный размер: 69801; Сжатая: 16555