php edit php ini
Настройка файла php.ini
Интерпретатор php может поставляться в виде модуля для Apache, выполнять скрипты из командной строки или в виде отдельного сервиса php-fpm. Эти сервисы отличаются своими возможностями, и предназначением, но для любого вида интерпретатора нужно задать базовые настройки, например, рабочая папка, включенные расширения, отображение ошибок и так далее. Все эти настройки задаются через файл php.ini. В этой инструкции мы рассмотрим как выполняется настройка файла php.ini в операционных системах Linux, хотя все информация подойдет и для Windows.
Если у вас еще не установлен интерпретатор языка программирования php, то вы можете ознакомиться со статьей установка lamp в Ubuntu 16.04.
Расположение и синтаксис php.ini
Для каждой версии интерпретатора конфигурационный файл php.ini находится в отдельной папке. Но все конфигурационные файлы находятся в папке /etc/php, например, /etc/php5:
Если вы собираетесь использовать несколько из этих интерпретаторов, то вам придется указывать настройки для каждого из них отдельно. Вы можете убедиться, что в каждой из папок лежит файл php.ini.
Что касается синтаксиса файла, то он разделен на секции, сначала идет секция настройки php, которая разделена на подсекции в зависимости от типа настроек, дальше идут секции настройки разных модулей. Синтаксис самих настроек очень прост, он соответствует привычному синтаксису ini файлов. Строка начинается с имени настройки, затем следует знак равно, а за ним значение:
имя_настройки = значение_параметра
Символами [] обозначается имя секции, например, [PHP], а символ ; означает комментарий, он и все символы после него не читаются интерпретатором. А теперь рассмотрим как выполняется настройка php.ini и переберем самые важные параметры.
Настройка файла php.ini
Для удобства ориентирования мы разобьем все параметры по категориях в зависимости от их назначения. Вам будет достаточно найти нужный параметр и изменить его значение. А теперь откройте файл настроек php, например, для модуля apache и перейдем к настройке. Чтобы избежать ошибок не добавляйте новые строки, а ищите уже существующие и изменяйте значения на нужные:
sudo gedit /etc/php5/apache/php.ini
Сначала идет немного информации о самом файле в виде комментариев, затем интересующие нас настройки.
Вывод ошибок в php
Настройка php 7 обычно начинается с конфигурации вывода ошибок. Все настройки вывода ошибок находятся в разделе Error handling and logging. По умолчанию вывод ошибок на экран во время выполнения скрипта отключен. Это сделано для того, чтобы пользователи не смогли увидеть ничего лишнего. Вместо этого, все ошибки записываются в лог файл. Если вы используете php на домашнем компьютере, то такие меры не нужны и вы можете сразу выводить все на экран:
Замените off на on. В php используются различные типы ошибок, например, критические, предупреждения, ошибки синтаксиса, с помощью строки error_reporting вы можете включить вывод только определенных типов ошибок:
Если нужно объединить несколько типов ошибок, то используйте символ &, а для отключения отображения поставьте перед типом знак
. Приведенный выше пример отображает все ошибки (E_ALL), кроме сообщений об устаревших функциях (E_DEPRECATED). Вы можете отключить все типы использовав 0:
Включите запись ошибок php в лог файл, если не выводите их на экран:
Чтобы не засорять лог однотипными сообщениями можно игнорировать повторяющиеся ошибки в пределах одного исполнения:
Ограничения ресурсов
Если бы скрипты php никак не ограничивались в ресурсах, то они запросто могли бы перегрузить сервер и не дать ему нормально работать. Поэтому, по умолчанию php устанавливает жесткие ограничения, но, возможно, вам нужно будет их немного ослабить.
Если указать 0, то скрипт может выполняться бесконечно. Вы также можете ограничить время, на протяжении которого скрипт будет загружать данные, 60 секунд:
Максимальное количество переменных в GET и POST:
Следующий параметр задает максимальное количество памяти, которую может использовать один скрипт во время своего выполнения, в мегабайтах:
Вы можете ограничить область действия php в системе с помощью опции openbase_dir, она указывает папку, выше которой скрипт не может получить доступ к файловой системе:
С помощью директив disable_functions и disable_classes вы можете отключить использование в скриптах определенных функций или классов, например, это может быть полезно для веб-хостингов. В этом примере мы отключаем использование функции ini_set, которая позволяет менять настройки php из скрипта:
Директории по умолчанию
Файл настройки php.ini позволяет указать пути в файловой системе по умолчанию для различных действий. Вы можете задать папки где система будет искать скрипты, если вы попытаетесь подключить их с помощью инструкции include:
Папка с модулями php:
Папка для записи временных файлов:
Загрузка файлов
Для того чтобы пользователи могли загружать свои файлы на сервер, например, фото, нужно включить эту функцию в php:
Максимальный размер загружаемого файла:
Максимальное количество файлов, которые может загрузить один скрипт:
Настройка 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 это отдельная тема, потому что там есть много дополнительных настроек, и, возможно, мы рассмотрим его в одной из следующих статей. Если у вас остались вопросы, спрашивайте в комментариях!
Описание встроенных директив php.ini
Представленные здесь значения по умолчанию используются в случае, если не был подключен php.ini ; значения для боевого php.ini и для разработки могут различаться.
Опции Httpd
Имя | По умолчанию | Меняемо | Список изменений |
---|---|---|---|
async_send | «0» | PHP_INI_ALL | Доступна, начиная с PHP 4.2.0. Удалена в PHP 4.3.0. |
Языковые опции
Имя | По умолчанию | Меняемо | Список изменений | |
---|---|---|---|---|
short_open_tag | «1» | PHP_INI_PERDIR | PHP_INI_ALL в PHP php.ini | Доступна с версии PHP 4.3.2. |
exit_on_timeout | «» | PHP_INI_ALL | Доступна с версии PHP 5.3.0. | |
expose_php | «1» | Только php.ini | ||
zend.multibyte | «0» | PHP_INI_ALL | Доступна с версии PHP 5.4.0 | |
zend.script_encoding | NULL | PHP_INI_ALL | Доступна с версии PHP 5.4.0 | |
zend.detect-unicode | NULL | PHP_INI_ALL | Доступна с версии PHP 5.4.0 | |
zend.signal_check | «0» | PHP_INI_SYSTEM | Доступна с версии PHP 5.4.0 | |
zend.assertions | «1» | PHP_INI_ALL | Доступна с версии PHP 7.0.0. | |
zend.ze1_compatibility_mode | «0» | PHP_INI_ALL | Доступна с версии PHP 5.0.0. Удалена в PHP 5.3.0 | |
detect_unicode | «1» | PHP_INI_ALL | Доступна с версии PHP 5.1.0. Переименована на zend.detect-unicode с версии PHP 5.4.0. |
Краткое разъяснение конфигурационных директив.
Версия | Описание |
---|---|
7.0.0 | Удалена из PHP. |
precision integer Количество значащих цифр, отображаемых для чисел с плавающей точкой. serialize_precision integer Количество сохраняемых значащих цифр при сериализации чисел с плавающей точкой. y2k_compliance boolean Включение совместимости с 2000 годом (создаст проблемы с несовместимыми браузерами) allow_call_time_pass_reference boolean
Нужно ли выводить предупреждение, если аргументы передаются по ссылке при вызове функции. Рекомендуется указывать в объявлении функции передаваемые по ссылке аргументы. Попробуйте выключить эту опцию и убедиться, что ваши скрипты правильно работают без нее и что они будут работать с будущими версиями языка (вы будете получать предупреждение каждый раз, когда вы будете пользоваться этой возможностью).
Передача аргументов по ссылке во время вызова функции была объявлена устаревшей из соображений чистоты кода. Функция может менять свои аргументы недокументированным способом, если бы аргумент не объявлялся передаваемым по ссылке. Чтобы избежать побочных эффектов, лучше явно указывать, какие аргументы передаются по ссылке только при объявлении функции.
Эта директива позволяет отключить некоторые функции по причинам безопасности. Она принимает список имен функций, разделенный запятыми. disable_functions не подвержена влиянию безопасного режима.
Только внутренние функции могут быть отключены с помощью этой директивы. Пользовательские функции ей не подвержены.
Включает режим совместимости с Zend Engine 1 (PHP 4). Это влияет на клонирование, приведение типов (объекты без свойств приводятся к FALSE или 0) и сравнение объектов. В этом режиме объекты по умолчанию передаются по значению вместо ссылки.
Эта возможность была помечена УСТАРЕВШЕЙ и БЫЛА УДАЛЕНА в версии PHP 5.3.0.
Разрешает парсинг исходных файлов в многобайтных кодировках. Включение zend.multibyte требуется для использования кодировок символов подобных SJIS, BIG5 и т.д., содержащих специальные символы в многобайтных строковых данных. Совместимые с ISO-8859-1 кодировки, например UTF-8, EUC и т.д., не требуют эту опцию.
Данное значение будет использовано, только при отсутствии директивы declare(encoding=. ) в начале скрипта. При использовании кодировок несовместимых с ISO-8859-1, нужно использовать опции и zend.multibyte и zend.script_encoding.
Определяет, нужно ли проверять замененные обработчики сигналов при завершении скрипта.
Эта директива только для Apache1 mod_php, которая заставляет потомка Apache завершиться, если произошел тайм-аут исполнения скрипта PHP. Такой тайм-аут приводит к внутреннему вызову longjmp() в Apache1, который оставляет некоторые расширения в несогласованном состоянии. По завершении процесса все неснятые блокировки или память будут очищены.
Ограничения ресурсов
Имя | По умолчанию | Меняемо | Список изменений |
---|---|---|---|
memory_limit | «128M» | PHP_INI_ALL | «8M» до PHP 5.2.0, «16M» в PHP 5.2.0 |
Краткое разъяснение конфигурационных директив.
Эта директива задает максимальный объем памяти в байтах, который разрешается использовать скрипту. Это помогает предотвратить ситуацию, при которой плохо написанный скрипт съедает всю доступную память сервера. Для того, чтобы убрать ограничения, установите значение этой директивы в -1.
Настройка производительности
Имя | По умолчанию | Меняемо | Список изменений |
---|---|---|---|
realpath_cache_size | «16K» | PHP_INI_SYSTEM | Доступна с версии PHP 5.1.0. |
realpath_cache_ttl | «120» | PHP_INI_SYSTEM | Доступна с версии PHP 5.1.0. |
Краткое разъяснение конфигурационных директив.
Определяет размера кэша realpath, используемого в PHP. Это значение должно быть увеличено на системах, в которых PHP открывает большое количество файлов соответственно количеству выполняемых файловых операций.
Размер равный общему числу байт, хранящимся в строках путей, плюс размер данных связанных с кешируемым элементом. Это значит, что для хранения длинных путей в кэше, размер этого кэша должен быть больше. Это значение не определяет напрямую количество разных путей, которые могут быть закэшированы.
Размер, необходимый для кэширования, зависит от системы.
Время (в секундах) в течение которого будет использован кэш realpath для указанного файла или директории. Для систем с редко меняющимися файлами это значение можно увеличить.
Обработка данных
Имя | По умолчанию | Меняемо | Список изменений | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
arg_separator.output | «&» | PHP_INI_ALL | Доступна с версии PHP 4.0.5. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
arg_separator.input | «&» | PHP_INI_PERDIR | Доступна с версии PHP 4.0.5. | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
variables_order | «EGPCS» | PHP_INI_PERDIR | PHP_INI_ALL в PHP = 5.6.0; пустая для PHP arg_separator.output string Этот разделитель используется в генерируемых PHP URL в качестве разделителя аргументов. Список разделителей, используемых PHP для получения переменных из URL. Каждый символ в этой директиве считается разделителем! Эта директива регулирует порядок, в котором PHP добавляет переменные GET, POST и Cookie в массив _REQUEST. Добавление производится слева направо, новые значения перезаписывают старые. Когда включено, переменные SERVER и ENV создаются в тот момент, когда они впервые используются (Just In Time), а не в начале выполнения скрипта. Если эти переменные в скрипте не используются, включение этой директивы приведет к росту производительности. Директивы PHP register_globals, register_long_arrays и register_argc_argv должны быть выключены для правильной работы этой директивы. Начиная с версии PHP 5.1.3 стало необязательно выключать register_argc_argv. Использование переменных SERVER и ENV проверяется на стадии компиляции, поэтому их использование с помощью, например, переменных переменных не запустит их инициализацию. Регистрировать или нет переменные EGPCS (Environment, GET, POST, Cookie, Server) в качестве глобальных переменных. Начиная с версии » PHP 4.2.0, значением по умолчанию для этой директивы является off. Пожалуйста, ознакомтесь с главой о безопасности Использование глобальных переменных для получения дополнительной информации. На поведение register_globals влияет директива variables_order. Данная возможность была помечена УСТАРЕВШЕЙ начиная с версии PHP 5.3.0 и была УДАЛЕНА в версии PHP 5.4.0. Данная возможность была помечена УСТАРЕВШЕЙ начиная с версии PHP 5.3.0 и была УДАЛЕНА в версии PHP 5.4.0. PHP разрешает сокращения значений байт, включая K (кило), M (мега) и G (гига). PHP автоматически преобразует все эти сокращения. Будьте осторожны с превышением диапазона 32-битных целых значений (если вы используете 32-битную версию), так как это приведет к ошибке вашего скрипта. Специальное значение none отключает эту директиву. Специальное значение none отключает эту директиву. По умолчанию PHP выводит название кодировки в заголовке Content-Type. Если передавать кодировку не требуется, просто оставьте эту опцию пустой. Не рекомендуется устанавливать default_charset в пустое значение. Доступна с PHP 5.6.0. Эта опция используется для многобайтных модулей, таких как mbstring и iconv. По умолчанию пусто. Доступна с PHP 5.6.0. Эта опция используется для многобайтных модулей, таких как mbstring и iconv. По умолчанию пусто. Доступна с PHP 5.6.0. Эта опция используется для многобайтных модулей, таких как mbstring и iconv. По умолчанию пусто. В это случае используется default_charset. This feature was DEPRECATED in PHP 5.6.0, and REMOVED as of PHP 7.0.0. Пути и Директории
Краткое разъяснение конфигурационных директив. Пример #1 include_path в Unix Пример #2 include_path в Windows Использование . в include_path позволяет задавать относительные пути для подключения файлов, так как точка означает текущую директорию. Однако, более эффективно использовать include ‘./file’, чем заставлять PHP каждый раз проверять текущую директорию при подключении каждого файла. Переменные окружения могут отличаться между различными серверными API, так как сами эти окружения отличаются друг от друга. Ограничивает указанным деревом каталогов файлы, которые могут быть доступны для PHP, включая сам файл. Эта директива НЕ подвержена влиянию безопасного режима. В Windows разделяйте директории точкой с запятой. На всех остальных системах, разделяйте директории двоеточием. При работе в качестве модуля Apache, пути open_basedir автоматически наследуются от родительских директорий. Ограничение, определяемое open_basedir является именем директории начиная с версии PHP 5.2.16 и 5.3.4. Предыдущие версии использовали это значение в качестве префикса. Это означает, что «open_basedir = /dir/incl» также разрешит доступ к «/dir/include» и «/dir/incls«, если они существуют. Если вы захотите ограничить доступ только указанной директорией, поставьте в конце слеш. Например: open_basedir = /dir/incl/ По умолчанию все файлы могут быть открыты. «Корневая директория» PHP на этом сервере. Используется только в случае, если не пустая. Если PHP сконфигурирован с безопасный режим, файлы вне этой директории не обрабатываются. Если PHP не был скомпилирован с FORCE_REDIRECT, вам следует установить doc_root, если вы используете PHP в качестве CGI под любым веб-сервером (кроме IIS). Альтернативой является использование конфигурационной директивы cgi.force_redirect, речь о которой идет ниже. Какие динамически загружаемые расширения должны быть загружены при старте PHP. Имя динамически загружаемого расширения Zend (например, APD), которое должно быть загружено при старте PHP. Вариант zend_extension для расширений, скомпилированных с отладочной информацией до PHP 5.3.0. Вариант zend_extension для потокобезопасных расширений, скомпилированных с отладочной информацией до PHP 5.3.0. Вариант zend_extension для потокобезопасных расширений. Пользователям Windows: При использовании IIS эта опция должна быть отключена. Тоже самое необходимо для OmniHTTPD и Xitami. Если cgi.force_redirect включена и вы работаете не под веб-сервером Apache или Netscape (iPlanet), вам может понадобиться установить переменную окружения, которую будет искать PHP чтобы убедиться, что он может продолжать выполнение. Установка этой переменной может повлечь за собой проблемы с безопасностью, так что вы должны знать, что вы делаете. Сообщает PHP, какой тип заголовков использовать при отправке кода ответа HTTP. Если установлено в 0, PHP отправляет » RFC 3875 заголовок «Status:», который поддерживается Apache и другими веб-серверами. Если установлено в 1, PHP отправляет заголовки, соответствующие » RFC 2616. Если эта опция включена и вы используете PHP в окружении CGI (например, PHP-FPM), то вместо использования HTTP-заголовков ответа в стиле RFC 2616, нужно использовать их эквивалент из стандарта RFC 3875, например, вместо header(«HTTP/1.0 404 Not found»); нужно использовать header(«Status: 404 Not Found»); Оставьте в значении 0, если вы не уверены в том, что это значит. Включает логирование SAPI при использовании FastCGI. Логирование включено по умолчанию. Закачивание Файлов
|