Don 发布的文章

手动编译安装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

elasticsearch status red问题解决

业务自己搭建了一套elasticsearch服务,最近几天查询开始变的越来越不稳定。

查看健康度发现status已经变成了red。

[root@localhost ~]# curl 'http://xxx.xxx.xxx.xxx:9200/_cluster/health?pretty'           
{
  "cluster_name" : "imageIndex",
  "status" : "red",
  "timed_out" : false,
  "number_of_nodes" : 4,
  "number_of_data_nodes" : 4,
  "active_primary_shards" : 4,
  "active_shards" : 6,
  "relocating_shards" : 1,
  "initializing_shards" : 0,
  "unassigned_shards" : 4,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 10
}
[root@localhost ~]#

问了下朋友,说是重启所有节点看看。

  1. 停止所有节点服务

        curl -XPOST 'http://xxx.xxx.xxx.xxx:9200/_cluster/nodes/_shutdown'
  2. 分别启动每一个节点

        ./bin/elasticsearch -d
  3. 查看健康度

    [user_00@localhost ~]$ curl 'http://xxx.xxx.xxx.xxx:9200/_cluster/health?pretty'
    {
      "cluster_name" : "imageIndex",
      "status" : "yellow",
      "timed_out" : false,
      "number_of_nodes" : 4,
      "number_of_data_nodes" : 4,
      "active_primary_shards" : 5,
      "active_shards" : 5,
      "relocating_shards" : 0,
      "initializing_shards" : 5,
      "unassigned_shards" : 0,
      "delayed_unassigned_shards" : 0,
      "number_of_pending_tasks" : 0,
      "number_of_in_flight_fetch" : 0
    }

参考资料:
集群健康
elasticsearch如何安全重启节点(续)

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选项,问题解决。

PHP如何获取mongoDB查询的条数

有业务代码如下:

$conn = new MongoClient('mongodb://127.0.0.1:27017');
$db = $conn->database->table;

$start = 0;
$limit = 200;
while (1) {
    $conditions = array(
        'id' => array(
            '$gt' => $start,
        ),
    );
    $dataList = $db->find($conditions)->limit($limit);

    // 这里需要知道查询到最后,跳出while循环

    foreach ($dataList as $data) {
        // 业务处理代码
    }
}

- 阅读剩余部分 -