## 実行時設定

php.ini の設定により動作が変化します。

Mongo 設定オプション
名前 | デフォルト | 変更可能 | 変更履歴
--- | --- | --- | ---
mongo.allow_empty_keys | 0 | PHP_INI_ALL |
mongo.allow_persistent | 1 | PHP_INI_ALL | 1.2.0 で削除
mongo.chunk_size | 262144 | PHP_INI_ALL |
mongo.cmd | "$" | PHP_INI_ALL |
mongo.default_host | "localhost" | PHP_INI_ALL |
mongo.default_port | 27017 | PHP_INI_ALL |
mongo.is_master_interval | 15 | PHP_INI_ALL | 1.2.10 で追加。1.3.0 までのデフォルト値は 60
mongo.long_as_object | 0 | PHP_INI_ALL |
mongo.native_long | 1 | PHP_INI_ALL | 1.5.0 までのデフォルト値は 0
mongo.ping_interval | 5 | PHP_INI_ALL | 1.2.10 で追加
mongo.utf8 | 1 | PHP_INI_ALL |

PHP_INI_* モードの詳細および定義については どこで設定を行うのか を参照してください。

以下に設定ディレクティブに関する 簡単な説明を示します。

`mongo.allow_empty_keys` int

  バージョン 1.0.11 で追加されました。

  空文字列 ("") をキーの名前として許可するか否か。 デフォルトでは、データベースに空文字列のキーを渡そうとすると ドライバが例外を発生させます。 ダブルクォートの中で $ 演算子を使う場合などに、 不注意で空文字列を渡してしまうことは非常にありがちです。 この設定はデフォルトのままにしておくことを推奨します。 しかし、空文字列のキーを保存する必要がある場合はこのオプションを true にします。そうすると、ドライバが空文字列をそのままデータベースに送るようになります。

`mongo.allow_persistent` int

  持続的接続を許可するかどうか (1.2.0 で削除されました。すべての接続が持続的接続になります)。

`mongo.chunk_size` int

  チャンクあたりのバイト数。GridFS ファイルを分配する際に使用します。 この数値は、少なくとも 100 以上で 4 メガバイト未満 (最大値: 4194204)、そして小さめにすることを推奨します。

`mongo.cmd` string

  修飾子や比較において $ のかわりに使う文字。

  "$" のエスケープはついつい忘れてしまいがちなので、独自の文字を '$' のかわりに使うことができます。キーの名前に現れない文字、たとえば ":" などを選びましょう。

      mongo.cmd = ":"

  その後、比較を行うにはこのようにします。

  `<?php
  $query = array( "i" => array( ":gt" => 20, ":lte" => 30 ) );
  ?>`

  コード内で ini_set("mongo.cmd", ":") で変更することもできます。 もちろん、シングルクォートやバックスラッシュで $ をエスケープすることもできます。

`mongo.default_host` string

  コンストラクタに何も渡さなかったときに使う、デフォルトのホスト名。

`mongo.default_port` string

  データベースサーバーへの接続に使用する TCP ポート番号。 ポート番号が指定されなかった場合にこれを使用します。 データベースのデフォルトは 27017 です。

`mongo.is_master_interval` int

  バージョン 1.2.10 で追加されました。

  レプリカセット接続用: ドライバが "isMaster" リクエストを MongoDB サーバーに送信する最小間隔。 この値を小さくすると、リクエストの送信回数は多くなりますが、 レプリカセットのトポロジーが変わったときにドライバがすぐに検出できるようになります。

`mongo.long_as_object` int

  BSON_LONG を、プリミティブ型ではなく MongoInt64 のインスタンスで返します。

`mongo.native-long` int

  この項目のデフォルトは 1.5.0 からは `TRUE` に変わりました。 設定したい値 (おそらく `TRUE` でしょう) をきちんと設定しておくようにしましょう。 そうすれば、ドライバをアップグレードしたときにいきなり挙動が変わることがなくなります。

  64 ビットプラットフォームでは、mongo.native_long を設定すれば 64 ビット整数値を MongoDB に格納できるようになります。 設定しなければ、保存できるのは 32 ビット整数値だけです。 この項目を設定したときに使われる MongoDB のデータ型は BSON LONG です。 この設定を off にしたときに使われるデータ型は BSON INT となります。

  この設定は、MongoDB から BSON LONG を読み込んだときの振る舞いにも影響します。 mongo.native_long を有効にしなければ、 ドライバは BSON LONG をすべて PHP の double 型に変換するので、精度が失われる可能性があります。

  32 ビットプラットフォームでは、mongo.native_long の設定は整数値を MongoDB に格納する際には何の影響も及ぼしません。 整数値はこれまで通り BSON INT で格納されます。しかし、この設定を有効にして BSON LONG を MongoDB から読み込むと MongoCursorException がスローされ、 もとの精度のままではデータが読み込めないということを警告します。

  32 ビットシステム上では特に、この項目とあわせて mongo.long_as_object を有効にしておくことを推奨します。

`mongo.ping_interval` int

  バージョン 1.2.10 で追加されました。

  レプリカセット接続用: ドライバが "ping" リクエストを MongoDB サーバーに送信する最小間隔。 この値を小さくすると、ping の送信回数は多くなりますが、 レプリカセット内のノードに接続できなくなったときにドライバがすぐに検出できるようになります。

`mongo.utf8` int

  非 UTF8 文字列に対して例外をスローするかどうか。 バージョン 1.0.4 になるまでは、PHP ドライバは非 UTF8 文字列を無視していました。 たとえそれが追加するつもりのなかったものであったとしてもです。 1.0.4 以降は、ドライバが MongoException をスローするようになりました。 非 UTF8 文字列を追加するアプリケーションの移行時の手間を軽減するため、 このオプションをオフにすれば以前のように例外をスローしない設定にすることができます。 このオプションはバージョン 1.1.0 以降で廃止され、非 UTF8 文字列に対しては常に例外をスローするようになります。