Intereting Posts
Есть ли какое-либо преимущество в области безопасности для шифрования переменных сеанса? PHPMailer: замените идентификатор сообщения по умолчанию Как перенаправить пользователей на основе случайной строки URL? Использование имени домена вместо localhost внутри с https в xampp Code Logic для предотвращения столкновения между двумя оговорками Мобильная версия моего проекта Symfony возникли проблемы с отображением изображения, загруженного в Amazon s3, с помощью тонкой загрузки изображение captcha в php Мой Laravel 5.2.10 Сессии не сохраняются кодировка содержимого php zip Как создать pdf-файл из динамических данных, поступающих из базы данных mysql в php? Доступ к необъявленному статическому свойству: Doctrine \ ODM \ MongoDB \ Mapping \ Driver \ AnnotationDriver :: Почему этот jQuery ajax-вызов не возвращает данные из моего php-скрипта? Как проверить SSL-сертификат login.live.com с помощью cURL, PHP и Windows XAMPP Запустить PHP-код из .htaccess?

Неустранимая ошибка: класс «MongoDate» не найден при использовании mongodb php driver 1.1.2 и PHP 7.0.2 – Laravel 5.1

Я пытаюсь настроить MongoDB на работу с моим экземпляром Laravel 5.1 Homestead на виртуальной машине Ubuntu 14.04. Я смог успешно установить последнюю версию MongoDB, которая поддерживает PHP 7.0, используя sudo pecl install mongodb (это правильно для 7.0, а не sudo pecl install mongo ).

Затем я добавил расширение в свои файлы php.ini (все три) на моей машине Ubuntu, каждый из которых:

  • /etc/php/7.0/cli/php.ini
  • /etc/php/7.0/fpm/php.ini
  • /etc/php/7.0/cgi/php.ini

Это расширение, которое я написал, которое правильно для использования с PHP 7.0:

  • extension=mongodb.so (не больше mongo.so)

Когда я запускаю phpinfo() в своем браузере, он указывает, что MongoDB правильно настроен с моим PHP 7.0.

Если MongoDB настроен правильно, почему я продолжаю получать:

 Fatal error: Class 'MongoDate' not found 

когда я пытаюсь запустить мои миграции и семена с помощью php artisan migrate:refresh --seed ?

Я уже пробовал:

  • перезагрузка машины Ubuntu с vagrant reload и vagrant reload --provision
  • Перезапуск PHP и Nginx с помощью sudo service nginx restart и sudo service php7.0-fpm restart

Ничего не сработало.

Как вы уже упоминали, вы используете новое монго-расширение для PHP 7.

Имена классов изменились с более старой версии, т.е.

MongoClient теперь MongoDB\Driver\Manager

MongoDate теперь MongoDB\BSON\UTCDateTime

Я не уверен, насколько обратно совместимо все, но это должно заставить вас начать!

В нашем приложении мы регулярно конвертировали временные метки unix в экземпляры MongoDate. Пример:

 new MongoDate(strtotime('-1 day')); 

Поэтому я создал класс, позволяющий преобразовать временные метки unix и новый MongoDB\BSON\UTCDateTime , и обратно

 <?php class MongoHelper { const SECONDS_IN_A_MILLISECOND = 1000; public static function getMongoUTCDateTimeFromUnixTimestamp($timestamp) { return new \MongoDB\BSON\UTCDateTime(intval($timestamp * self::SECONDS_IN_A_MILLISECOND)); } public static function getUnixTimestampFromMongoUTCDateTime(\MongoDB\BSON\UTCDateTime $utc_date_time) { return intval((string) $utc_date_time / self::SECONDS_IN_A_MILLISECOND); } } 

Пример использования:

 MongoHelper::getMongoUTCDateTimeFromUnixTimestamp(strtotime('-1 day'));