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

contributors($setup);

?>
<div id="mongodb.installation" class="section">
 <h2 class="title">Установка</h2>

 <div class="section" id="mongodb.installation.pie">
  <h2 class="title">Установка PHP-модуля MongoDB с помощью PIE</h2>

  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
 <span class="simpara">
  Установщик PHP-модулей (англ. PHP Installer for Extensions, <abbr>PIE</abbr>) — новый инструмент, который заменит репозиторий PECL после устаревания.
  Рекомендуем устанавливать модули через PIE.
  Дополнительная информация доступна на странице <a href="https://github.com/php/pie" class="link external">&raquo;&nbsp;https://github.com/php/pie</a>.
 </span>
</p></blockquote>

  <p class="para">
   Чтобы установить модуль MongoDB с помощью PIE, выполните следующую команду:
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">pie install mongodb/mongodb-extension</pre>
</div>
   </div>

  </p>

 </div>

 <div class="section" id="mongodb.installation.pecl">
  <h2 class="title">Установка PHP-модуля MongoDB через репозиторий PECL</h2>

  <p class="para">
   Информацию об установке этого PECL-модуля
даёт глава руководства
«<a href="install.pecl.php" class="link">Установка PECL-модулей</a>».
Дополнительная информация о новых версиях, скачивании, исходных файлах, о разработчике и журнале изменений
доступна по адресу: 
   <a href="https://pecl.php.net/package/mongodb" class="link external">&raquo;&nbsp;https://pecl.php.net/package/mongodb</a>
  </p>

  <p class="para">
   Пользователи Linux, Unix и macOS запускают следующую команду для установки модуля:
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">$ sudo pecl install mongodb</pre>
</div>
   </div>

  </p>

  <p class="para">
   На системах с несколькими установленными версиями PHP (например для macOS:
   установка по умолчанию, Homebrew
   и <a href="https://www.apachefriends.org/" class="link external">&raquo;&nbsp;XAMPP</a>) у каждой версии PHP
   будет своя команда <a href="install.pecl.php" class="link">pecl</a>
   и файл (или файлы) <var class="filename">php.ini</var>. Кроме того, каждому PHP-окружению наподобие CLI или web
   разрешается использовать отдельные файлы <var class="filename">php.ini</var>.
  </p>

  <p class="para">
   Начиная с версии модуля 1.17.0 PECL будет запрашивать разные
   настройки <code class="literal">configure</code>. Чтобы установить модуль с параметрами
   по умолчанию в неинтерактивном скрипте, команду <code class="literal">yes</code> с вводом пустой строки
   присоединяют через символ вертикальной черты к команде
   <code class="literal">pecl install</code>:
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">$ yes &#039;&#039; | sudo pecl install mongodb</pre>
</div>
   </div>

  </p>

  <p class="para">
   Полный список поддерживаемых параметров <code class="literal">configure</code>
   доступен в файле <code class="literal">package.xml</code>, который включили в пакет PECL.
   Чтобы установить модуль со специфичными параметрами <code class="literal">configure</code>
   в неинтерактивном сценарии, указывают параметр
   <code class="literal">--configureoptions</code>
   для команды <code class="literal">pecl install</code>:
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">$ sudo pecl install --configureoptions=&#039;with-mongodb-system-libs=&quot;yes&quot; enable-mongodb-developer-flags=&quot;no&quot;&#039; mongodb</pre>
</div>
   </div>

  </p>

  <p class="para">
   По умолчанию установка модуля через PECL использует
   встроенные версии модулей:
   <a href="https://github.com/mongodb/mongo-c-driver/tree/master/src/libbson" class="link external">&raquo;&nbsp;libbson</a>,
   <a href="https://github.com/mongodb/mongo-c-driver" class="link external">&raquo;&nbsp;libmongoc</a>,
   <a href="https://github.com/mongodb/libmongocrypt" class="link external">&raquo;&nbsp;libmongocrypt</a>
   и попытается сконфигурировать их автоматически.
  </p>

  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <span class="simpara">
    Когда процесс установки не находит библиотеку SSL, проверяют,
    что установили пакеты для разработки наподобие <code class="literal">libssl-dev</code>
    и пакет <a href="https://en.wikipedia.org/wiki/Pkg-config" class="link external">&raquo;&nbsp;pkg-config</a>.
    Проводят <a href="mongodb.installation.php#mongodb.installation.manual" class="link">ручную установку</a>,
    если это не помогает.
   </span>
  </p></blockquote>

  <p class="para">
   И наконец, добавляют следующую строку в файл <var class="filename">php.ini</var> для каждого окружения,
   в котором будет работать модуль:
   <div class="example-contents">
