<?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 => 'ja',
  ),
  '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' => 'ja',
    '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 Native Driver 設定オプション</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;86400&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>&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> でアクセスでき、
     <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span> 関数の出力の
     <code class="literal">mysqlnd</code> セクションにも表示されます。
    </span>
    <span class="simpara">
     この設定項目は、メモリ管理に関するもの以外のすべての
     <a href="mysqlnd.stats.php" class="link">MySQL Native Driver
     統計情報</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> でアクセスでき、
     <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span> 関数の出力の
     <code class="literal">mysqlnd</code> セクションにも表示されます。
    </span>
    <span class="simpara">
     この設定項目は、<a href="mysqlnd.stats.php" class="link">MySQL Native Driver
     統計情報</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 で指定します。
       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, 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">
     mysqlnd メモリプールのデフォルトサイズ。これは結果セットが使います。
    </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 Client Library すなわち
     <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 Client Library のデフォルトのタイムアウトは
     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">mysqlnd</code>
     を使うすべての拡張モジュール (<code class="literal">ext/mysql</code> や
     <code class="literal">ext/mysqli</code>、<code class="literal">PDO_MySQL</code>) が利用します。
     <code class="literal">mysqlnd</code> は、PHP ストリームに対して
     <code class="literal">mysqlnd.net_read_timeout</code> を使うよう指示します。
     MySQL Client Library および PHP ストリームの
     <code class="literal">MYSQL_OPT_READ_TIMEOUT</code> とは微妙に違いがあることに注意しましょう。
     <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> は、内部のコマンド/ネットワークバッファとして
     <var class="filename">php.ini</var> の <code class="literal">mysqlnd.net_cmd_buffer_size</code>
     で指定しただけのバイト数をすべての接続に対して確保します。
     MySQL Client Server プロトコルのコマンド、たとえば
     <code class="literal">COM_QUERY</code> (通常のクエリ)
     がこのバッファに収まらない場合、<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 認証プラグイン関連の設定。MySQL サーバーの
     RSA 公開鍵ファイル。
    </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 の変数に結果セットをコピーします。
     詳細は
     <a href="mysqlnd.memory.php" class="link">メモリ管理の実装についての説明</a>
     を参照ください。
    </span>
    <span class="simpara">
     結果セットを PHP の変数から参照させるのではなくコピーすることで、
     PHP の変数に割り当てたメモリを早めに解放できます。
     ユーザー API のコードやクエリの内容、そして結果セットの大きさにも依存しますが、
     これは 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); ?>