摘要:上的扩展有两个,都是官方出品的,一个叫,一个是,前者已经被官方废弃,不再提供稳定的更新,官方推荐使用后者,并且后者是支持的。在上搜索即可找到,也可以通过安装。使用作为中间件,不用修改现有代码。
pecl上的mongodb扩展有两个,都是官方出品的,一个叫mongo,一个是mongodb,前者已经被官方废弃,不再提供稳定的更新,官方推荐使用后者,并且后者是支持php7的。在pecl上搜索mongodb即可找到,也可以通过pecl install mongodb安装。mongo和mongodb的结构完全不同,使用方式也大相径庭,不过官方有个php适配包,可以让mongodb看上去和mongo使用体验近似 https://github.com/mongodb/mo...
以上来自这个问题
目前用的 laravel-mongodb
WARNING: The old mongo PHP driver is not supported anymore in versions >= 3.0.
因为现在用的2.1 版本,而升级PHP7后用的mongodb 扩展,不兼容之前的mongo扩展,所以现在有2个选择:
1.升级到3.0版本。
2.使用 https://github.com/alcaeus/mo... 作为中间件,不用修改现有代码。
第二个方案来自 http://php.net/manual/zh/set....
There is an adapter - so old MongoClient / MongoDB code will run on the new PHP7/Mongo mess
https://github.com/alcaeus/mo...
第一个方案就不说了,现在说第二个。
composer config "platform.ext-mongo" "1.6.16" && composer require alcaeus/mongo-php-adapter
然后测试下
Message::create([ "title"=>"标题","content"=>"内容22","time"=>time()]);
提示:
ErrorException in Collection.php line 42: Parameter 1 to MongoCollection::insert() expected to be a reference, value given
有问题怎么办?当然搜索啊,于是 Google ,不得不说谷歌牛逼,第一条结果就找到了 https://github.com/alcaeus/mo...
再看看百度
翻不了bing.com 也行啊
或者搜 issue
打开第二个链接 https://github.com/jenssegers...
看最后这个链接 https://github.com/zamrih/lar...
然后修改源文件 jenssegers/mongodb/src/Jenssegers/Mongodb/Collection.php 虽然能解决,但这不是个好的办法。
/** * Handle specific insert call. * Cannot be handled dynamically because a reference needs to be passed * @param array|object $document * @param array $options * @return mixed */ public function insert(&$document, array $options = []) { return $this->__call("insert", array(&$document, $options)); } /** * Handle specific batchInsert call. * Cannot be handled dynamically because a reference needs to be passed * @param array $a * @param array $options * @return mixed */ public function batchInsert(array &$a, array $options = []) { return $this->__call("batchInsert", array(&$a, $options)); } /** * Handle specific save call.https://github.com/zamrih/laravel-mongodb/commit/8c3b4aaaee773e0c2968b4ff215ccec5305394e2 * Cannot be handled dynamically because a reference needs to be passed * @param array|object $document * @param array $options * @return mixed */ public function save(&$document, array $options = []) { return $this->__call("save", array(&$document, $options)); }
其实 https://github.com/alcaeus/mo... 给出提示了
The insert, batchInsert, and save methods take the first argument by reference. While the original API does not explicitely specify by-reference arguments it does add an ID field to the objects and documents given.
接着又出现新问题:
Fatal error: Call to undefined method MongoDBDriverReadConcern::isDefault() in ..srcOperationFind.php on line 193
搜索下
https://github.com/alcaeus/mo...
https://github.com/mongodb/mo...
https://github.com/mongodb/mo...
https://github.com/mongodb/mo... 这个提交增加了MongoDBDriverReadConcern::isDefault() 但他要求 MongoDB扩展1.3.0+
因为默认版本是PHP5,所以 pecl install mongodb 会提示
pecl config-show pecl/mongodb requires PHP (version >= 5.5.0, version <= 7.99.99), installed version is 5.3.29 No valid packages found install failed ll /data/php7/bin/ total 124692 -rwxr-xr-x 1 root root 842 Feb 4 2016 pear -rwxr-xr-x 1 root root 863 Feb 4 2016 peardev -rwxr-xr-x 1 root root 779 Feb 4 2016 pecl lrwxrwxrwx 1 root root 9 Feb 4 2016 phar -> phar.phar -rwxr-xr-x 1 root root 14834 Feb 4 2016 phar.phar -rwxr-xr-x 1 root root 42332852 Feb 4 2016 php -rwxr-xr-x 1 root root 42161587 Feb 4 2016 php-cgi -rwxr-xr-x 1 root root 3583 Feb 4 2016 php-config -rwxr-xr-x 1 root root 43141643 Feb 4 2016 phpdbg -rwxr-xr-x 1 root root 4537 Feb 4 2016 phpize /data/php7/bin/pecl install mongodb
而现在用的是1.1.6版本,那只好升级了 到 http://pecl.php.net/package/m... 下载最新版本 http://pecl.php.net/get/mongo...
tar -zxf mongodb-1.5.2.tgz cd mongodb-1.5.2 which php7 /data/php7/bin/phpize which php-config ./configure --with-php-config=/data/php7/bin/php-config make && make install ll /data/php7/lib/php/extensions/no-debug-zts-20151012/ php7 -i |grep extension_dir extension_dir => /data/php7/lib/php/extensions/no-debug-zts-20151012 => /data/php7/lib/php/extensions/no-debug-zts-20151012 sqlite3.extension_dir => no value => no value php7 --ini Configuration File (php.ini) Path: /data/php7/etc/ Loaded Configuration File: /data/php7/etc/php.ini Scan for additional .ini files in: (none) Additional .ini files parsed: (none) vi /data/php7/etc/php.ini extension=mongodb.so php7 -m |grep mongodb php7 -i|grep mongodb
链接:
https://github.com/alcaeus/mo...
https://github.com/mongodb/mo...
https://github.com/alcaeus/mo...
http://php.net/manual/en/mong...
http://php.net/manual/zh/mong...
http://php.net/manual/zh/set....
https://github.com/mongodb/mo...
https://secure.php.net/manual...
https://github.com/mongodb/mo...
https://github.com/alcaeus/mo...
pecl 更换对应php版本
车轮升级PHP7踩过的一些坑
《PHP 开发者实践》
PHP 手册拾遗
PHP 7 升级实践
php7cc 辅助进行代码检查
php5 php7不兼容的地方
PHP7内核剖析
升级PHP7操作MongoDB
一篇写给准备升级PHP7的小伙伴的文章
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/29331.html
摘要:上的扩展有两个,都是官方出品的,一个叫,一个是,前者已经被官方废弃,不再提供稳定的更新,官方推荐使用后者,并且后者是支持的。在上搜索即可找到,也可以通过安装。使用作为中间件,不用修改现有代码。 pecl上的mongodb扩展有两个,都是官方出品的,一个叫mongo,一个是mongodb,前者已经被官方废弃,不再提供稳定的更新,官方推荐使用后者,并且后者是支持php7的。在pecl上搜索...
摘要:再次打开包内源码,发现了如下的细节敲黑板注意看路径,此时是包内知道原理之后,于是在配置文件中做了如下修改至此,,收工 项目中使用了mongoDB,所以就到最大的同性交友网站找到了星星最多的jenssegers/laravel-mongodb 包安装 1、根据README,找到本地laravel对应的包版本showImg(https://segmentfault.com/img/bVbr...
摘要:再次打开包内源码,发现了如下的细节敲黑板注意看路径,此时是包内知道原理之后,于是在配置文件中做了如下修改至此,,收工 项目中使用了mongoDB,所以就到最大的同性交友网站找到了星星最多的jenssegers/laravel-mongodb 包安装 1、根据README,找到本地laravel对应的包版本showImg(https://segmentfault.com/img/bVbr...
摘要:简介另一个令人喜欢的地方,是拥有活跃的开发者社区,而活跃的开发者社区带来的,是繁华的扩展包生态该项目统计了目前下载量最高的个扩展包。记得哟相信下面这些扩展包会让你的编码更加高效。排名下载量排名包地址下载次数描述图片处理。 简介 Laravel 另一个令人喜欢的地方,是拥有活跃的开发者社区,而活跃的开发者社区带来的,是繁华的扩展包生态 ———— @Summer 该项目统计了目前 pack...
阅读 1859·2021-09-28 09:36
阅读 2390·2021-09-08 09:35
阅读 3054·2019-08-30 15:53
阅读 1536·2019-08-30 14:08
阅读 646·2019-08-29 18:40
阅读 2825·2019-08-29 13:57
阅读 2688·2019-08-29 13:55
阅读 665·2019-08-26 13:45