Администратор. Базовый

27.04.2019

php имеет множество настроек, описанных в файле php.ini. Этот файл должен быть доступен в системных путях поиска для того, чтобы php мог использовать эти настройки. Обычно для этого достаточно хранить этот файл в том же каталоге, где расположен сам php, но если php сконфигурирован для работы в качестве модуля web-сервера, то этот файл необходимо скопировать в каталог, явно доступный в системных путях поиска. См. раздел инсталляции php для получения более подробных инструкций.

Здесь рассматриваются основные параметры php, разделенные по категориям. Список параметров в основном соответствует версии php 4.0.6, однако здесь рассматриваются только основные параметры. Полный список параметров с комментариями по каждому из них можно увидеть непосредственно в php.ini, а также в соответствующем разделе php manual.

Значения параметров, имеющих варианты "да/нет" могут быть следующими:

ДА - 1, on, true or yes
НЕТ - 0, off, false or no

Short_open_tag

Включение поддержки сокращенного варианта php тегов. Если эта опция отключена, то php код будет распознаваться только внутри тегов. Если включена - то разрешено использование тегов. Хорошим тоном считается не использовать сокращенной записи php тегов.

Включение поддержки asp тегов <% %> в качестве php тегов.

Output_buffering

Включение буферизированного вывода php. Использование буферизированного вывода позволит вам, к примеру, использовать любые функции, оперирующие с http header"ами (header(), setcookie()) в любом месте вашего скрипта, не заботясь о том, чтобы не выводить ничего до этого. Вы можете управлять буферизированным выводом и из ваших скриптов (см. раздел output control functions в php manual). Помните, что при включенной буферизации вывода результат работы скрипта будет возвращен браузеру только после того, как будет закончена работа скрипта, что может привести к более медленной работе сайта.

Включение безопасного режима работы php. Безопасный режим запрещает скриптам производить любые действия, которые являются небезопасными для сервера, на котором работает php. Очень подробно безопасный режим работы php рассматривается в php manual.

Max_execution_time

Максимальное время работы php скрипта (в секундах). Спустя это время работа скрипта будет принудительно завершена и выдана соответствующая ошибка. Позволяет избежать проблем с "зациклившимися" скриптами.

Максимальный объем памяти, который может быть выделен для нужд скрипта. Также позволяет избежать проблем с "зациклившимися" скриптами.

Error_reporting

Маска для сообщений об ошибках, которые должны генерироваться php. Задается в виде логического выражения с использованием набора предопределенных констант, описывающих различные типы ошибок. Список этих констант, а также правила задания выражений можно найти в php.ini.

Display_errors

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

Если включена эта опция, то все ошибки будут записываться в log файл, определенный следующей опцией.

Путь и имя файла, куда будут записываться все сообщения об ошибках, генерируемых php. Для систем поддерживающих системный журнал ошибок можно установить значение этого параметра равным syslog, для того, чтобы перенаправить все сообщения об ошибках туда.

Если включена эта опция, то текст последней ошибки будет всегда доступен из переменной $php_errormsg.

Register_globals

Этот параметр определяет, будут ли т.н. egpcs переменные (environment, get, post, cookies, session) доступны в виде глобальных переменных php. Если этот параметр разрешен, то переменные доступ к этим переменным будет осуществляться также, как и к любым другим глобальным переменным php:


echo "Версия http протокола: " . $server_protocol ;
echo "Параметр query string: " . $param1 ;
echo "Элемент формы: " . $txtfirstname ;
echo "Мои cookie: " . $mycookie ;
echo . $mysessionvar ;

Или то же самое, но с отключенным параметром:


echo "Версия http протокола: " . $http_env_vars [ "server_protocol" ];
echo "Параметр query string: " . $http_get_vars [ "param1" ];
echo "Элемент формы: " . $http_post_vars [ "txtfirstname" ];
echo "Мои cookie: " . $http_cookie_vars [ "mycookie" ];
echo "Мои сессионные переменные: " . $http_session_vars [ "mysessionvar" ];

