Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Самоучитель по PHP 4

.pdf
Скачиваний:
82
Добавлен:
02.05.2014
Размер:
4.36 Mб
Скачать

Приложение 1. Файл конфигурации Apache httpd.conf

531

#

#MetaSuffix .meta

#Настраиваемая реакция на ошибки (собственный стиль Apache) может быть

#трех типов.

#

#1) простой текст

#ErrorDocument 500 "Сервер сказал а-я-яй!"

#Внимание: знак двойной кавычки просто означает, что далее следует

#текст.

#

#2) локальная переадресация

#Чтобы перенаправить на локальный документ:

#ErrorDocument 404 /missing.html

#Перенаправлять можно и на сценарий, и на документ, использующий

#включения на стороне сервера:

#ErrorDocument 404 /cgi-bin/missing_handler.pl

#

#3) внешняя переадресация

#ErrorDocument 402 http://some.other_server.com/info.html

#Большинство переменных окружения, связанных с исходным запросом,

#станут недоступны при такой переадресации.

#

# Установки, связанные с браузером пользователя.

#

<IfModule mod_setenvif.c>

#

#Следующие директивы отменяют поддержку долговременных соединений

#(keepalives) и "смывание" заголовков HTTP. Первая директива

#отменяет их для Netscape 2.x и браузеров, которые "притворяются",

#что они — Netscape (известны некоторые проблемы с такими

#браузерами). Вторая директива предназначена для Microsoft Internet

#Explorer 4.0b2, реализация HTTP/1.1 которого не полна и не

#поддерживает должным образом keepalive, когда он используется в

#откликах 301 или 302 (переадресация).

#

BrowserMatch "Mozilla/2" nokeepalive

532

Часть VI. Приложения

BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0

#

#Следующая директива отключает отклики по HTTP/1.1 браузерам,

#которые нарушают стандарты HTTP/1.0 и не могут разобрать

#основной отклик 1.1.

#

BrowserMatch "RealPlayer 4\.0" force-response-1.0 BrowserMatch "Java/1\.0" force-response-1.0 BrowserMatch "JDK/1\.0" force-response-1.0

</IfModule>

# Конец настроек, связанных с браузерами.

#

#Следующая группа директив управляет отчетами о состоянии сервера,

#имеющего URL http://servername/server-status. Для приведения в

#соответствие с вашими нуждами измените .your_domain.com.

#

#<Location /server-status>

#SetHandler server-status

#Order deny,allow

#Deny from all

#Allow from .your_domain.com

#</Location>

#

#Эта группа директив управляет отчетами конфигурации удаленного

#сервера http://servername/server-info (требуется, чтобы был загружен

#mod_info.c). Замените .your_domain.com на имя вашего домена.

#

#<Location /server-info>

#SetHandler server-info

#Order deny,allow

#Deny from all

#Allow from .your_domain.com

#</Location>

#

Приложение 1. Файл конфигурации Apache httpd.conf

533

#Поступали сообщения, что некие люди пытаются злоупотреблять древней

#ошибкой старых версий Apache. Ошибка касалась CGI-сценария,

#поставлявшегося с Apache.

#Раскрыв следующие строки, вы можете переадресовать эти атаки

#на регистрирующий сценарий на phf.apache.org. А можете регистрировать

#их сами, используя сценарий support/phf_abuse_log.cgi.

#

#<Location /cgi-bin/phf*>

#Deny from all

#ErrorDocument 403 http://phf.apache.org/phf_abuse_log.cgi

#</Location>

#

#Директивы proxy-сервера.

#<IfModule mod_proxy.c>

#Раскройте следующую строку для того, чтобы разрешить

#работу с proxy.

#ProxyRequests On

#<Directory proxy:*>

#Order deny,allow

#Deny from all

#Allow from .your_domain.com

#</Directory>

#

#Разрешить/запретить обработку заголовков HTTP/1.1 Via:.

#Возможные значения: Off | On | Full | Block. Full добавляет в

#заголовок версию сервера, Block удаляет все исходящие

#заголовки Via:.

#

# ProxyVia On

#

#Для разрешения также кэширования отредактируйте и раскройте

#следующие строки (нельзя включать кэширование без указания

#CacheRoot):

#

534

Часть VI. Приложения

#CacheRoot "C:/Program Files/Apache Group/Apache/proxy"

#CacheSize 5

#CacheGcInterval 4

#CacheMaxExpire 24

#CacheLastModifiedFactor 0.1

#CacheDefaultExpire 1

#NoCache a_domain.com another_domain.edu joes.garage_sale.com

#</IfModule>

#Конец настроек proxy-сервера.

### Раздел 3: Виртуальные хосты

#

#Директива VirtualHost: Если вы хотите держать на своей машине несколько

#хостов, следует для каждого из них завести контейнер VirtualHost.

#Прежде чем их устанавливать, обращайтесь за подробными разъяснениями к

#документации по адресу http://www.apache.org/docs/vhosts/. Для проверки

#конфигурации ваших виртуальных хостов вы можете задавать опцию -S

#командной строки.

#

