В избранное    Домой   

Вторник,  10 Dec 2024 г., 08:38
Сказал я в сердце своем:"дай, испытаю я тебя веселием, и насладись добром"; но и это -- суета!  О смехе сказал я: "глупость!", а о веселии: "что оно делает?" /Екклесиаст/

 Логин:  

 Пароль: 




Анонсы:
=== Дата: 07/10/2011     Автор: Крис Ньюман ===

PHP. Урок 23 Настройка PHP

Урок 23. Настройка PHP

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

Настройки конфигурации

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

Возможности php.ini

Файл настройки PHP называется php.ini. Его размещение определяется во время компиляции. Обычно это /usr/local/lib/php.ini на Linux/Unix серверах и C:\WINDOWS\php.ini для Windows-систем.

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

В листинге 23.1 содержится часть оригинального php.ini из PHP 5, в которой содержаться настройки ведения журнала. Как видите, чтобы внести изменения, документация зачастую не нужна.

Листинг 23.1. Часть файла php.ini


; Print out errors (as a port of the output). For
; production web sites,
; you're strongly encouraged to turn this feature off,
; and use error logging
; instead (see below). Keeping display_errors enabled
; on a production web site
; may reveal security information to end users, such as
; file paths on your Web
; server, your database schema or other information.
display_errors = On

; Even when display_errors is on, errors that occur
; during PHP's startup
; sequence are not displayed. It's strongly recommended
; to keep
; display_startup_errors off, except for when debugging.
display_startup_errors = Off

; Log errors into a log file (server-specific log, stderr,
; or error_log (below))
; As started above, you're strongly advised to use error
; logging in place of
; error displaying on production web sites.
log_errors = Off

; Set maximum length of log_errors. In error_log information
; about the source is
; added. The default is 1024 and 0 allows to not apply any
; maximum length at all
log_errors_max_len = 1024

True или False. Булевым значениям в php.ini соответствуют on или yes для true и off, no или none для false. Эти значения не зависят от регистра.

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

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

PHP в режиме командной строки также перечитывает содержимое php.ini при каждом запуске.

Замена файла php.ini

Можно создать отдельную версию php.ini для различных способов запуска PHP. Если создать файл с именем php-SAPI.ini (нужно заменить SAPI на соответствующее имя SAPI), он будет использоваться вместо глобального php.ini.

Например, чтобы задать опции только для командной строки PHP, нужно создать файл с именем php-cli.php. Для модуля Web-сервера Apache файл должен называться php-apache.ini. На платформе Windows сначала используется файл php.ini в каталоге Apache, а потом тот, что находится в C:\WINDOWS. Это позволяет задать различные установки PHP для различных Web-серверов на одном хосте.

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

#!/usr/local/bin/php -c /path/to/php.ini

Настройка для отдельного каталога

Специальный файл .htaccess позволяет изменять настройки Web-сервера Apache. C помощью .htaccess также можно менять глобальные настройки php.ini.

C помощью инструкции php_value можно задать новое значение директивы из файла php.ini. Для этого после нее нужно указать инструкцию и новое значение. В следующей строке файла .htaccess директиве max_execution_time устанавливается значение 60 секунд:

php_value max_execution_time 60

Использование .htaccessНужно внимательно следить за синтаксисом при изменении настроек в php.ini и .htaccess. В php.ini между инструкцией и значением должен быть знак равенства. В .htaccess значение следует после названия директивы без знака равенства.

Изменения, внесенные только файлом .htaccess, влияют только на текущий каталог и его подкаталоги. Все установки в .htaccess заменяют глобальные установки php.ini, а также все установки в родительском каталоге.

Динамическая настройка

Значения, установленные в файле php.ini, можно менять во время выполнения с помощью функции ini_set. На вход нужно подать два аргумента: имя конструкции и новое значение. При изменении значения директивы функция ini_set возвращает предыдущее значение этой директивы.

В следующем примере изменяется значение директивы memory_limit для текущего сценария это сделано для блока кода, который требует больше системных ресурсов:

$limit = ini_set("memory_limit", "128M");
// Далее следует код, который требует этих изменений
ini_set("memory_limit", $limit);

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

Функция ini_get позволяет узнать текущее значение директивы в php.ini.

Директивы настройки

В коротком уроке нельзя охватить все настройки php.ini, их очень много. Поэтому ниже рассматриваются только самые используемые.

Настройка PHP-окружения

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

Стиль дескрипторов PHP

