Последнее обновление: 30.10.2015
В предыдущей главе был дан обзор основным концепциям и функциональностям MongoDB. Однако в реальности мало кто будет работать через консоль, вбивая в базу данных по одному документу. Как правило, база данных будет получать поток данных от внешнего приложения или наоборот возвращать ему эти данные. Поэтому нам потребуется организовать работу между MongoDB и приложением, написанным на одном из языков программирования. В качестве языка программирования, на примере которого будем рассматривать, подобное взаимодействие, выбран PHP, как один из наиболее распространенных языков.
Установка драйвера для PHP
Установим драйвер для языка PHP. Непосредственно сам драйвер можно загрузить со страницы проекта на гитхабе: https://github.com/mongodb/mongo-php-driver .
После загрузки драйвера и распаковки его пакета на Unix-системах следует ввести следующие команды:
Phpize ./configure make sudo make install
И затем добавить в файл php.ini следующую строку:
Extension=mongo.so
Для установки драйвера на ОС Windows надо загрузить последний пакет со страницы https://s3.amazonaws.com/drivers.mongodb.org/php/index.html . На текущий момент последним является пакет php_mongo-1.4.5.zip .
Итак, загрузим и распакуем этот архивный пакет. В нем будут находиться драйвера для возможных версий php. Надо выбрать ту, которая соответствует вашей версии php и положить соответствующий файл драйвера в каталог php/ext , где хранятся все расширения для php.
Затем надо внести изменение в файл php.ini , добавив в него следующую строчку в секцию, где идет подключение расширений:
Extension=php_mongo-[версия].dll
Например, в моем случае c версией php 5.4 Tread Safe я добавил в каталог php/ext файл php_mongo-1.4.5-5.4-vc9.dll . И поэтому в php.ini я добавляю extension=php_mongo-1.4.5-5.4-vc9.dll
Затем перегружаем веб-сервер и тестируем. Для тестирования подключения драйвера mongodb можно воспользоваться стандартной функцией phpinfo() , выводящей всю информацию о php на веб-сервер. В нашем случае она должна вывести следующее:
Подключение к MongoDB из PHP
Подключив драйвер к php, теперь мы можем устанавливать соединение с базой данных и взаимодействовать с ней из кода php.
Чтобы установить соединение с бд, достаточно прописать в коде одну строку:
$connection = new Mongo();
В данном случае мы подключаемся к серверу, который запущен на localhost на стандартном порту 27017. Однако мы можем подключиться и к внешнему серверу:
$connection = new Mongo("somesite.com");
Здесь мы говорим подключиться к серверу MongoDB, который запущен на домене somesite.com и также на порту 27017. Если порт используется другой, то мы его также можем указать:
$connection = new Mongo("somesite.com:888");
После того, как работа с базой данных завершена, мы можем закрыть соединение, используя метод close:
$connection->close();
Создание документов в PHP
Ранее мы видели, что документ в mongodb фактически представляет объект в формате, аналогичном JSON. Он может хранить ключи, которым сопоставляются некоторые значения. Сами значения также могут представлять сложные объекты из ключей и значений. Так, мы создавали документ, представляющий отдельного человека:
> steve = ({ "name": "Steve", "age": 25, "languages": ["engish", "french"], company: { "name": "Apple", "year": 1976 } })
Создадим аналогичный документ в PHP. Для этого воспользуемся ассоциативными массивами:
$steve = array("name" => "Steve", "age" => 25, "languages"=> array("engish", "french"), "company" => array("name" => "Apple", "year" => 1976))
У меня была такая же проблема, когда я обновился до PHP 5.4. я имел
Extension_dir = "ext"
в php.ini и php -m начиналось нормально и сообщалось, что он загружал pdo_mysql, но когда я запускал phpinfo.php через apache, драйвер отсутствовал.
Я исправил это, изменив extension_dir на абсолютный путь . Я предполагаю, что он запутался при работе через Apache и сделал его относительно чего-то другого.
; Directory in which the loadable extensions (modules) reside. ; http://php.net/extension-dir ; extension_dir = "./" ; On windows: extension_dir = "D:/php-5.4.11-Win32-VC9-x86/ext"
попробуйте следующее: найдите это в своем php.ini и раскомментируйте extension_dir = "ext"
; Directory in which the loadable extensions (modules) reside. ; http://php.net/extension-dir ; extension_dir = "./" ; On windows: extension_dir = "ext"
Попробуйте php -m в консоли, он покажет ошибки запуска PHP.
Проверьте с помощью phpinfo (), чтобы убедиться, что путь для php.ini является тем же самым. На компьютерах с Windows обычно создается несколько экземпляров php.ini и вызывает путаницу.
Кроме того, вызов php из командной строки даст вам сообщение об ошибке с более подробной информацией о том, почему он не может быть загружен. Возможно, расширение, которое вы пытаетесь включить, несовместимо с вашей установкой PHP. т.е. это небезопасная dll с потокобезопасным двоичным кодом или существует несоответствие компилятора где-нибудь, где оба используются vc9 и vc6.
На Windows Server 2012, Apache 2.4, установка php 5.4, после того, как все остальное изменилось, это сработало …
PHPIniDir "C:\php\"
PHPIniDir "C:/php/"
После изменения конфигурации php.ini необходимо перезапустить сервер Appche в службе Windows. Затем загрузится модуль расширения. используйте следующий код для проверки:
У меня возникла эта проблема в Windows с использованием IIS. В моем php.ini были следующие разделы:
Extension=php_pdo_mysql.dll extension=php_pdo.dll
Я просто взял и и поменял местами свои позиции, чтобы появился первым. Я считаю, что порядок объявления важен!
Комментарий Михая в 2012 году гласит: «Попробуйте php -m в консоли, он покажет ошибки при запуске PHP». Это предложение оказалось наиболее полезным. Если в файле php.ini имеются какие-либо ошибки, диспетчер Windows PHP (IIS 8) не совсем понимает, что происходит с php.ini.
Перейдите в командную строку и введите php -m в командной строке. Всплывающее сообщение (предупреждение) сообщит вам о любых ошибках, и оно даст номера строк для этих проблем. В большинстве случаев моя единственная проблема заключалась в том, что я раскоментировал (удалил полуточку) на нескольких строках php.ini, где я НЕ должен был этого делать.
Еще один полезный совет для меня заключался в том, чтобы поместить полный путь для папки расширений (см. Комментарий выше Джереми Прайн), который помог с сообщениями о «отсутствующих DLL», появившихся в предупреждениях.
Я получил подсказки здесь:
Я запускаю PHP 5.2 с Apache 2.2. Исправить меня было скопировать файл libmysql.dll в мой каталог bin Apache.
Я бы порекомендовал следующий курс действий всем, у кого возникла эта проблема: 1) проверьте, чтобы загруженный файл конфигурации находился там, где вы думаете (т.е., что Apache не использует какой-либо по умолчанию php.ini) – phpinfo () предоставит ответ на этот вопрос 2), чтобы убедиться, что все нужные расширения находятся в папке php \ ext и включены в файл php.ini (самые популярные расширения просто нужно расколоть). 3) Попробуйте загрузить pdo_sqllite. Если это произошло в phpinfo () после перезапуска Apache, вы сузили проблему неспособности Apache загрузить необходимые расширения mysql. 4) Следуйте инструкциям в приведенной выше ссылке.
У меня тоже была эта пробема. У меня есть Apache / 2.2.22 (Win32) PHP / 5.3.23 на машине Windows 7. Мое решение меняло расширение extension_dir = C: \ Program Files (x86) \ PHP \ ext в файле php.ini на extension_dir = "C: \ Program Files (x86) \ PHP \ ext". Просто нужно было добавить кавычки.
убедитесь, что файлы pdo * .dll находятся в соответствующих местах в каталоге ОС, проверьте, что ссылки на эти файлы включены в php.ini, проверьте правильность вашей строки dbconnection, перезапустите apache
Ошибка PHP PDO не существует в 5.4
Неустранимая ошибка: Class "DigitalToolBox \ PDO" не найден в C: \ SERVER \ www \ MyAPP \ DigitalToolBox \ MysqlConnectionTool.php в строке 19
вы можете видеть, что pdo загружен, потому что он находится в списке с этим коммандом:
Print_r(get_loaded_extensions());
эта ошибка возникает для использования пространств имен , нам нужно добавить в начале нашего кода инструкцию:
Use PDO;
IF ($ this-> works) $ voteForThis ++;
Если вы используете PHP Manager с IIS, выполните следующие действия:
PDO Drivers no value – ваши записи dll не могут быть упорядочены в файле php.ini. Проверьте список записей расширения dll.
Extension=php_pdo_mysql.dll
записи должны быть размещены рядом со всеми записями pdo. Такой же как
Extension=php_mysql.dll
записи должны быть размещены рядом со всеми без записей pdo.
Хмель это помогает.
В PHP 7.1 x64 на windows с apache 2.4 x64:
extension_dir = "ext" не работает для меня,
Абсолютный путь: extension_dir = "C: \ DEV \ PHP71 \ ext \" работал хорошо
1. драйвер PDO и PDO_Sqlite включен, по умолчанию, в PHP 5.1.0. Вам может понадобиться выбрать другой драйвер PDO для конкретной базы данных, в этом случае обратитесь к документации по конкретной базе данных драйверов PDO.
Примечание: При построении PDO в качестве общего расширения (shared extension (не рекомендуется)), все PDO драйверы должен быть загружены после PDO самостоятельно.
2. При установке PDO как общего модуля, следует изменить файл php.ini, что бы расширение(extension) PDO загружалось автоматически, работает PHP работает.
Вам также необходимо убедиться, чтобы имелись специфичные драйверы базы данных, и чтоб они были перечислены после pdo.so, так как PDO должен инициализироваться в первую очередь, до загрузки драйверов баз данных PDO.
Если вы запустили PDO для конкретной базы данных расширений статически, вы можете пропустить этот шаг.
3. extension = pdo.so
Установка PDO на системах Windows
1. PDO и все основные драйверы PDO поставляются с PHP как общие расширения(extentions). Для активизации нужно раскомментировать необходимые строки в файле php.ini:
Extension=php_pdo.dll
Примечание: Этот шаг не является необходимым для PHP 5.3 и выше, так как DLL, больше не требуется для PDO.
Extension=php_pdo.dll
extension=php_pdo_firebird.dll
extension=php_pdo_informix.dll
extension=php_pdo_mssql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_oci.dll
extension=php_pdo_oci8.dll
extension=php_pdo_odbc.dll
extension=php_pdo_pgsql.dll
extension=php_pdo_sqlite.dll
Эти библиотеки должны существовать в директории "extension_dir" системы.
Проверяем работу PDO
Просмотрите подключается ли PDO с помощью функции phpinfo().
Phpinfo();
На странице вам нужно найти блок PDO, а также блоки pdo_mysql, pdo_sqlite, и т.д. в зависимости от тех PDO-драйверов которые вы подключали.
Выполните следующий код.
Echo "Доступные драйвера:";
print_r(PDO::getAvailableDrivers());
$pdo = new PDO("sqlite:my.db");
echo "Объект PDO:";
print_r($pdo);
Результатом выполнения должна быть строка:
PDO Object ()
Что означает, что содинение с БД SQLite установлено нормально. Результатом выполнения скрипта будет файл my.db созданный в директории скрипта.
Настройки PDO
Настройки PDO вида pdo.dsn.*
настройки вида pdo.dsn.* - позволяют указать параметры доступа по умолчанию.
Уровень изменения переменных pdo.dsn.* - файл php.ini