php7嚐鮮

經過yum源安裝php7

PHP 7.0.0 已經推出了幾天,帶來了新版本的Zend引擎,不只如此,還有許多新特性和改進,好比:php

  • 性能提高:PHP 7速度是PHP 5.6的兩倍html

  • 內存的使用顯著下降mysql

  • 抽象語法樹nginx

  • 支持64位c++

  • 許多重大的錯誤將轉爲異常web

  • 安全的隨機數生成器sql

  • 刪除舊的、不支持的SAPIs和擴展docker

  • null合併操做符(??)centos

  • 返回和標量類型聲明安全

  • 匿名類

  • 零成本斷言

下面我經過結合docker,部署一下php7

定義dockerfile

REMI 倉庫提供了CentOS和RHEL的核心包的更新版本,尤爲是最新的PHP/MySQL系列。 所以我選擇經過
remi源的方式在線安裝php7。具體的dockerfile定義以下:

FROM centos:centos6
RUN rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
RUN rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
RUN rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi

RUN yum  -y --enablerepo=remi install  php70 php70-php-cli php70-php-common php70-php-fpm

# 安裝mysql擴展
RUN yum  -y --enablerepo=remi install php70-php-mysqlnd

# 安裝nginx
RUN yum -y install nginx

# 增長一個啓動腳本
RUN echo "#!/bin/bash" >> /start.sh
RUN echo "/opt/remi/php70/root/usr/sbin/php-fpm" >> /start.sh
RUN echo "/usr/sbin/nginx" >> /start.sh

# 監聽80端口
EXPOSE 80

# 給腳本一個執行權限
RUN chmod +x /start.sh

#啓動容器,執行 start.sh命令
CMD /start.sh

注意事項: 安裝remi源以前,首先須要安裝epel源

把nginx服務跟php部署在同一個容器裏

編譯鏡像

docke build -t fasss/php7 .

進入容器拷貝配置文件

運行容器

docker run -it fasss/php7 bash

進入php的安裝目錄

cd /opt/remi/php70/root

查看php配置文件目錄

[root@96238f70b8b4 root]# ./usr/bin/php -i | head -10
phpinfo()
PHP Version => 7.0.0

System => Linux 96238f70b8b4 3.10.0-123.el7.x86_64 #1 SMP Mon Jun 30 12:09:22 UTC 2014 x86_64
Build Date => Dec  3 2015 17:56:57
Server API => Command Line Interface
Virtual Directory Support => disabled
Configuration File (php.ini) Path => /etc/opt/remi/php70

獲得php和fpm的配置文件目錄爲 /etc/opt/remi/php70

退出容器。從容器裏拷貝文件到宿主機

docker cp 96238f70b8b4:/etc/opt/remi/php70 ./

96238f70b8b4這個根據你本身生成的容器ID來

宿主機映射的配置文件夾位置

docker cp 96238f70b8b4:/etc/nginx /data/etc/php70/

修改宿主機上的nginx配置文件

nginx conf文件

daemon  off;
user              nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

server {
    listen       80;

    #charset koi8-r;
    access_log  /var/log/nginx/access.log  main;

    location / {
        root   /webwww/bbs;
        index  index.php index.html index.htm;
    }
    location ~ \.php$ {
            root           /webwww/bbs;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

   }

}

注意點: 「daemon off」表示程序在前臺運行。 「/webwww/bbs」 document_root的位置。

裏面是我建立的一個hello.php文件。 輸出「hello from php7」

運行最終容器

docker run -it --name my_php7 \
-v /data/etc/php70/nginx/:/etc/nginx/ \
-v /data/app/test:/webwww/bbs   -p 80:80  fasss/php7
  • /data/app/test 表示程序文件夾

  • /data/etc/php70/nginx/:/etc/nginx/ 配置文件映射

顯示結果:

hello_php7.png

源碼安裝php7

下載源碼包

wget http://cn2.php.net/get/php-7.0.0.tar.gz/from/this/mirror

安裝編譯工具

yum -y install gcc automake autoconf libtool make
yum -y install gcc gcc-c++ glibc

安裝EPEL源

rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

防止有些包找不到

安裝基礎庫

yum -y install libmcrypt-devel mhash-devel libxslt-devel \
libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel \
libxml2 libxml2-devel \
zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 \
bzip2-devel \
ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel \
krb5 krb5-devel libidn libidn-devel openssl openssl-devel

編譯

./configure --prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-mysqli \
--with-openssl \
--enable-fpm \
--enable-mbstring \
--with-freetype-dir \
--with-jpeg-dir \
--with-png-dir \
--with-zlib-dir \
--with-libxml-dir=/usr \
--enable-xml \
--with-mhash \
--with-mcrypt \
--enable-pcntl \
--enable-sockets \
--with-bz2 \
--with-curl \
--enable-mbregex \
--with-gd \
--enable-gd-native-ttf \
--enable-zip \
--enable-soap \
--with-iconv \
--enable-sysvshm \
--enable-sysvmsg \
--with-pdo-mysql

# 若是沒有錯誤
make
make install

檢查是否已經安裝完成

[root@b30acbed1ebd php]# /usr/local/php/bin/php -v
PHP 7.0.0 (cli) (built: Dec  7 2015 13:03:05) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies

修改fpm的配置文件

cd /usr/local/php/etc/
mv php-fpm.conf.default php-fpm.conf

cd /usr/local/php/etc/php-fpm.d
mv www.conf.default www.conf

啓動fpm

/usr/local/php/sbin/php-fpm

常見錯誤

configure: error: mcrypt.h not found. Please reinstall libmcrypt.

出現錯誤 yum install libmcrypt libmcrypt-devel

No package libmcrypt available.
No package libmcrypt-devel available.

須要安裝EPEL源

安裝第三方源:EPEL源

rpm -ivh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

在線安裝 libmcrypt

yum install  libmcrypt  libmcrypt-devel
相關文章
相關標籤/搜索