Эти установки позволяют выбрать стиль дескрипторов, который используется в сценарии PHP:

  • short_open_tag = On – инструкция short_open_tag включает или отключает возможность использовать <? для открывающего дескриптора. Если она выключена, в сценарии нужно использовать полный дескриптор <?php.
    Так как <? может иметь другое значение внутри Web-страницы, нужно избегать использовать short_open_tag. Кроме того, в последующих версиях PHP эту опцию могут включить по умолчанию.
  • asp_tags = Off – asp_tags устанавливает возможность использовать <% для открывающего и %> для закрывающего дескриптора PHP. Нужно включить эту установку в php.ini, чтобы использовать такой стиль.

 

Ограничение системных ресурсов

Следующие инструкции позволяют управлять системными ресурсами, доступными в сценарии PHP.

  • max_execution_time = 30 – директива max_execution_time задает максимальное время выполнения сценария в секундах. Если предел превышается, происходит ошибка, и выполнение завершается.
    Если нет сценариев, которые требуют большего времени на выполнение, не нужно изменять эту инструкцию. Случайный бесконечный цикл в сценарии может забрать на себя много системных ресурсов, а max_execution_time позволяет застраховаться от таких проблем.
    Если загрузка Web-страницы занимает больше 30 секунд, многие посетители не будут ждать окончания. Конечно, если не запрашивается специфическая информация, для которой известно, что генерация занимает определенное время.
  • memory_limit = 8M — каждый сценарий PHP имеет ограниченный доступ к системным ресурсам. Это сделано для защиты системы в целом. Большинство сценариев использует небольшое количество памяти. Количество используемой памяти можно узнать с помощью функции memory_get_usage.
    Суффикс M указывает на значение в мегабайтах. Приставки K и G задают, соответственно, значения в килобайтах и гигабайтах. Ограничение на память можно полностью убрать, установив для memory_limit значение -1.

 

Обработка форм

С помощью этих инструкций, можно изменить способ взаимодействия PHP с формами.

  • magic_quotes – Директива magic_quotes дает указание PHP автоматически разделять кавычки. Это нужно для безопасной подстановки строк. Ниже приведены стандартные значения:
    magic_quotes_gpc = On
    magic_quotes_runtine = Off
    magic_quotes_sybase = Off

    Директива magic_quotes_gpc используется для значений из форм и cookies (gpc составлено из GET, POST и COOKIE). Инструкция magic_quotes_runtime принуждает PHP разделять кавычки для данных, которые генерируются сценарием. Это может быть строка запроса к базе данных или команда для сервера.
    Обычно кавычки разделяются с помощью обратной косой черты. Но в некоторых базах данных, например Sybase, для разделения используется еще один символ кавычки. Если включить magic_quotes_sybase, результат будет в виде '', вместо \'.
  • register_globals = Off – опция register_globals отключена по умолчанию, начиная с PHP 4.2. Если она включена, все значения суперглобальных массивов $_ENV, $_GET, $_POST, $_COOKIE и $_SERVER дублируются в область глобальных переменных. Имя переменной берется из ключа соответствующего элемента.
  • variables_order = "EGPCS" - директива variables_order задает порядок в каком переменные заносятся в глобальную область из суперглобальных массивов. Если включена директива register_globals, значение cookie email заносится в глобальную область позже, чем значение из формы с таким же именем. Поэтому переменная $email в сценарии содержит значение cookie.
    Так как register_globals создает значение, которое не различается по источнику, лучше использовать суперглобальные массивы. Тогда точно известно, что $_POST["email"] содержит значение, полученное из формы, а $email может получить значение из нескольких источников.
  • register_long_arrays = On – в ранних версиях PHP использовались массивы $HTTP_GET_VARS, $HTTP_POST_VARS, $HTTP_SERVER_VARS и т. п. вместо новых суперглобальных массивов. Инструкция register_long_arrays определяет, нужно ли создавать эти массивы. Эта функциональность поддерживается для обратной совместимости.

 

Подключение файлов

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

Эти значения разделяются с помощью двоеточия в Linux/Unix системах и точкой с запятой — в Windows.

Часто нужно дать возможность подключить файл, который содержится за пределами Web-сервера. В примере ниже задается путь для подключения. Он содержит каталог, параллельный корневому каталогу Web-сайта /home/chris/public_html:

php_value include_path .:/home/chris/include

Точка (.) используется для задания текущего каталога. В этом примере она имеет больший приоритет, чем заданный путь подключения. Если выражение include найдет нужный файл в обоих каталогах, подключается файл в рабочем каталоге. Этот механизм позволяет использовать одинаковые библиотеки для различных сайтов. Их можно заменять при необходимости.