#Если вы хотите использовать именные виртуальные хосты (name-based

#virtual hosts), вам необходимо определить для них как минимум один

#адрес IP (и номер порта).

#

NameVirtualHost 127.0.0.1:80

#

#Пример использования директивы VirtualHost:

#В контейнер VirtualHost может включаться почти любая

#директива Apache.

#<VirtualHost ip.address.of.host.some_domain.com>

#ServerAdmin webmaster@host.some_domain.com

#DocumentRoot /www/docs/host.some_domain.com

#ServerName host.some_domain.com

#ErrorLog logs/host.some_domain.com-error_log

#CustomLog logs/host.some_domain.com-access_log common

#</VirtualHost>

#<VirtualHost _default_:*>

Приложение 1. Файл конфигурации Apache httpd.conf

535

#</VirtualHost>

#Далее идут настройки для виртуальных хостов, описанных во второй

#части этой книги.

#----localhost <VirtualHost localhost>

ServerAdmin webmaster@localhost.ru ServerName localhost

DocumentRoot "z:/home/localhost/www" ScriptAlias /cgi/ "z:/home/localhost/cgi/" ErrorLog z:/home/localhost/error.log CustomLog z:/home/localhost/access.log common

</VirtualHost>

#----hacker <VirtualHost hacker>

ServerAdmin webmaster@hacker.ru ServerName hacker

DocumentRoot "z:/home/hacker/www" ScriptAlias /cgi/ "z:/home/hacker/cgi/" ErrorLog z:/home/hacker/error.log CustomLog z:/home/hacker/access.log common

</VirtualHost>

#----cracker <VirtualHost cracker>

ServerAdmin webmaster@cracker.ru ServerName cracker

DocumentRoot "z:/home/cracker/www" ScriptAlias /cgi/ "z:/home/cracker/cgi/" ErrorLog z:/home/cracker/error.log CustomLog z:/home/cracker/access.log common

</VirtualHost>

# Конец главного файла конфигурации Apache.

Приложение 2

Файл конфигурации

PHP php.ini

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

Директивы в листинге П2.1 полностью соответствуют рекомендациям по уста- новке PHP для Windows, представленным в части II книги. Впрочем, чтобы получить этот файл, мне понадобилось всего пара изменений в настройках PHP по умолчанию (настройки по умолчанию хранятся в файле php.inidist) — не то, что в случае с Apache.

Если вы установили PHP как модуль Apache, перед вами открываются дополнительные возможности: вы можете задавать значения некоторых директив прямо в файлах httpd.conf или .htaccess. В силу специфики синтаксиса файлов конфигурации Apache, для отделения имени директивы и ее значения нужно использовать пробел, а не знак =. Кроме того, имена директив PHP должны быть предварены префиксом php_. Например, директива из php.ini

auto_prepend_file=top.html

будет выглядеть в httpd.conf или .htaccess так:

php_auto_prepend_file top.html

Приведенного листинга с комментариями должно быть вполне достаточно для понимания роли большинства директив PHP. Именно поэтому я уделил им так мало страниц в частях IV и V данной книги. И все-таки, если у вас возникнут какие-то затруднения, их легко сможет разрешить документация, которую можно получить, например, с официального сайта PHP: http://www.php.net.

Листинг П2.1. Файл php.ini

[PHP]

;;;;;;;;;;;;;;;;;

; Об этом файле ;

Приложение 2. Файл конфигурации PHP php.ini

537

;;;;;;;;;;;;;;;;;

;Этот файл содержит большинство установок PHP. Чтобы PHP смог его

;обнаружить, он должен называться 'php.ini'. Интерпретатор ищет файл в

;текущем каталоге, в случае неудачи — в каталоге, указанном в

;переменной окружения PHPRC, и, наконец, в каталоге, заданном при

;компиляции и сборке PHP (именно в таком порядке).

;В системе Windows путь, указанный при компиляции PHP,

;соответствует каталогу Windows (в большинстве случаев это

;c:\windows). Папка, в которой будет производиться поиск файла

;'php.ini', может быть также определена с использованием ключа –c

;командной строки.

;

;Синтаксис файла крайне прост. Пробельные символы (то есть, пробелы,

;символы табуляции и т. д.), строки, начинающиеся с точки с запятой (;)

;игнорируются (как вы, наверное, уже догадались). Заголовки секций

;(например, [Foo]) также пропускаются, но, возможно, будут учитываться

;в будущих версиях PHP.

;

;Директивы задаются примерно так:

;directive=value

;Имена директив чувствительны к регистру символов — foo=bar не то же

;самое, что FOO=bar.

;

;Значение value может быть строкой, числом, константой PHP (например,

;E_ALL или M_PI), одной из INI-констант (On, Off, True, False, Yes, No

;или None), выражением (например, E_ALL & ~E_NOTICE), а также строкой

;в кавычках ("foo").

;

;В выражениях могут использоваться только побитовые и логические

;операторы, а также скобки:

;| поразрядное ИЛИ (OR)

;& поразрядное И (AND)

;~ поразрядное НЕ (NOT)

