<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/configuration.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'configuration.file.php',
    1 => 'Файл конфигурации',
    2 => 'Файл конфигурации',
  ),
  'up' => 
  array (
    0 => 'configuration.php',
    1 => 'Конфигурация времени выполнения',
  ),
  'prev' => 
  array (
    0 => 'configuration.php',
    1 => 'Конфигурация времени выполнения',
  ),
  'next' => 
  array (
    0 => 'configuration.file.per-user.php',
    1 => 'Файлы .user.ini',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'install/ini.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="configuration.file" class="sect1">
  <h2 class="title">Файл конфигурации</h2>

  <p class="simpara">
   Файл конфигурации (<var class="filename">php.ini</var>)
   считывается при запуске PHP. Для версий серверных модулей PHP
   это происходит только один раз при запуске веб-сервера. Для
   <abbr title="Common Gateway Interface">CGI</abbr>- и <abbr title="Command Line Interpreter/Interface">CLI</abbr>-версии PHP —
   при каждом вызове.
  </p>
  <p class="para">
   PHP ищёт файл <var class="filename">php.ini</var> в следующих местах (по порядку поиска):
   <ul class="itemizedlist">
    <li class="listitem">
     <span class="simpara">
      По расположению конкретного SAPI-модуля (директива <code class="literal">PHPIniDir</code>
      в веб-сервере Apache 2, параметр командной строки <code class="literal">-c</code> в CGI- и CLI-интерфейсе)
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Переменная окружения <var class="varname">PHPRC</var>.
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Расположение файла <code class="literal">php.ini</code> зависит от версии PHP.
      Корень ключей реестра ОС зависит от разрядности ОС и PHP. При установке 32-разрядного PHP
      на 32-разрядной ОС Windows или 64-разрядного PHP на 64-разрядной Windows
      PHP исследует раздел реестра <code class="literal">[(HKEY_LOCAL_MACHINE\SOFTWARE\PHP]</code>,
      при установке 32-разрядного PHP на 64-разрядной Windows —
      раздел <code class="literal">[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP]</code>.
      PHP проверяет следующие разделы реестра по порядку для установок
      с одинаковой разрядностью:
      <code class="literal">[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y.z]</code>,
      <code class="literal">[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x.y]</code>
      и <code class="literal">[HKEY_LOCAL_MACHINE\SOFTWARE\PHP\x]</code>,
      где x, y и z подразумевают мажорную, минорную и точечную версии выпусков PHP.
      Для 32-разрядного PHP на 64-разрядной ОС Windows ключи реестра будут другими:
      <code class="literal">[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y.z]</code>,
      <code class="literal">[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x.y]</code>
      и <code class="literal">[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6421Node\PHP\x]</code>.
      PHP будет использовать первый найденный ключ как расположение файла
      <code class="literal">php.ini</code>, если ключи содержат
      значение <code class="literal">IniFilePath</code> (только для ОС Windows).
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Разделы <code class="literal">[HKEY_LOCAL_MACHINE\SOFTWARE\PHP]</code>
      или <code class="literal">[HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\PHP]</code>, значение
      <code class="literal">IniFilePath</code> (только для Windows).
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Текущая рабочая директория (исключая CLI-интерфейс).
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Директория веб-сервера (для SAPI-модулей) или директория PHP
      (иначе в Windows).
     </span>
    </li>
    <li class="listitem">
     <span class="simpara">
      Директория ОС Windows (<var class="filename">C:\windows</var>
      или <var class="filename">C:\winnt</var>) (для Windows)
      или опция времени компиляции <code class="literal">--with-config-file-path</code>.
     </span>
    </li>
   </ul>
  </p>
  <p class="para">
   Вместо файла <var class="filename">php.ini</var> PHP будет работать с файлом
   <var class="filename">php-SAPI.ini</var>, где SAPI — текущий интерфейс,
   например <var class="filename">php-cli.ini</var> или <var class="filename">php-apache.ini</var>,
   если файл SAPI-интерфейса существует.
   Название SAPI-интерфейса между веб-сервером и PHP
   узнают через функцию <span class="function"><a href="function.php-sapi-name.php" class="function">php_sapi_name()</a></span>.
  </p>
  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <p class="para">
    Веб-сервер Apache изменяет текущую директорию на корневую при запуске,
    в результате чего PHP считывает файл <var class="filename">php.ini</var> из корневой файловой системы, если файл существует.
   </p>
  </p></blockquote>
  <p class="simpara">
   В значениях конфигурации в файле <var class="filename">php.ini</var> разрешается ссылаться на значения переменных окружения,
   как показывает следующий пример. Начиная PHP 8.3.0 доступно определение резервных значений,
   которые директивы принимают, если сослались на неопределённую
   переменную.
  </p>
  <div class="example" id="example-1">
   <p><strong>Пример #1 Переменные окружения в файле <var class="filename">php.ini</var></strong></p>
    <div class="example-contents">
<div class="inicode"><pre class="inicode">; Переменную PHP_MEMORY_LIMIT получили из окружения
memory_limit = ${PHP_MEMORY_LIMIT}
; Резервное значение директивы будет равняться 30, если переменную окружения PHP_MAX_EXECUTION_TIME не определили
max_execution_time = ${PHP_MAX_EXECUTION_TIME:-30}</pre>
</div>
   </div>

  </div>
  <p class="para">
   Директивы файла <var class="filename">php.ini</var>, которые обрабатываются модулями, описывают
   страницы модулей. Список директив ядра приводит
   приложение «<a href="ini.php" class="link">Директивы php.ini</a>».
   Не каждая PHP-директива задокументирована в руководстве:
   полный список доступных в установленной версии PHP директив
   изложили в подробных комментариях файла <var class="filename">php.ini</var>.
   <a href="https://github.com/php/php-src/blob/master/php.ini-production" class="link external">&raquo;&nbsp;Последнюю версию <var class="filename">php.ini</var></a>
   содержит Git-репозиторий.
  </p>
  <p class="para">
   <div class="example" id="example-2">
    <p><strong>Пример #2 Пример <var class="filename">php.ini</var></strong></p>
    <div class="example-contents">
<div class="inicode"><pre class="inicode">; любой текст в строке после точки с запятой (;) без кавычек игнорируется
[php] ; маркеры разделов (текст в квадратных скобках) также игнорируется
; Могут быть установлены следующие логические значения:
;    true, on, yes
; или false, off, no, none
register_globals = off
track_errors = yes

; вы можете заключать строки в двойные кавычки
include_path = &quot;.:/usr/local/lib/php&quot;

; обратный слеш обрабатывается так же, как любые другие символы
include_path = &quot;.;c:\php\lib&quot;</pre>
</div>
    </div>

    
   </div>
  </p>
  <p class="para">
   Возможно обращаться к существующим ini-переменным из
   ini-файлов. Пример: <code class="literal">open_basedir = ${open_basedir}
   &quot;:/new/dir&quot;</code>.
  </p>
  <div class="sect2" id="configuration.file.scan">
   <h3 class="title">Сканирование директорий</h3>

   <p class="para">
    Существует возможность сконфигурировать PHP для сканирования директорий
    в поисках .ini-файлов после считывания <var class="filename">php.ini</var>. Это можно сделать
    на моменте компиляции, указав опцию <strong class="option configure">--with-config-file-scan-dir</strong>.
    Сканирование директорий может быть переопределено
    во время исполнения установкой переменной среды <var class="varname">PHP_INI_SCAN_DIR</var>.
   </p>

   <p class="para">
    Можно сканировать несколько директорий, разделяя их разделителем,
    используемом в вашей операционной системе (<code class="literal">;</code> в Windows, NetWare
    и RISC OS; <code class="literal">:</code> на всех остальных платформах; в PHP есть
    константа <strong><code><a href="dir.constants.php#constant.path-separator">PATH_SEPARATOR</a></code></strong>, которую можно использовать)
    Если <var class="varname">PHP_INI_SCAN_DIR</var> пуста, то PHP также будет
    сканировать директорию, заданную на этапе компиляции с помощью
    <strong class="option configure">--with-config-file-scan-dir</strong>.
   </p>

   <p class="para">
    В каждой директории PHP сканирует все файлы заканчивающиеся на <code class="literal">.ini</code>
    в алфавитном порядке. Список всех загруженных файлов в том порядке,
    в котором они были загружены, доступен с помощью функции
    <span class="function"><a href="function.php-ini-scanned-files.php" class="function">php_ini_scanned_files()</a></span>, либо при запуске PHP с опцией <strong class="option unknown">--ini</strong>.
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
Допустим, что PHP сконфигурирован с --with-config-file-scan-dir=/etc/php.d,
и разделитель путей :...

$ php
  PHP загрузит все файлы /etc/php.d/*.ini как конфигурационные.

$ PHP_INI_SCAN_DIR=/usr/local/etc/php.d php
  PHP загрузит все файлы /usr/local/etc/php.d/*.ini как конфигурационные.

$ PHP_INI_SCAN_DIR=:/usr/local/etc/php.d php
  PHP загрузит все файлы /etc/php.d/*.ini, а потом
  /usr/local/etc/php.d/*.ini как конфигурационные.

$ PHP_INI_SCAN_DIR=/usr/local/etc/php.d: php
  PHP загрузит все файлы /usr/local/etc/php.d/*.ini, а потом
  /etc/php.d/*.ini как конфигурационные.
</pre></div>
    </div>
   </div>
  </div>
 </div><?php manual_footer($setup); ?>