Установки auto_prepend_file и auto_append_file позволяют задать файлы, которые автоматически добавляются при старте и завершении любого сценария PHP. Размещение файлов нужно задать в include_path или указать полный путь.

Обычно auto_prepend_file используется для того, чтобы подключить часть HTML-разметки до любого вывода в сценарии, чтобы все страницы выглядели одинаково. Директива auto_prepend_file является механизмом PHP. Поэтому подключать можно только файлы, которые обрабатываются PHP. Для статических HTML-страниц такой возможности нет.

HTTP-заголовки. После отправки вывода на браузер нельзя использовать функцию header для HTTP-заголовков, а также другие механизмы PHP, которые работают с заголовками. Например, сеансы и cookies. Поэтому, если нужно посылать специальные HTTP-заголовки, все сценарии, которые подключаются с помощью auto_prepend_file, не должны генерировать вывод.

Ведение учета ошибок

В уроке 22, "Обработка ошибок", было показано, как настроить PHP для ограничения вывода сообщений об ошибках.

Значение директивы error_reporting является побитовой маской, составленной из значений, приведенных в табл. 22.1. Можно использовать логические операторы, чтобы комбинировать эти значения, как показано ниже:

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

Директивы display_errors и log_errors устанавливают вывод ошибок на экран и в файл журнала, соответственно.

В стандартной конфигурации ошибки выводятся на экран и не записываются в файл журнала:

display_errors = On
log_errors = Off

C помощью инструкции error_log можно задать альтернативный файл журнала:

error_log = /tmp/php_log

Настройка расширений PHP

Некоторые расширения PHP имеют собственные директивы настройки в php.ini, которые позволяют изменять их поведение.

Для большей ясности в конфигурационном файле используются заголовки разделов. Они разделяют установки по по расширениям. Например, все установки для расширения MySQL находятся в разделе php.ini, который начинается с [MySQL].

Каждое имя инструкции содержит префикс, содержащий название расширения (например: mysql.connect_timeout или session.cookie_path).

Документацию по специфическим инструкциям для расширений можно найти в электронном справочнике для каждого расширения.

Настройка безопасности системы

В этом уроке не рассматриваются директивы php.ini. Это относится к safe_mode и другим настройкам безопасности, которые ограничивают функциональность на Web-сервере.

Подгружаемые модули

PHP позволяет загружать отдельные расширения во время выполнения. Так можно расширять функциональность PHP без перекомпиляции исходных файлов.

Загрузка расширения по требованию

С помощью функции dl можно динамически подгружать модуль расширения. Для этого нужно собирать расширение как динамически загружаемый объект при компиляции PHP. Это реализуется с помощью опции —with-EXTENSION=shared. Например, следующие выражение configure устанавливает компиляцию PHP с поддержкой MySQL. Но сокеты будут поддерживаться для динамической загрузки:

./configure –with-mysql –with-sockets=shared

Функции dl нужно передать аргумент — имя файла расширения. Для сокетов этот файл называется sockets.so на Linux/Unix системе и php_sockets.dll для Windows.

Подгружаемые расширения. Чтобы функция dl работала, нужно включить директиву enable_dl в php.ini. На некоторых общих серверах эту возможность отключают.

Функция extension_loaded позволяет проверить, загрузилось ли нужное приложение. На вход нужно подать название расширения, а на выходе получим TRUE или FALSE в зависимости от наличия данного расширения. Отметим, что PHP не может определить, как загрузилось расширение: с помощью dl или оно скомпилировано с PHP.

Загрузка модулей при старте

Если есть подгружаемый модуль и нужно чтобы он загружался в PHP без вызова dl в каждом сценарии, можно воспользоваться директивой extension в php.ini. Она позволяет задать список расширений, которые нужно загрузить при старте.

Каждое расширение задается в отдельной строке. Ограничение на количество расширений нет. В следующих строках из php.ini дается указание автоматически загрузить модули sockets и imap для Linux/Unix сервера:

extension=imap.so
extension=sockets.so

Для Web-сервера под управлением Windows эти инструкции выглядят по-другому:

extension=php_imap.dll
extension=php_sockets.dll

Резюме

В этом уроке вы узнали о настройке PHP во время работы. В следующем уроке вы узнаете о том как работает безопасный режим и как увеличить безопасность Web-сервера.


<<назад

Погода в Рудне
(Волгоградcкая обл.)

Подробнее >>


Курс валют
на 10 Дек 2024 г.
704 - Вьетнамских донгов
- 1