亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

升級PHP7 jenssegers/mongodb expected to be a referen

tangr206 / 732人閱讀

摘要:上的擴展有兩個,都是官方出品的,一個叫,一個是,前者已經(jīng)被官方廢棄,不再提供穩(wěn)定的更新,官方推薦使用后者,并且后者是支持的。在上搜索即可找到,也可以通過安裝。使用作為中間件,不用修改現(xiàn)有代碼。

pecl上的mongodb擴展有兩個,都是官方出品的,一個叫mongo,一個是mongodb,前者已經(jīng)被官方廢棄,不再提供穩(wěn)定的更新,官方推薦使用后者,并且后者是支持php7的。在pecl上搜索mongodb即可找到,也可以通過pecl install mongodb安裝。mongo和mongodb的結(jié)構(gòu)完全不同,使用方式也大相徑庭,不過官方有個php適配包,可以讓mongodb看上去和mongo使用體驗近似 https://github.com/mongodb/mo...

以上來自這個問題

目前用的 laravel-mongodb

WARNING: The old mongo PHP driver is not supported anymore in versions >= 3.0.

因為現(xiàn)在用的2.1 版本,而升級PHP7后用的mongodb 擴展,不兼容之前的mongo擴展,所以現(xiàn)在有2個選擇:

1.升級到3.0版本。
2.使用 https://github.com/alcaeus/mo... 作為中間件,不用修改現(xiàn)有代碼。

第二個方案來自 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...

第一個方案就不說了,現(xiàn)在說第二個。

composer config "platform.ext-mongo" "1.6.16" && composer require alcaeus/mongo-php-adapter

然后測試下

Message::create([ "title"=>"標題","content"=>"內(nèi)容22","time"=>time()]);
提示:

ErrorException in Collection.php line 42:
Parameter 1 to MongoCollection::insert() expected to be a reference, value given

有問題怎么辦?當然搜索啊,于是 Google ,不得不說谷歌牛逼,第一條結(jié)果就找到了 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.

接著又出現(xiàn)新問題:
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

而現(xiàn)在用的是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 更換對應(yīng)php版本
車輪升級PHP7踩過的一些坑
《PHP 開發(fā)者實踐》
PHP 手冊拾遺
PHP 7 升級實踐
php7cc 輔助進行代碼檢查
php5 php7不兼容的地方
PHP7內(nèi)核剖析
升級PHP7操作MongoDB
一篇寫給準備升級PHP7的小伙伴的文章

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/19357.html

Failed to recv the data from server completely (SIZE:0/8, REASON:closed)