摘要:上的擴展有兩個,都是官方出品的,一個叫,一個是,前者已經被官方廢棄,不再提供穩定的更新,官方推薦使用后者,并且后者是支持的。在上搜索即可找到,也可以通過安裝。使用作為中間件,不用修改現有代碼。
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的小伙伴的文章
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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...
閱讀 1876·2021-09-28 09:36
閱讀 2426·2021-09-08 09:35
閱讀 3067·2019-08-30 15:53
閱讀 1554·2019-08-30 14:08
閱讀 665·2019-08-29 18:40
閱讀 2843·2019-08-29 13:57
閱讀 2702·2019-08-29 13:55
閱讀 681·2019-08-26 13:45