На первый взгляд это менее удобно, но отключение этого параметра имеет и свои преимущества:

Php начинает работать немного быстрее, т.к. не тратится дополнительное время на создание множества переменных.
Нет риска того, что какие-то две переменные будут иметь одинаковые имена, что приведет к появлению ошибок в работе скрипта, которые будет очень сложно отловить в силу их неочевидности.
variables_order

Этот параметр используется в связке с предыдущим параметром и определяет, в какой последовательности производится регистрация глобальных egpcs переменных. Например, при значении по умолчанию (egpcs) переменные, переданные через get будут замещены переменными, переданными через post и имеющими то же имя. post-переменные (а также environment и get переменные) в свою очередь могут быть замещены значениями cookies с такими же именами и т.д.

Magic_quotes_gpc

Включение этого параметра приведет к тому, что все данные, поступающие со стороны клиента (через get, post или cookie) будут обработаны: все кавычки (" и ") в них будут замещены соответственно сочетанием " или ". С одной стороны это очень удобно, если планируется, например, вставлять эти данные в строки, передаваемые, например, sql серверу. Но с другой стороны это может привести к путанице, поэтому обычно надежнее использовать для этой цели функции addslashes() и stripslashes().

Magic_quotes_runtime

Данный параметр аналогичен предыдущему за исключением того, что влияет на данные, поступающие из внешних источников, расположенных на стороне сервера (например, данные, поступающие от sql сервера или результаты работы внешних программ).

Magic_quotes_sybase

