标签 PHP 下的文章

PHP7下使用MongoDB API

  1. 安装支持PHP7的扩展。

    老版的MongoDB扩展是不支持PHP7的,需要下载重新编译支持PHP7的扩展。

    手动编译PHP7的MongoDB扩展
    PHP手册关于老版扩展的文档
    PHP手册关于新版扩展的文档

  2. 安装MongoDB的PHP类库。

    mongo-php-library的github主页

    使用composer安装。

        composer require "mongodb/mongodb=^1.0.0@beta"
  3. 操作完前两步就可以在PHP7里使用MongoDB了.

        <?php
        require_once __DIR__ . "/vendor/autoload.php";
    
        $manager = new MongoDB\Driver\Manager("mongodb://localhost:27017");
        $collection = new MongoDB\Collection($manager, "db.test");
    
    
        // 读取一条数据
        $data = $collection->findOne(array('id' => 1));
    
        // 读取多条数据
        $options = arrray(
            'projection' => array('id' => 1, 'age' => 1, 'name' => 1), // 指定返回哪些字段
            'sort' => array('id' => -1), // 指定排序字段
            'limit' => 10, // 指定返回的条数
            'skip' => 0, // 指定起始位置
        );
        $dataList = $collection->find(array('age' => 50), $options);
    
        // 插入一条数据
        $data = array('id' => 2, 'age' => 20, 'name' => '张三');
        $collection->insertOne($data);
    
        // 修改一条数据
        $collection->updateOne(array('id' => 1), array('$set' => array('age' => 20)));
    
        // 删除一条数据
        $collection->deleteOne(array('id' => 1));
    
        // 删除多条数据
        $collection->deleteMany(array('id' => array('$in' => array(1, 2))));

手动编译PHP7的MongoDB扩展

  1. 下载支持php7的MongoDB扩展

        wget http://pecl.php.net/get/mongodb-1.1.1.tgz
        tar -zxvf mongodb-1.1.1.tgz
        cd mongodb-1.1.1.tgz
        /usr/local/php7/bin/phpize
        ./configure --with-php-config=/usr/local/php7/bin/php-config
        make && make install

    如果出现Can't install [sasl.h not found!]的错误,执行命令apt-get install libsasl2-dev

  2. 添加mongodb.so到php.ini里
  3. 查看当前扩展

        /usr/local/php7/bin/php -m
        [PHP Modules]
        bcmath
        Core
        ctype
        curl
        date
        dom
        filter
        ftp
        gd
        gettext
        hash
        iconv
        json
        libxml
        mbstring
        mcrypt
        mongodb
        mysqlnd
        openssl
        pcntl
        pcre
        PDO
        pdo_sqlite
        Phar
        posix
        Reflection
        session
        shmop
        SimpleXML
        soap
        sockets
        SPL
        sqlite3
        standard
        sysvsem
        tokenizer
        xml
        xmlreader
        xmlrpc
        xmlwriter
        Zend OPcache
        zip
        zlib
    
        [Zend Modules]
        Zend OPcache

    可以看到已经有mongodb扩展了。

手动编译安装PHP7

之前搞过一次php7的beta版,正式版发布了,想着把php也升上去。
之前安装是用的apt-get方式,这次想折腾一下手动编译。
服务器环境 Ubuntu 14.04 x64
  1. 下载PHP文件

        wget https://github.com/php/php-src/archive/php-7.0.1.zip
        unzip -q php7-src-master.zip
  2. 配置编译参数

        ./buildconf
    
        ./configure \
        --prefix=/usr/local/php7 \                              [PHP7安装的根目录]
        --exec-prefix=/usr/local/php7 \
        --bindir=/usr/local/php7/bin \
        --sbindir=/usr/local/php7/sbin \
        --includedir=/usr/local/php7/include \
        --libdir=/usr/local/php7/lib/php \
        --mandir=/usr/local/php7/php/man \
        --with-config-file-path=/usr/local/php7/etc \           [PHP7的配置目录]
        --with-mysql-sock=/var/run/mysql/mysql.sock \           [PHP7的Unix socket通信文件]
        --with-mcrypt=/usr/include \
        --with-mhash \
        --with-openssl \           
        --with-mysqli=shared,mysqlnd \                          [PHP7依赖mysql库]
        --with-pdo-mysql=shared,mysqlnd \                       [PHP7依赖mysql库]
        --with-gd \
        --with-iconv \
        --with-zlib \
        --enable-zip \
        --enable-inline-optimization \
        --disable-debug \
        --disable-rpath \
        --enable-shared \
        --enable-xml \
        --enable-bcmath \
        --enable-shmop \
        --enable-sysvsem \
        --enable-mbregex \
        --enable-mbstring \
        --enable-ftp \
        --enable-gd-native-ttf \
        --enable-pcntl \
        --enable-sockets \
        --with-xmlrpc \
        --enable-soap \
        --without-pear \
        --with-gettext \
        --enable-session \                                      [允许php会话session]
        --with-curl \                                           [允许curl扩展]
        --with-jpeg-dir \
        --with-freetype-dir \
        --enable-opcache \                                      [使用opcache缓存]
        --enable-fpm \
        --with-fpm-user=www \                                 [php-fpm的用户]
        --with-fpm-group=www \                                [php-fpm的用户组]
        --without-gdbm \
        --disable-fileinfo

    如果buildconf的时候输出下面的错误,加上--force参数解决。

        You should not run buildconf in a release package.
        use buildconf --force to override this check.
  3. 开始编译和安装

        make && make install

    执行完可以去喝杯水,耐心等待就好了。

参考资料

How to compile php7 on ubuntu 14.04
2015博客升级记(五):CentOS 7.1编译安装PHP7

file_get_contents返回为false的问题排查

今天业务新上线两台机器,功能测试中发现file_get_contents返回为false。

用curl的方式请求了下,返回了数据。
比较奇怪,查看php错误日志,发现有类似这样的错误。

PHP Warning:  file_get_contents() [<a href='function.file-get-contents'>function.file-get-contents</a>]: http:// wrapper is disabled in the server configuration by allow_url_fopen=0 

编辑php.ini,打开allow_url_fopen选项,问题解决。

记录安装PHP7 beta 和 PHP的mongodb扩展

2015年12月29日更新,PHP7正式版已经发布,也有PHP7可用的mongodb扩展了。

手动编译安装PHP7
手动编译PHP7的MongoDB扩展
PHP7下使用MongoDB API

下面的内容已过期,请参考上面的文章安装MongoDB的扩展。

服务器环境 Ubuntu 14.04 x64

安装PHP7

echo "deb http://repos.zend.com/zend-server/early-access/php7/repos ubuntu/" >> /etc/apt/sources.list

apt-get update && apt-get install php7-beta1

参考zend的文章 PHP 7 Builds - By Zend Technologies - The PHP Company

安装mongodb的PHP扩展

wget https://github.com/mongodb/mongo-php-driver/archive/1.6.10.tar.gz
tar zxvf 1.6.10.tar.gz
cd mongo-php-driver-1.6.10
/usr/local/php7/bin/phpize

执行phpize出现“Cannot find autoconf. Please check your autoconf installation and the $PHP_AUTOCONF environment variable. Then, rerun this script.”的错误,执行下面的命令安装autoconf。

apt-get install autoconf

继续上面的编译工作

/usr/local/php7/bin/phpize
./configure --with-php-config=/usr/local/php7/bin/php-config
make

make出现一堆错误,搜索了下发现mongodb的PHP扩展暂时还不支持PHP7.
PHP-1438
PHPC-285

无奈只能安装PHP5.