PHP-библиотека MongoDB - код работает в терминале, но не в браузере

Я установил PHP-библиотеку MongoDB с помощью pecl, следуя официальной документации, приведенной на http://php.net/manual/en/mongodb.installation.pecl.php

Я создал коллекцию с именем «ma», содержащую два документа «d1» и «d2», через оболочку mongo.

Я пытаюсь подключиться к d1 через этот файл: connect.php

<?php
require_once __DIR__ . "/vendor/autoload.php";
$client = new MongoDB\Client("mongodb://localhost:27017");
$collection = $client->ma->d1;
echo "Done\n";
echo $collection;
?>

connect.php работает на моем терминале и выдает такой результат:

$ php connect.php
Done
ma.d1

Но в браузере выдает такую ​​ошибку: Эта страница не работает. В настоящее время localhost не может обработать этот запрос. ОШИБКА HTTP 500

Моя машина — 64-битная Ubuntu 14.04 LTS. Версия PHP: 5.5.9. Версия оболочки и сервера MongoDB: 3.6.2. Версия сервера Apache: 2.4.7.

Я уверен, что драйвер был установлен правильно, потому что я получаю это:

$ php --ri mongodb | grep version
MongoDB extension version => 1.4.0
libbson bundled version => 1.9.2
libmongoc bundled version => 1.9.2

Я новичок в этом драйвере. Любая помощь будет принята с благодарностью.


person agentK    schedule 10.02.2018    source источник
comment
Избавьтесь от использования PEAR/PECL. Для всех основных расширений PHP вы найдете предварительно упакованные и протестированные бинарные файлы там же, где и для самого PHP. Это исключит, что что-то было не так с самой установкой. Затем вы можете включать/отключать расширения в зависимости от того, обслуживается ли код Apache или запускается из командной строки, проверьте, включены ли оба.   -  person Ulrich Eckhardt    schedule 10.02.2018
comment
Кстати: вам нужно проверить журналы ошибок. Поступив таким образом, вы могли бы решить проблему самостоятельно.   -  person Ulrich Eckhardt    schedule 10.02.2018
comment
Спасибо за предложение, но поскольку официальный сайт PHP дал мне возможность использовать PECL, я последовал ему. И у меня получилось, так что все хорошо.   -  person agentK    schedule 10.02.2018


Ответы (2)


Вы добавили директиву расширения mongodb.so в php.ini, который используется apache?

См. здесь: http://php.net/manual/en/mongodb.installation.manual.php

person sorak    schedule 10.02.2018
comment
Да, я добавил эту строку во время установки, но оказалось, что после этого я должен был перезапустить Apache. Я ответил на свой вопрос, но все равно спасибо. - person agentK; 10.02.2018

После добавления extension = mongodb.so в файл конфигурации php (в моем случае /etc/php5/cli/php.ini) вам необходимо перезапустить сервер Apache.

sudo killall apache2
sudo service apache2 restart

Кроме того, не уверен, было ли это связано с MongoDB или только с Apache, но я получил эту ошибку при перезапуске: «apache2: не удалось надежно определить полное доменное имя сервера, используя 127.0.1.1. Глобально установите директиву «ServerName» на скрыть это сообщение».

Поэтому я последовал этому ответу: https://askubuntu.com/a/256018

Наконец, используйте этот код, чтобы убедиться, что расширение загружается:

<?php
echo extension_loaded("mongodb") ? "loaded\n" : "not loaded\n";
?>
person agentK    schedule 10.02.2018