;! логическое отрицание (NOT)

;

;В качестве логических флагов со значением "истина" могут быть

;использованы значения 1, On, True или Yes. Значение "ложь" дают 0, Off,

;False и No.

538

Часть VI. Приложения

;

;Пустая строка может быть задана, если "не указать ничего" после знака

;равенства, или же указать слово None:

;

foo=

;

устанавливаем foo равным пустой сторке

;

foo=none

;

аналогично

;foo="none" ; устанавливаем foo равным строке 'none'

;Если вы используете константы в качестве части значения директивы и эти

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

;расширении (модуле PHP или Zend), вы можете указывать их только после

;строки, которая загружает расширение.

;

;Все значения в файле php.ini-dist соответствуют встроенным значениям

;по умолчанию. Если php.ini не задействуется, или же вы удалите из него

;некоторые строки, будут установлены значения по умолчанию.

;;;;;;;;;;;;;;;;;;;

;Настройки языка ;

;;;;;;;;;;;;;;;;;;;

;Разрешает работу PHP для сервера Apache. engine=On

;Разрешает использовать короткие тэги <?. Иначе будут распознаваться

;только тэги <?php и <script>.

short_open_tag=On

;Позволяет использовать тэги <% %> а-ля ASP. asp_tags=Off

;Число значащих цифр после запятой, которые отображаются для чисел с

;плавающей точкой.

precision=14

;Признак коррекции дат (проблема 2000 года, которая может

;вызвать непонимание со стороны браузеров, которые

;на это не рассчитывают)

y2k_compliance=Off

; Использование буферизации вывода. Позволяет посылать заголовки (включая

Приложение 2. Файл конфигурации PHP php.ini

539

;Cookies) после вывода текста. Правда, это происходит ценой

;незначительного замедления вывода.

;Вы можете разрешить буферизацию во время выполнения сценария путем

;вызова функций буферизации, или же включить ее по умолчанию с помощью

;следующей директивы:

output_buffering=Off

;Директива неявной отсылки говорит PHP о том, что выводимые данные нужно

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

;Ее действие эквивалентно вызовам функции flush() после

;каждого использования print() или echo() и после каждого HTML-блока.

;Включение этой директивы серьезно замедляет работу, поэтому ее

;рекомендуется применять лишь в отладочных целях.

implicit_flush=Off

;Параметр определяет, должен ли PHP использовать возможность всегда

;передавать аргументы функциям по ссылке при выполнении сценария.

;Этот метод устарел, и, скорее всего, он не будет

;поддерживаться в будущих версиях PHP/Zend.

;Описание того, каким способом должен быть передан аргумент —

;по ссылке или по значению — рекомендуется указывать при объявлении

;функции. Лучше всего, если вы попробуете установить параметр в Off

;и проверите, все ли сценарии по-прежнему работают. Если это так,

;то все в порядке, и сценарии будут совместимы и с будущими версиями

;PHP. В противном случае вы будете получать предупреждения каждый раз,

;когда аргументы передаются ненадлежащим образом и по значению там,

;где должны передаваться по ссылке.

allow_call_time_pass_reference=On

;Безопасный режим safe_mode=Off safe_mode_exec_dir=

;Установка некоторых переменных окружения может потенциально породить

;"дыры" в защите сценариев. Следующая директива содержит разделенный

;запятыми список префиксов. В режиме включенного безопасного режима

;пользователь сможет изменять только те переменные окружения, имена

;которых начинаются с перечисленных префиксов.

;По умолчанию пользователь имеет возможность устанавливать только

540

Часть VI. Приложения

;переменные окружения, начинающиеся с PHP_ (например,

;PHP_FOO=something).

;Замечание: если эта директива пуста, PHP позволяет пользователям

;модифицировать любые переменные окружения!

safe_mode_allowed_env_vars=PHP_

;Следующая директива содержит разделенный запятыми список имен

;переменных окружения, которые конечный пользователь не сможет изменять

;путем вызова putenv().

;Эти переменные будут защищены даже в том случае, если директива

;разрешает их использовать.

safe_mode_protected_env_vars=LD_LIBRARY_PATH

;Эта директива позволяет вам запрещать вызовы некоторых функций

;из соображений безопасности. Список задается в виде имен функций,

;разграниченных запятыми. Директива действует независимо от того,

;установлен ли безопасный режим или нет!

disable_functions=

;Цвета для режима раскраски синтаксиса. Любой цвет, допустимый в тэге

;<font color=???>, допустим и здесь.

highlight.string=#DD0000

highlight.comment=#FF8000

highlight.keyword=#007700

highlight.bg=#FFFFFF

highlight.default=#0000BB

highlight.html=#000000

;Другие директивы

;Следующая директива указывает, должен ли PHP добавлять заголовок

;X-Powered-by в заголовки, посылаемые браузеру, и, таким образом,

;обнаруживать себя. Это никак не может повлиять на безопасность

;сценария, однако позволяет пользователю определить, использовался

;ли PHP для генерации страницы, или нет.

expose_php=On

;;;;;;;;;;;;;;;;;;;;;;;;