- Где находится php.ini, файл конфигурации PHP?
- Что такое php.ini ?
- Где находится php.ini?
- Где этот файл php ini
- Scan directories
- Настройка файла php.ini для высоконагруженных сайтов
- Где находится файл php.ini
- Задать базовые настройки php.ini
- Директивы PHP
- Распространённые ошибки PHP
- Изменить время выполнения скрипта
- Fatal error: Allowed memory size of
Где находится php.ini, файл конфигурации PHP?
В этом уроке мы обсудим php.ini — основной файл конфигурации в PHP. С точки зрения начинающего, мы обсудим, для чего он предназначен, где его найти, и пару важных настроек конфигурации, которые он предоставляет.
Что такое php.ini ?
Если вы новичок в PHP или опытный разработчик, я уверен, что вы слышали о php.ini : самом важном файле конфигурации PHP.
Когда PHP запускается, он ищет файл php.ini в некоторых определенных местах и загружает его. Этот файл позволяет вам настроить несколько важных параметров, о которых вы должны знать. Довольно часто вы обнаружите, что вам нужно настроить параметры в файле php.ini .
С другой стороны, вполне возможно, что вам никогда не понадобилось изменять php.ini . PHP может успешно работать с настройками, предоставленными в файле php.ini по умолчанию, поскольку PHP поставляется с этими рекомендуемыми настройками по умолчанию. На самом деле, нет критических параметров конфигурации, которые вы должны установить для запуска PHP.
Однако файл php.ini содержит несколько важных настроек, с которыми вы хотите ознакомиться. На самом деле, как разработчик PHP, это неизбежно, и вы столкнетесь с этим раньше, чем позже.
Где находится php.ini?
В этом разделе мы увидим, как найти файл php.ini, который загружается при запуске сценария PHP. Это может быть непросто — расположение файла php.ini сильно зависит от среды, в которой вы используете PHP. Если вы работаете в Windows, вы, скорее всего, найдете файл php.ini в каталоге вашей установки PHP на системном диске. С другой стороны, если вы работаете в другой операционной системе, трудно угадать точное местоположение файла php.ini — есть несколько возможностей.
Здесь на phpinfo() приходит функция phpinfo() . Он скажет вам, где находится php.ini , а также выведет всю важную информацию о конфигурации PHP.
Вы можете запустить phpinfo() , создав файл .php и вызвав эту функцию. Создайте файл phpinfo.php со следующим содержимым и поместите его в корневой каталог документа:
Где этот файл php ini
The configuration file ( php.ini ) is read when PHP starts up. For the server module versions of PHP, this happens only once when the web server is started. For the CGI and CLI versions, it happens on every invocation.
- SAPI module specific location ( PHPIniDir directive in Apache 2, -c command line option in CGI and CLI)
- The PHPRC environment variable.
- The location of the php.ini file can be set for different versions of PHP. The root of the registry keys depends on 32- or 64-bitness of the installed OS and PHP. For 32-bit PHP on a 32-bit OS or a 64-bit PHP on a 64-bit OS use [(HKEY_LOCAL_MACHINE\SOFTWARE\PHP] for 32-bit version of PHP on a 64-bit OS use [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP] ] instead. For same bitness installation the following registry keys are examined in order: [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z] , [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y] and [HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x] , where x, y and z mean the PHP major, minor and release versions. For 32 bit versions of PHP on a 64 bit OS the following registry keys are examined in order: [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y.z] , [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y] and [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x] , where x, y and z mean the PHP major, minor and release versions. If there is a value for IniFilePath in any of these keys, the first one found will be used as the location of the php.ini (Windows only).
- [HKEY_LOCAL_MACHINE\SOFTWARE\PHP] or [HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP] , value of IniFilePath (Windows only).
- Current working directory (except CLI).
- The web server’s directory (for SAPI modules), or directory of PHP (otherwise in Windows).
- Windows directory ( C:\windows or C:\winnt ) (for Windows), or —with-config-file-path compile time option.
If php-SAPI.ini exists (where SAPI is the SAPI in use, so, for example, php-cli.ini or php-apache.ini ), it is used instead of php.ini . The SAPI name can be determined with php_sapi_name() .
Note:
The Apache web server changes the directory to root at startup, causing PHP to attempt to read php.ini from the root filesystem if it exists.
Using environment variables can be used in php.ini as shown below.
Example #1 php.ini Environment Variables
; PHP_MEMORY_LIMIT is taken from environment memory_limit = $
The php.ini directives handled by extensions are documented on the respective pages of the extensions themselves. A list of the core directives is available in the appendix. Not all PHP directives are necessarily documented in this manual: for a complete list of directives available in your PHP version, please read your well commented php.ini file. Alternatively, you may find » the latest php.ini from Git helpful too.
Example #2 php.ini example
; any text on a line after an unquoted semicolon (;) is ignored [php] ; section markers (text within square brackets) are also ignored ; Boolean values can be set to either: ; true, on, yes ; or false, off, no, none register_globals = off track_errors = yes ; you can enclose strings in double-quotes include_path = ".:/usr/local/lib/php" ; backslashes are treated the same as any other character include_path = ".;c:\php\lib"
It is possible to refer to existing .ini variables from within .ini files. Example: open_basedir = $ «:/new/dir» .
Scan directories
It is possible to configure PHP to scan for .ini files in a directory after reading php.ini . This can be done at compile time by setting the —with-config-file-scan-dir option. The scan directory can then be overridden at run time by setting the PHP_INI_SCAN_DIR environment variable.
It is possible to scan multiple directories by separating them with the platform-specific path separator ( ; on Windows, NetWare and RISC OS; : on all other platforms; the value PHP is using is available as the PATH_SEPARATOR constant). If a blank directory is given in PHP_INI_SCAN_DIR , PHP will also scan the directory given at compile time via —with-config-file-scan-dir.
Within each directory, PHP will scan all files ending in .ini in alphabetical order. A list of the files that were loaded, and in what order, is available by calling php_ini_scanned_files() , or by running PHP with the —ini option.
Assuming PHP is configured with --with-config-file-scan-dir=/etc/php.d, and that the path separator is . $ php PHP will load all files in /etc/php.d/*.ini as configuration files. $ PHP_INI_SCAN_DIR=/usr/local/etc/php.d php PHP will load all files in /usr/local/etc/php.d/*.ini as configuration files. $ PHP_INI_SCAN_DIR=:/usr/local/etc/php.d php PHP will load all files in /etc/php.d/*.ini, then /usr/local/etc/php.d/*.ini as configuration files. $ PHP_INI_SCAN_DIR=/usr/local/etc/php.d: php PHP will load all files in /usr/local/etc/php.d/*.ini, then /etc/php.d/*.ini as configuration files.
Настройка файла php.ini для высоконагруженных сайтов
php.ini — конфигурационный файл интерпретатора PHP. Интерпретатор php может поставляться в виде модуля для Apache, выполнять скрипты из командной строки или в виде отдельного сервиса php-fpm. Эти сервисы отличаются своими возможностями, и предназначением, но для любого вида интерпретатора нужно задать базовые настройки, например, рабочая папка, включенные расширения, отображение ошибок и так далее. Все эти настройки задаются через файл php.ini.
Где находится файл php.ini
Расположение файла php.ini в разных операционных системах и разных панелей управления хостингом отличается. Ini файлов может быть много, под каждую версию PHP — отдельный php.ini. Чтобы узнать какой php.ini загружен для вашего сайта, нужно узнать чему равен параметр «Loaded Configuration File», например через функцию phpinfo(). Или использовать консольную команду:
php -i | grep php.ini Configuration File (php.ini) Path => /etc/php/8.2/cli Loaded Configuration File => /etc/php/8.2/cli/php.ini
Давайте разберем поиск php.ini на сложном примере установки модуля IonCube, при условии установленных разных версий интерпретатора PHP на вашем VPS.
Задать базовые настройки php.ini
После покупки VPS и установки панели, зачастую нужно сразу меня настройки по умолчанию PHP. Если установлена панель, лучше это делать через нее, а не на прямую в консоли. В любом случае, я описываю что нужно менять, а каким способом решать вам. Подробнее об используемых директивах PHP читайте ниже.
Для моего сайта php.ini расположен по пути /etc/php/8.1/fpm/php.ini (как искать php.ini читайте выше). Обязательно делайте бэкап файла.
И так какие базовые настройки нужно менять сразу в php.ini для высоконагруженных сайтов:
;date.timezone менять опционально date.timezone = Europe/Kyiv memory_limit = 512M upload_max_filesize = 80M post_max_size = 80M
После изменения, нужно указать ОС перечитать настройки, в моем случае это будет команда:
systemctl reload php8.1-fpm.service
Изучите также статьи — это будет полезно для понимания сделанных изменений в php.ini:
Директивы PHP
Пример получения значение параметра из php.ini при помощи PHP кода:
register_long_arrays Off — сообщает PHP, следует ли регистрировать устаревшие длинные предопределенные переменные типа $HTTP_*_VARS. Если вы их не используете, рекомендуем отключить их из соображений производительности. Вместо них следует использовать суперглобальные массивы, например $_GET. Эта директива стала доступна начиная с версии PHP 5.0.0.
register_globals Off — запрещает регистрацию переменных, полученных методом Метод HTTP POST или GET в глобальный массив $GLOBALS. Данная возможность была помечена УСТАРЕВШЕЙ начиная с версии PHP 5.3.0 и была УДАЛЕНА в версии PHP 5.4.0.
date.timezone указывает часовой пояс для вашего сайта: Список поддерживаемых временных (часовых) зон.
post_max_size — максимальный размер данных, которые могут быть отправлены по методу POST. Как правило, значение должно быть больше, чем upload_max_filesize и меньше, чем memory_limit. Используются символы для значений байта: K(kilo), M(mega), и G(giga). Например, 80M.
Распространённые ошибки PHP
Изменить время выполнения скрипта
Ограничение по ресурсам:
Устанавливется максимальное возможное время выполнения скрипта в секундах.
Максимально возможное время в секундах, которое скрипт может потратить на обработку загружаемых данных.
Максимальный объем памяти, выделяемый сценарию, составляет, например, 8 Мбайт.
Fatal error: Allowed memory size of
Fatal error: Allowed memory size of 54554432 bytes exhausted (tried to allocate …..»
Эта ошибка означает, что ваш скрипт для выполнения требует памяти больше, чем разрешено в настройках PHP на сервере. Т.е. запрашиваемое значение превышает максимальное количество оперативной памяти предоставляемого пользовательскому аккаунту виртуальным хостингом.
Попробовать самостоятельно изменить это значение, добавив в самое начала index.php (расположенного в корне сайта) следующие строчки:
php_value memory_limit 32M
лимит можно изменять самостоятельно, можно поставить и 64M но не наглеть 🙂 Если же такой файл уже есть в корне сайта — просто добавьте в него приведенную выше строку. Если у хостера PHP работает ка PHP-CGI через suPHP, то это может вызвать ошибку 500, значить использовать директивы php_flag, php_value в файле .htaccess невозможно!
Некоторые хостеры поддерживают работу php.ini у клиента, т.е. вы можете самостоятельно делать свои настройки PHP для своей учетной записи. А значить создайте файл php.ini в корне сайта и добавьте следующий код:
Если это не помогло — обратитесь к администратору хостинга и попросите увеличить количество доступной памяти для PHP.