Включение этой опции приведет к тому, что одинарные кавычки (") будут сдваиваться (""). Это необходимо для некоторых sql серверов, которые поддерживают только такой способ вставки кавычек в строки (interbase, ms sql, sybase и некоторые другие).

Auto_prepend_file

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

Auto_append_file

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

Путь к каталогу, где лежат модули php. Обычно это подкаталог extensions в корневом каталоге php.

Работая с хостингами, обычно не сталкиваешься с файлом php.ini, к нему просто нет доступа. Правда, есть хостинг-провайдеры, которые дают частичный доступ к некоторым настройкам php.ini. Причина такого ограничения доступа вполне понятна. Как-никак php.iniфайл задающий конфигурацию PHP сервера и его неразумная правка приведет к серьезным проблемам, решать которые придется хостинг-провайдеру. Другое дело, когда вы работаете с локальным сайтом на локальной машине. Любая сборка LAMP или допустит вас к php.ini по определению.

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

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

На готовых локальных серверах директивы файла php.ini создаются разработчиками, и каждый разработчик платформы устанавливает свои настройки PHP в нем. Но настройки указанные в php.ini не берутся из головы. Шаблоном любого php.ini служит файл "php.ini-development" находящейся в «родном» дистрибутиве PHP.

Если в файле php.ini локального сервера не прописана, какая либо директива, то PHP примет директиву по умолчанию. Повторюсь, файл php.ini по умолчанию смотрите в дистрибутиве PHP вашей версии в файле php.ini-development.

Итак, если у вас установлен и работает (запускается) локальный сервер, то в его папках должен быть файл php.ini который видит Интерпретатор PHP.

Доступ к php.ini

Доступ на виртуальном хостинге

На виртуальном хостинге вы, как правило, не имеете доступа к этому файлу, а, следовательно, не можете менять его настройки самостоятельно.

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

Доступ к php.ini на локальном хостинге

На вы имеете полный доступ ко всем файлам системы. Файл php.ini не исключение. Вы в любой момент можете открыть файл php.ini для редактирования. Редактировать файлы сервера нужно только в текстовых блокнотах.

Где искать php.ini

Найти файл не сложно.

class="eliadunit">

Если вы сами собирали платформу локального сервера, то вы сами его переименовывали и сами его настраивали. Но могу предположить, что искать его нужно в директории (для Windows).

На ЛС Денвер php.ini находим тут: C:\WebServers\usr\local\php5\php.ini.

На Xampp в папке Apache/bin:

На ЛС OpenServers несколько файлов конфигурации. Находятся они в директории C:\OpenServers\Userdata\ [Файлы конфигурации]

Настройки php.ini

Файл php.ini это текстовой файл с достаточно простым синтаксисом. Больше того, файл php.ini содержит такое количество комментариев, что их вполне достаточно для понимания роли большинства директив PHP. Посмотреть можно в отдельной статье.

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

Интерпретатор php может поставляться в виде модуля для Apache, выполнять скрипты из командной строки или в виде отдельного сервиса php-fpm. Эти сервисы отличаются своими возможностями, и предназначением, но для любого вида интерпретатора нужно задать базовые настройки, например, рабочая папка, включенные расширения, отображение ошибок и так далее. Все эти настройки задаются через файл php.ini. В этой инструкции мы рассмотрим как выполняется настройка файла php.ini в операционных системах Linux, хотя все информация подойдет и для Windows.

Если у вас еще не установлен интерпретатор языка программирования php, то вы можете ознакомиться со статьей .

Для каждой версии интерпретатора конфигурационный файл php.ini находится в отдельной папке. Но все конфигурационные файлы находятся в папке /etc/php, например, /etc/php5:

Папка conf.d содержит общие настройки для различных расширений и модулей, они не будут нас сейчас интересовать. Более интересны следующие три папки - apache, cli и fpm. В них содержатся конфигурационные файлы php.ini для каждого из этих интерпретаторов.

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

Что касается синтаксиса файла, то он разделен на секции, сначала идет секция настройки php, которая разделена на подсекции в зависимости от типа настроек, дальше идут секции настройки разных модулей. Синтаксис самих настроек очень прост, он соответствует привычному синтаксису ini файлов. Строка начинается с имени настройки, затем следует знак равно, а за ним значение:

имя_настройки = значение_параметра

Символами обозначается имя секции, например, , а символ; означает комментарий, он и все символы после него не читаются интерпретатором. А теперь рассмотрим как выполняется настройка php.ini и переберем самые важные параметры.

Настройка файла php.ini

Для удобства ориентирования мы разобьем все параметры по категориях в зависимости от их назначения. Вам будет достаточно найти нужный параметр и изменить его значение. А теперь откройте файл настроек php, например, для модуля apache и перейдем к настройке. Чтобы избежать ошибок не добавляйте новые строки, а ищите уже существующие и изменяйте значения на нужные:

sudo gedit /etc/php5/apache/php.ini

Сначала идет немного информации о самом файле в виде комментариев, затем интересующие нас настройки.

Вывод ошибок в php

Настройка php 7 обычно начинается с конфигурации вывода ошибок. Все настройки вывода ошибок находятся в разделе Error handling and logging. По умолчанию вывод ошибок на экран во время выполнения скрипта отключен. Это сделано для того, чтобы пользователи не смогли увидеть ничего лишнего. Вместо этого, все ошибки записываются в лог файл. Если вы используете php на домашнем компьютере, то такие меры не нужны и вы можете сразу выводить все на экран:

display_errors=off

Замените off на on. В php используются различные типы ошибок, например, критические, предупреждения, ошибки синтаксиса, с помощью строки error_reporting вы можете включить вывод только определенных типов ошибок:

error_reporting = E_ALL & ~E_DEPRECATED

Если нужно объединить несколько типов ошибок, то используйте символ &, а для отключения отображения поставьте перед типом знак ~. Приведенный выше пример отображает все ошибки (E_ALL), кроме сообщений об устаревших функциях (E_DEPRECATED). Вы можете отключить все типы использовав 0:

error_reporting = 0

Включите запись ошибок php в лог файл, если не выводите их на экран:

Чтобы не засорять лог однотипными сообщениями можно игнорировать повторяющиеся ошибки в пределах одного исполнения:

ignore_repeated_errors = On

Ограничения ресурсов

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

По умолчанию максимальное время выполнения скрипта - 30 секунд, сделаем минуту:

max_execution_time = 30

Если указать 0, то скрипт может выполняться бесконечно. Вы также можете ограничить время, на протяжении которого скрипт будет загружать данные, 60 секунд:

max_input_time=60

Максимальное количество переменных в GET и POST:

max_input_vars = 1000

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

memory_limit = 128M

Максимальный размер данных, передаваемых в POST запросе тоже ограничивается, размер по умолчанию - 8 Мегабайт:

post_max_size = 8M

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

open_basedir = /var/www/

С помощью директив disable_functions и disable_classes вы можете отключить использование в скриптах определенных функций или классов, например, это может быть полезно для веб-хостингов. В этом примере мы отключаем использование функции ini_set, которая позволяет менять настройки php из скрипта:

disable_functions = ini_set

Директории по умолчанию

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

include_path = ".:/usr/share/php5:/usr/share/php5/PEAR"

Папка с модулями php:

extension_dir="./"

Папка для записи временных файлов:

sys_temp_dir = "/tmp"

Для того чтобы пользователи могли загружать свои файлы на сервер, например, фото, нужно включить эту функцию в php:

file_uploads = On

Максимальный размер загружаемого файла:

upload_max_filesize = 2M

Максимальное количество файлов, которые может загрузить один скрипт:

max_file_uploads = 20

Настройка php.ini практически завершена, нам остались лишь расширения.

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

Расширения позволяют очень сильно увеличить функциональность php. Например, благодаря расширениям вы можете использовать в своих скриптах базы данных mysql, postgresql, mysqli, sqlite, графическую библиотеку gd и многое другое. Все это включается в этом разделе.

Для включения расширения достаточно убрать комментарий перед строкой с его командой, например:

extension=php_mysql.so
extension=php_mbstring.so
extension=php_pgsql.so

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

Выводы

В этой статье мы рассмотрели как выполняется настройка php на сервере или обычном компьютере для разработки веб-сайтов. Файл настроек php имеет довольно простую структуру и с ним довольно не сложно справиться. После завершения всех настроек и сохранения изменений не забудьте перезагрузить веб-сервер или сервис php-fpm.

Вообще говоря, php-fpm это отдельная тема, потому что там есть много дополнительных настроек, и, возможно, мы рассмотрим его в одной из следующих статей. Если у вас остались вопросы, спрашивайте в комментариях!

Конечно же вы попадали в такую ситуацию, когда приложение, разработанное вами ранее, могло быть снова использовано в рамках другого проекта. Вначале вы конечно же подумали, что это не создаст никаких проблем. Всего-то необходимо скопировать код из одного каталога в другой! Со временем вы осознали, что проекты могут различаться между собой различными параметрами, пусть даже самыми незначительными. Например, это может быть e-mail адрес на который отсылаются сообщения. В таком случае вам ничего не остается, как открыть множество файлов в редакторе и изменить их содержимое, вставляя нужный e-mail при помощи функции найти/заменить. Эта статья расскажет вам о том, как можно избавить себя от подобной работы, а так же порекомендует ряд дополнительных средств для создания и чтения конфигурационных файлов.

Повторное использование кода

Компьютер был изобретен для того, чтобы избавить человека от лишней работы. Развитие компьютерных технологий привело к тому, что человек стал стремиться все меньше времени проводить за компьютером. Допустим, вы программист. Не будь компьютера, вы бы остались без работы. Но в то же время вы стараетесь с помощью компьютера упростить свою ежедневную работы, с этой целью вы используете, например, функцию автозавершения кода в редакторе. Мы хотим подвести вас к той мысли, что код созданный вами, должен быть организован так, чтобы работы по его модификации были сведены к минимуму. Чаще всего это удается, когда вы создаете код, автоматизирующий рутинные операции, такие как создание и прорисовка формы, а так же отправка e-mail. Однако не стоит забывать, что функции для выполнения рутинных операций никогда не бывают на 100% идентичными в различных приложениях. Один формуляр не похож на другой, а сообщения электронной почты предназначены разным адресатам. Однако логика на уровне приложения остается прежней, функции различаются между собой только некоторыми параметрами. Таким образом, вы должны ясно представлять свою цель – разработать код, параметры которого можно было бы определять извне.

Модульная организация

Для решения этой задачи, планируя структуру приложения, вы должны позаботиться о модульности. То есть вам необходимо поместить часто используемые функции или классы в отдельный файл, который будет подключаться через require_once. В этом случае файлы приложения не будут наполнены избыточным кодом. Допустим, вы часто осуществляете запись в лог-файл. В таком случае было бы неплохо код, выполняющий эту операцию, заключить в рамки класса или функции. Будет еще лучше, если вы воспользуетесь уже готовым классом, взятым из какой-нибудь библиотеки исходных кодов, например PEAR.

Параметры процедурального кода

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

Листинг 1 демонстрирует функцию, которая занимается отправкой e-mail. В ее теле содержится только одна php-функция - mail(). Таким образом, мы избавляемся от необходимости каждый раз указывать получателя при отправке сообщения. Следующая переменная, которую мы определяем, обозначает префикс, предшествующий теме сообщения. Конфигурационный файл, подключаемый через require_once, мог бы выглядеть следующим образом.

Listing 1

$to = "webmaster@localhost" ;
$prefix = " " ;
?>

function sendMail ($subject , $body )
{
global $to , $prefix ;
$subject = $prefix . $subject ;
return mail ($to , $subject , $body );
}
require_once "config1.php" ;
sendMail ("Test" , "Это тестовое сообщение." );
?>

Есть способ лучше

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

  • Глобальные переменные, которые мы используем, могут породить конфликты в пространстве имен.
  • В том случае, если конфигурационные файлы редактируются не программистом, а дилетантом, в системе могут возникнуть синтаксические ошибки, например из-за незакрытых кавычек.
  • Для того, чтобы получить доступ к различным переменным, необходимо обращаться к массиву $_GLOBALS.

Вместо php-модулей существуют другие форматы, которые могут быть легко поняты и изменены дилетантами, а так же php-скриптами. Мы имеем в виду два формата: этого широко используемые операционной системой Windows ini-файлы, а так же формат XML.

В этом примере вы уже заметили, что внутри тега указывается тип значения. Названия типов идентичны тем, что используются в php-функции settype(). Если тип не указан, тогда значение интерпретируется как строка. Для часто используемых опций можно определить отдельный тег.





webmaster@localhost
100

Наряду с функцией getConfigValue, существует функция setConfigValue(), с помощью которой можно изменить значение опции. Затем конфигурационный файл может быть заново записан с помощью writeConfigFile() (см листинг 7).

patConfiguration предлагает также серию дополнительных возможностей. Например, наряду с тегами, существует возможность определять атрибуты и пространства имен (Namespace), а к тегу можно привязать внешний файл, таким образом, опции будут распределены по нескольким файлам. Кроме этого patConfiguration включает систему кэширования, благодаря которой пропадает необходимость в многократном считывании конфигурационного файла.

Дополнительную информацию вы сможете найти на PHP Application Tools-Homepage и в patConfiguration-Tutorial на DevShed .

Listing 7

require_once "include/patConfiguration.php" ;

$config = new patConfiguration (
array(
"configDir" => "./" ,
"errorHandling" => "nice_die"
);
$config -> parseConfigFile ("config6.xml" );
$config -> setConfigValue ("errors.email" , "errors@localhost" );
$config -> writeConfigFile ("config6_new.xml" , "xml" , array("mode" => "pretty" ));
?>

Заключение

Забота о гибкости настроек приложения может сберечь много времени, особенно если его компоненты предполагается использовать в других проектах. Вы потратите еще меньше времени, если доверите работу с конфигурационными файлами одному из готовых классов. Выбор между PEAR::Config и patConfiguration зависит от задачи. Преимуществом PEAR::Config является поддержка различных форматов конфигурационных файлов, в то время как patConfiguration прекрасно работает с XML, так же предоставляет ряд дополнительных возможностей. Однако с появлением версии 2.0.0 этот пакет будет иметь одинаковый API для считывания ini и wddx файлов. PHP-массив поддерживаются уже в текущей версии.



Есть еще вопросы или что-то непонятно - добро пожаловать на наш