<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/book.mysqlnd.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'mysqlnd.config.php',
    1 => 'Настройка во время выполнения',
    2 => 'Настройка во время выполнения',
  ),
  'up' => 
  array (
    0 => 'book.mysqlnd.php',
    1 => 'Mysqlnd',
  ),
  'prev' => 
  array (
    0 => 'mysqlnd.install.php',
    1 => 'Установка',
  ),
  'next' => 
  array (
    0 => 'mysqlnd.incompatibilities.php',
    1 => 'Несовместимости',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'reference/mysqlnd/config.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="mysqlnd.config" class="chapter">

 <h1 class="title">Настройка во время выполнения</h1>

 <p class="simpara">
Поведение функций зависит от установок в файле <var class="filename">php.ini</var>.
</p>

 <p class="para">
  <table id="mysqlnd.config.options" class="doctable table">
   <caption><strong>Параметры конфигурации встроенного драйвера MySQL</strong></caption>
   
    <thead>
     <tr>
      <th>Имя</th>
      <th>По умолчанию</th>
      <th>Место изменения</th>
      <th>Список изменений</th>
     </tr>

    </thead>

    <tbody class="tbody">
     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.collect-statistics" class="link">mysqlnd.collect_statistics</a></td>
      <td>&quot;1&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.collect-memory-statistics" class="link">mysqlnd.collect_memory_statistics</a></td>
      <td>&quot;0&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.debug" class="link">mysqlnd.debug</a></td>
      <td>&quot;&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.log-mask" class="link">mysqlnd.log_mask</a></td>
      <td>0</td>
      <td><strong><code><a href="info.constants.php#constant.ini-all">INI_ALL</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.mempool-default-size" class="link">mysqlnd.mempool_default_size</a></td>
      <td>16000</td>
      <td><strong><code><a href="info.constants.php#constant.ini-all">INI_ALL</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.net-read-timeout" class="link">mysqlnd.net_read_timeout</a></td>
      <td>&quot;&quot;86400&quot;&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-all">INI_ALL</a></code></strong></td>
      <td>До PHP 7.2.0 значением по умолчанию &quot;31536000&quot;, а местом изменения было <strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.net-cmd-buffer-size" class="link">mysqlnd.net_cmd_buffer_size</a></td>
      <td>5.3.0 — &quot;2048&quot;, 5.3.1 — &quot;4096&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.net-read-buffer-size" class="link">mysqlnd.net_read_buffer_size</a></td>
      <td>&quot;32768&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.sha256-server-public-key" class="link">mysqlnd.sha256_server_public_key</a></td>
      <td>&quot;&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-perdir">INI_PERDIR</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.trace-alloc" class="link">mysqlnd.trace_alloc</a></td>
      <td>&quot;&quot;</td>
      <td><strong><code><a href="info.constants.php#constant.ini-system">INI_SYSTEM</a></code></strong></td>
      <td class="empty">&nbsp;</td>
     </tr>

     <tr>
      <td><a href="mysqlnd.config.php#ini.mysqlnd.fetch_data_copy" class="link">mysqlnd.fetch_data_copy</a></td>
      <td>0</td>
      <td><strong><code><a href="info.constants.php#constant.ini-all">INI_ALL</a></code></strong></td>
      <td>Удалено с PHP 8.1.0</td>
     </tr>

    </tbody>
   
  </table>

  Дополнительную информацию и определения режимов
INI_* даёт раздел «<a href="configuration.changes.modes.php" class="xref">Места установки параметров конфигурации</a>».
 </p>

 <p class="para">Краткое разъяснение конфигурационных
директив.</p>

 <dl>
  
   <dt id="ini.mysqlnd.collect-statistics">
    <code class="parameter">mysqlnd.collect_statistics</code>
    <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>
   </dt>
   <dd>
    <span class="simpara">
     Включает сбор различной статистики клиента, доступ к которой можно
     получить с помощью <span class="function"><a href="function.mysqli-get-client-stats.php" class="function">mysqli_get_client_stats()</a></span>,
     <span class="function"><a href="mysqli.get-connection-stats.php" class="function">mysqli_get_connection_stats()</a></span>,
     и которая отображается
     в разделе <code class="literal">mysqlnd</code> вывода функции
     <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span>.
    </span>
    <span class="simpara">
     Этот параметр конфигурации включает всю
     <a href="mysqlnd.stats.php" class="link">статистику встроенного драйвера
      MySQL</a>, кроме относящейся к работе с оперативной памятью.
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.collect-memory-statistics">
    <code class="parameter">mysqlnd.collect_memory_statistics</code>
    <span class="type"><a href="language.types.boolean.php" class="type bool">bool</a></span>
   </dt>
   <dd>
    <span class="simpara">
     Включает сбор различной статистики оперативной памяти, доступ к
     которой можно получить с помощью <span class="function"><a href="function.mysqli-get-client-stats.php" class="function">mysqli_get_client_stats()</a></span>,
     <span class="function"><a href="mysqli.get-connection-stats.php" class="function">mysqli_get_connection_stats()</a></span>,
     и которая отображается
     в разделе <code class="literal">mysqlnd</code> вывода функции
     <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span>.
    </span>
    <span class="simpara">
     Этот параметр конфигурации включает всю статистику, относящуюся к
     работе с оперативной памятью, в общий набор данных
     <a href="mysqlnd.stats.php" class="link">статистики встроенного драйвера MySQL</a>.
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.debug">
    <code class="parameter">mysqlnd.debug</code> <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
   </dt>
   <dd>
    <span class="simpara">
     Записывает команды из всех модулей, использующих
     <code class="literal">mysqlnd</code>, в указанный файл с логами.
    </span>
    <span class="simpara">
     Формат параметра следующий: <code class="literal">mysqlnd.debug =
     &quot;option1[,parameter_option1][:option2[,parameter_option2]]&quot;</code>.
    </span>
    <span class="simpara">
     Возможны нижеуказанные значения для строки форматирования:
    </span>
    <ul class="itemizedlist">
     <li class="listitem">
      <span class="simpara">
       A[,file] - добавляет вывод трассировки в указанный файл. Также
       каждый раз проверяет успешность записи данных. Это реализовано
       путём закрытия и повторного открытия файла (что достаточно медленно).
       Даёт гарантию целостности файла с логами в случае возникновения ошибки приложения.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       a[,file] - добавляет вывод трассировки в указанный файл.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       d - Включает вывод из макроса DBUG_&lt;N&gt; для текущего состояния.
       Может быть дополнено списком ключевых слов, чтобы выбрать вывод только
       содержащего эти ключевые слова макросов DBUG. Пустой список ключевых слов
       подразумевает вывод всех для макросов.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       f[,functions] - ограничивает действия отладчика указанным списком функций.
       Пустой список функций подразумевает выбор всех функций.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       F - помечает вывод каждой строчки отладчика названием исходного файла,
       содержащего код, вызвавший вывод.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       i - помечает вывод каждой строчки отладчика PID текущего процесса.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       L - помечает вывод каждой строчки отладчика названием исходного файла,
       вызвавшего вывод, и номером строки в ней.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       n - помечает вывод каждой строчки отладчика уровнем вложенности
       текущей функции.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       o[,file] - сходно с a[,file], но перезаписывает старый файл, а не
       дописывает его.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       O[,file] - сходно с A[,file] но перезаписывает старый файл, а не
       дописывает его.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       t[,N] - включает контроль функций во время трассировки.
       Максимальный уровень вложенности определён N и по умолчанию равен 200.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       x - этот параметр активирует профилирование.
      </span>
     </li>
     <li class="listitem">
      <span class="simpara">
       m - отслеживать вызовы, связанные с выделениями и высвобождением памяти.
      </span>
     </li>
    </ul>
    <span class="simpara">
     Пример:
    </span>
    <div class="example-contents">
<div class="cdata"><pre>
d:t:x:O,/tmp/mysqlnd.trace
</pre></div>
    </div>

    <blockquote class="note"><p><strong class="note">Замечание</strong>: 
     <span class="simpara">
      Функция доступна только в отладочной сборке PHP.
     </span>
    </p></blockquote>
    <span class="simpara"/>
   </dd>
  
  
   <dt id="ini.mysqlnd.log-mask">
    <code class="parameter">mysqlnd.log_mask</code>
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   </dt>
   <dd>
    <span class="simpara">
     Определяет, какие запросы будут журналироваться. Значение по умолчанию - 0, что отключает журналирование.
     Значение параметра - только целое число, константы PHP использовать нельзя. Например, при значении
     48 (16 + 32) в журнал будут записываться медленные запросы, которые либо используют неподходящие индексы
     (SERVER_QUERY_NO_GOOD_INDEX_USED = 16), либо не используют их вообще SERVER_QUERY_NO_INDEX_USED = 32).
     При значении 2043 (1 + 2 + 8 + ... + 1024) в журнал будут записываться все типы медленных запросов.
    </span>
    <span class="simpara">
     Используются следующие типы запросов: SERVER_STATUS_IN_TRANS=1, SERVER_STATUS_AUTOCOMMIT=2,
     SERVER_MORE_RESULTS_EXISTS=8, SERVER_QUERY_NO_GOOD_INDEX_USED=16, SERVER_QUERY_NO_INDEX_USED=32,
     SERVER_STATUS_CURSOR_EXISTS=64, SERVER_STATUS_LAST_ROW_SENT=128, SERVER_STATUS_DB_DROPPED=256,
     SERVER_STATUS_NO_BACKSLASH_ESCAPES=512, and SERVER_QUERY_WAS_SLOW=1024.
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.mempool-default-size">
    <code class="parameter">mysqlnd.mempool_default_size</code>
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   </dt>
   <dd>
    <span class="simpara">
     Default size of the mysqlnd memory pool, which is used by result sets.
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.net-read-timeout">
    <code class="parameter">mysqlnd.net_read_timeout</code>
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   </dt>
   <dd>
    <span class="simpara">
     <code class="literal">mysqlnd</code> и клиентская библиотека MySQL,
     <code class="literal">libmysqlclient</code>, используют разные сетевые API.
     <code class="literal">mysqlnd</code> использует потоки PHP, тогда как
     <code class="literal">libmysqlclient</code> - собственную обёртку над сетевыми вызовами
     операционной системы. В PHP по умолчанию выставлено 60-секундное
     время ожидания потоков. Этот параметр выставляется в
     <var class="filename">php.ini</var> директивой <code class="literal">default_socket_timeout</code>.
     По умолчанию это относится ко всем потокам, которым не установлено другое значение времени ожидания.
     <code class="literal">mysqlnd</code> не устанавливал других значений, поэтому
     подключения долго выполняющихся запросов могут быть отключены после
     <code class="literal">default_socket_timeout</code> секунд с ошибкой
     <q class="quote">2006 - MySQL Server has gone away</q>. Клиентская библиотека MySQL
     устанавливает время ожидания по умолчанию равное 24 * 3600 секундам (1 день)
     и ждёт возникновения другого времени ожидания, такого как время ожидания TCP/IP.
     Теперь <code class="literal">mysqlnd</code> использует такой же очень долгое время ожидания.
     Это значение можно изменить через новую директиву <var class="filename">php.ini</var> -
     <code class="literal">mysqlnd.net_read_timeout</code>.
     <code class="literal">mysqlnd.net_read_timeout</code> будет использоваться любым
     модулем (<code class="literal">ext/mysql</code>,
     <code class="literal">ext/mysqli</code>, <code class="literal">PDO_MySQL</code>), использующим
     <code class="literal">mysqlnd</code>. <code class="literal">mysqlnd</code> указывает
     потокам PHP использовать <code class="literal">mysqlnd.net_read_timeout</code>.
     Пожалуйста, обратите внимание, что могут быть небольшие различия между
     <code class="literal">MYSQL_OPT_READ_TIMEOUT</code> в клиентской библиотеке MySQL
     и потоках PHP, например, судя по документации, <code class="literal">MYSQL_OPT_READ_TIMEOUT</code> работает
     только для TCP/IP-подключений и, вплоть до MySQL 5.1.2, только под
     Windows. Потоки PHP могут не иметь подобных ограничений. В случае сомнений
     просьба сверяться с документацией потоков.
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.net-cmd-buffer-size">
    <code class="parameter">mysqlnd.net_cmd_buffer_size</code>
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   </dt>
   <dd>
    <span class="simpara">
     <code class="literal">mysqlnd</code> резервирует внутренний командно-сетевой
     буфер размером <code class="literal">mysqlnd.net_cmd_buffer_size</code> (в
     <var class="filename">php.ini</var>) байт для каждого соединения. Если команда
     клиент-серверного протокола MySQL, например,
     <code class="literal">COM_QUERY</code> (<q class="quote">обычный</q> запрос), не
     умещается в буфер, <code class="literal">mysqlnd</code> увеличит буфер до размера,
     необходимого для отправки команды.
     Каждый раз, когда буфер был увеличен, переменная статистики <code class="literal">command_buffer_too_small</code>
     будет увеличена на один.
    </span>
    <span class="simpara">
     Если <code class="literal">mysqlnd</code> приходится увеличивать буфер сверх его
     заданного размера в <code class="literal">mysqlnd.net_cmd_buffer_size</code> байт
     для большинства соединений, вам следует обдумать необходимость увеличения
     размера по умолчанию, чтобы избежать повторных резерваций буфера.
    </span>
    <span class="simpara">
     Размер буфера по умолчанию составляет 4096 байт, что является наименьшим возможным значением.
    </span>
    <span class="simpara">
     Это значение также может быть установлено функцией
     <code class="literal">mysqli_options(link,
      MYSQLI_OPT_NET_CMD_BUFFER_SIZE, size)</code>.
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.net-read-buffer-size">
    <code class="parameter">mysqlnd.net_read_buffer_size</code>
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   </dt>
   <dd>
    <span class="simpara">
     Максимальный размер части данных при считывании, в байтах, при обработке
     тела командного пакета MySQL. Клиент-серверный протокол MySQL оборачивает
     все свои команды в пакеты. Пакет состоит из небольшого заголовка и тела,
     содержащего непосредственно данные команды. Размер тела закодирован в заголовке.
     <code class="literal">mysqlnd</code> считывает тело частями по
     <code class="literal">MIN(header.size, mysqlnd.net_read_buffer_size)</code>
     байт. Если размер тела пакета больше, чем
     <code class="literal">mysqlnd.net_read_buffer_size</code> байт,
     <code class="literal">mysqlnd</code> будет вызывать <code class="literal">read()</code>
     несколько раз.
    </span>
    <span class="simpara">
     Это значение также может быть установлено функцией
     <code class="literal">mysqli_options(link,
      MYSQLI_OPT_NET_READ_BUFFER_SIZE, size)</code>.
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.sha256-server-public-key">
    <code class="parameter">mysqlnd.sha256_server_public_key</code>
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
   </dt>
   <dd>
    <span class="simpara">
     Данная опция относится к плагину аутентификации SHA-256 и содержит путь к файлу
     с публичным ключом RSA MySQL-сервера..
    </span>
    <span class="simpara">
     Клиент может как не указывать публичный ключ RSA, указать его с помощью
     данной опции, либо установить ключ во время выполнения с помощью функции
     <span class="function"><a href="mysqli.options.php" class="function">mysqli_options()</a></span>. Если публичный ключ RSA не был передан
     клиентом, то ключ будет получен в результате стандартной процедуры
     аутентификации плагина аутентификации SHA-256.
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.trace-alloc">
    <code class="parameter">mysqlnd.trace_alloc</code>
    <span class="type"><a href="language.types.string.php" class="type string">string</a></span>
   </dt>
   <dd>
    <span class="simpara">
    </span>
   </dd>
  
  
   <dt id="ini.mysqlnd.fetch_data_copy">
    <code class="parameter">mysqlnd.fetch_data_copy</code>
    <span class="type"><a href="language.types.integer.php" class="type int">int</a></span>
   </dt>
   <dd>
    <span class="simpara">
     Принуждает копировать наборы из внутреннего буфера наборов в PHP переменные
     вместо использования логики с ссылками и &quot;копированием при записи&quot; по умолчанию.
     Смотрите <a href="mysqlnd.memory.php" class="link">реализация управления памятью</a>
     для получения большей информации.
    </span>
    <span class="simpara">
     Копирование результирующих наборов вместо PHP переменных ссылающихся на них
     позволяют выделять память для PHP переменных заранее.
     В зависимости от пользовательского кода, реальных запросов к базе данных и
     размеров их результатов, можно снизить потребление памяти mysqlnd.
    </span>
    <span class="simpara">
     Не применяйте, если используется PDO_MySQL. В PDO_MySQL ещё не добавлена поддержка
     этого нового режима.
    </span>
    <blockquote class="note"><p><strong class="note">Замечание</strong>: 
     <span class="simpara">Удалено с PHP 8.1.0</span>
    </p></blockquote>
   </dd>
  
 </dl>
</div>
<?php manual_footer($setup); ?>