<div class="inicode"><pre class="inicode">extension=mongodb.so</pre>
</div>
   </div>

  </p>
 </div>

 <div class="section" id="mongodb.installation.homebrew">
  <h2 class="title">Установка PHP-модуля MongoDB в операционную систему macOS через менеджер пакетов Homebrew</h2>

  <p class="para">
   Начиная с <a href="https://brew.sh/2018/01/19/homebrew-1.5.0/" class="link external">&raquo;&nbsp;Homebrew 1.5.0</a>
   пакет <a href="https://github.com/Homebrew/brew" class="link external">&raquo;&nbsp;Homebrew/php tap</a>
   объявили устаревшим, а формулы для отдельных модулей PHP удалили.
   Пользователям macOS рекомендуют устанавливать драйвер через
   формулу <a href="https://formulae.brew.sh/formula/php" class="link external">&raquo;&nbsp;php</a>
   и запускать предоставленную PHP, установленным через менеджер пакетов Homebrew,
   команду <a href="install.pecl.php" class="link">pecl</a>, как рассказывает
   стандартная <a href="mongodb.installation.php#mongodb.installation.pecl" class="link">инструкция по установке из репозитория PECL</a>.
  </p>
  <p class="para">
   В качестве альтернативы, <a href="https://github.com/shivammathur/homebrew-extensions" class="link external">&raquo;&nbsp;shivammathur/extensions tap</a>
   предоставляет формулы для отдельных модулей PHP. Например, чтобы установить модуль для PHP 8.4, выполните:
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">$ brew install shivammathur/extensions/mongodb@8.4</pre>
</div>
   </div>

   Обратите внимание, что в brew доступна только последняя версия модуля.
  </p>
  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <strong>Установите необходимые зависимости</strong><br />
   <p class="para">
    Чтобы обеспечить правильную настройку поддержки SSL, убедитесь, что установлены формулы
    <code class="literal">openssl</code> и <code class="literal">pkgconf</code>. Если один из этих пакетов отсутствует,
    модуль будет скомпилирован с Secure Transport, что может привести к проблемам совместимости.
   </p>
  </p></blockquote>
 </div>

 <div class="section" id="mongodb.installation.windows">
  <h2 class="title">Установка PHP-модуля MongoDB в операционную систему Windows</h2>

  <p class="para">
   Предварительно скомпилированные исполняемые файлы прикрепляются
   к <a href="https://github.com/mongodb/mongo-php-driver/releases/" class="link external">&raquo;&nbsp;выпускам проекта на GitHub</a>.
   Архивы публикуются для разных комбинаций версии PHP, потоковой безопасности (TS или NTS)
   и архитектуры (x86 или x64). Определите правильный архив для PHP-окружения
   и извлеките файл <var class="filename">php_mongodb.dll</var> в директорию с модулями (по умолчанию &quot;ext&quot;).
  </p>

  <p class="para">
   Добавьте следующую строку в файл <var class="filename">php.ini</var> для каждого окружения,
   в котором будет работать модуль:
   <div class="example-contents">
<div class="inicode"><pre class="inicode">extension=php_mongo.dll</pre>
</div>
   </div>

  </p>

  <p class="para">
   Неправильный выбор двоичного файла вызовет ошибку
   при попытке загрузить DLL-модуль во время выполнения:
   <div class="example-contents">
<div class="txtcode"><pre class="txtcode">PHP Warning:  PHP Startup: Unable to load dynamic library &#039;mongodb&#039;</pre>
</div>
   </div>

  </p>

  <p class="para">
   Убедитесь, что DLL-файл, который скачали, соответствует следующим свойствам среды выполнения PHP:
   <ul class="simplelist">
    <li>Версия PHP (<strong><code><a href="reserved.constants.php#constant.php-version">PHP_VERSION</a></code></strong>)</li>
    <li>Потоковая безопасность (<strong><code><a href="reserved.constants.php#constant.php-zts">PHP_ZTS</a></code></strong>)</li>
    <li>Архитектура (<strong><code><a href="reserved.constants.php#constant.php-int-size">PHP_INT_SIZE</a></code></strong>)</li>
   </ul>
  </p>

  <p class="para">
   Просмотр этих свойств доступен в выводе функции <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span>.
   Дважды проверьте, что вывод функции <span class="function"><a href="function.phpinfo.php" class="function">phpinfo()</a></span> соответствует окружению,
   если в систему установили несколько версий PHP.
  </p>

  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <strong>Дополнительные DLL-зависимости для пользователей Windows</strong><br />
   <p class="para">
    Модуль работает в ОС Windows,
только когда системной переменной <var class="envar">PATH</var>
доступны <abbr title="Dynamic Link Library">DLL</abbr>-файлы.
Раздел <abbr title="Frequently Asked Questions">FAQ</abbr>
«<a href="faq.installation.php#faq.installation.addtopath" class="link">Как добавить PHP-каталог в переменную PATH в Windows</a>»
рассказывает, как это сделать. Не рекомендуют копировать DLL-файлы
из директории PHP в системную папку Windows, хотя это тоже решает проблему, поскольку системная
переменная <var class="envar">PATH</var> содержит путь к системной директории по умолчанию.
<em>Для работы модуля
в переменной <var class="envar">PATH</var> потребуются следующие файлы:</em> 
    <var class="filename">libsasl.dll</var>
   </p>
  </p></blockquote>
 </div>

 <div class="section" id="mongodb.installation.manual">
  <h2 class="title">Сборка PHP-драйвера MongoDB из исходного кода</h2>

  <p class="para">
   Разработчики и пользователи, которые заинтересованы в последних исправлениях ошибок,
   компилируют модуль из последнего исходного кода
   <a href="https://github.com/mongodb/mongo-php-driver" class="link external">&raquo;&nbsp;на сайте GitHub</a>. Запустите следующие
   команды, чтобы клонировать и собрать проект:
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">$ git clone https://github.com/mongodb/mongo-php-driver.git
$ cd mongo-php-driver
$ git submodule update --init
$ phpize
$ ./configure
$ make all
$ sudo make install</pre>
</div>
   </div>

  </p>
  <p class="para">
   В системах с несколькими установленными версиями PHP (например, macOS: установка по умолчанию,
   Homebrew, <a href="https://www.apachefriends.org/" class="link external">&raquo;&nbsp;XAMPP</a>)
   у каждой версии PHP будет своя команда <a href="install.pecl.phpize.php" class="link">phpize</a>
   и файл (или файлы) <var class="filename">php.ini</var>.
   Кроме того, каждое окружение PHP (например, CLI, web) может использовать отдельные файлы <var class="filename">php.ini</var>.
  </p>

  <p class="para">
   По умолчанию модуль использует встроенные версии библиотек
   <a href="https://github.com/mongodb/mongo-c-driver/tree/master/src/libbson" class="link external">&raquo;&nbsp;libbson</a>,
   <a href="https://github.com/mongodb/mongo-c-driver" class="link external">&raquo;&nbsp;libmongoc</a>
   и <a href="https://github.com/mongodb/libmongocrypt" class="link external">&raquo;&nbsp;libmongocrypt</a>
   и попытается настроить библиотеки автоматически. Библиотеки доступны модулю через передачу
   параметра <code class="literal">--with-mongodb-system-libs=yes</code>
   команде <code class="literal">configure</code>,
   если эти библиотеки уже установили в систему.
  </p>
  <p class="para">
   Полный список параметров команды <code class="literal">configure</code> получают
   через запуск команды: <strong class="command">configure --help</strong>.
  </p>

  <p class="para">
   При работе со встроенными версиями библиотек libmongoc и libmongocrypt,
   модуль также попытается выбрать SSL-библиотеку
   в соответствии с параметром
   <code class="literal">--with-mongodb-ssl</code> команды <code class="literal">configure</code>.
   Начиная с версии модуля 1.17.0 по умолчанию предпочтение отдаётся библиотеке OpenSSL.
   Предыдущие версии драйвера на системах с macOS по умолчанию выбирали Secure Transport,
   а на остальных платформах — OpenSSL.
  </p>

  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <p class="para">
    Потребуется проверить, установили ли пакеты для разработки наподобие <code class="literal">libssl-dev</code>
    и пакет <a href="https://en.wikipedia.org/wiki/Pkg-config" class="link external">&raquo;&nbsp;pkg-config</a>,
    если процесс установки не найдёт SSL-библиотеку.
   </p>

   <p class="para">
    Система часто содержит набор версий библиотеки OpenSSL, когда
    пакетами на macOS управляют через утилиту Homebrew.
    Дополнительный путь, по которому программа <code class="literal">pkg-config</code>
    будет искать файлы, указывают в переменной среды <code class="literal">PKG_CONFIG_PATH</code>,
    чтобы выбрать правильную версию библиотеки OpenSSL.
   </p>
  </p></blockquote>

  <p class="para">
   На последнем, финальном шаге, команда <strong class="command">make install</strong>
   выведет путь, по которому собрали модуль
   <var class="filename">mongodb.so</var>. Например, вот так:
   <div class="example-contents">
<div class="txtcode"><pre class="txtcode">Installing shared extensions:     /usr/lib/php/extensions/debug-non-zts-20220829/</pre>
</div>
   </div>

  </p>

  <p class="para">
   Убедитесь, что директива <a href="ini.core.php#ini.extension-dir" class="link">extension_dir</a> файла
   <var class="filename">php.ini</var> указывает на каталог, в котором лежит модуль <var class="filename">mongodb.so</var>.
   Значение директивы проверяют вот так:
   <div class="example-contents">
<div class="shellcode"><pre class="shellcode">$ php -i | grep extension_dir
  extension_dir =&gt; /usr/lib/php/extensions/debug-non-zts-20220829 =&gt;
                   /usr/lib/php/extensions/debug-non-zts-20220829</pre>
</div>
   </div>

  </p>

  <p class="para">
   Значение директивы <a href="ini.core.php#ini.extension-dir" class="link">extension_dir</a> изменяют
   в файле <var class="filename">php.ini</var> или просто перемещают файл <var class="filename">mongodb.so</var> в правильную директорию,
   если директории отличаются.
  </p>

  <p class="para">
   И наконец, добавьте следующую строку в файл <var class="filename">php.ini</var> для каждого окружения,
   в котором планируется использовать модуль:
   <div class="example-contents">
<div class="inicode"><pre class="inicode">extension=mongodb.so</pre>
</div>
   </div>

  </p>
 </div>

</div><?php manual_footer($setup); ?>