php5共存php7

來源:互聯網
上載者:User

標籤:adb   product   系統   redis   mcrypt   cgi   錯誤提示   解決方案   提示   

PHP7與PHP5共存於CentOS7

原文參考

原理

思路很簡單:PHP5是通過yum安裝的在/usr/,通訊端在/var/run/php-fpm.socket,PHP7自己編譯裝在/usr/local/php7,通訊端在/var/run/php7-fpm.socket,nignx根據應用需要跑的環境指定fastcgi_pass。
或者兩個不同的連接埠,一個使用預設的9000,一個使用9002

編譯並安裝PHP7

yum安裝編譯需要的各種依賴包

    yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel -y

接著到官網下載最新的PHP源碼,解壓

    cd ~    wget http://am1.php.net/distributions/php-7.1.8.tar.gz    tar xvf  php-7.1.8.tar.gz    cd php-7.1.8

然後設定編譯參數,這裡有幾個事情要提一下:

  1. 為了減少後續因為許可權導致的問題,建議將nginx和php-fpm用相同的使用者和使用者組即(--with-fpm-user=nginx --with-fpm-group=nginx)
  2. 為了減少多網卡等複雜網路環境造成的問題,在不使用ipv6網路的情況下關閉ipv6的支援(--disable-ipv6)。 根據自己的情況選擇
  3. 開啟mysql資料庫的API擴充(--with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd )
  4. 開啟opcache擴充(--enable-opcache)

完整的編譯參數:

    ./configure     --prefix=/usr/local/php7     --with-config-file-path=/usr/local/php7/etc     --with-config-file-scan-dir=/usr/local/php7/etc/php.d/     --disable-ipv6      --enable-fpm     --with-fpm-user=nginx      --with-fpm-group=nginx     --enable-inline-optimization     --disable-debug     --disable-rpath     --enable-shared      --enable-soap     --with-libxml-dir     --with-xmlrpc     --with-openssl     --with-mcrypt     --with-mhash     --with-pcre-regex     --with-sqlite3     --with-zlib     --enable-bcmath     --with-iconv     --with-bz2     --enable-calendar     --with-curl     --with-cdb     --enable-dom     --enable-exif     --enable-fileinfo     --enable-filter     --with-pcre-dir     --enable-ftp     --with-gd     --with-openssl-dir     --with-jpeg-dir     --with-png-dir     --with-zlib-dir      --with-freetype-dir     --enable-gd-native-ttf     --enable-gd-jis-conv     --with-gettext     --with-gmp     --with-mhash     --enable-json     --enable-mbstring     --enable-mbregex     --enable-mbregex-backtrack     --with-libmbfl     --with-onig     --enable-pdo     --with-mysqli=mysqlnd     --with-pdo-mysql=mysqlnd     --with-zlib-dir     --with-pdo-sqlite     --with-readline     --enable-session     --enable-shmop     --enable-simplexml     --enable-sockets      --enable-sysvmsg     --enable-sysvsem     --enable-sysvshm     --enable-wddx     --with-libxml-dir     --with-xsl     --enable-zip     --enable-mysqlnd-compression-support     --with-pear     --enable-opcache

設定檢查通過之後就是喜聞樂見的make和make install了,有興趣的可以在make install之前make test一下。

PS: make test很耗費時間,但其實跟make install差不多,在make test後,直接make install很快

配置PHP7

    cp php.ini-production /usr/local/php7/etc/php.ini    cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf    cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf

修改相應的設定檔(根據需求修改),下面是配置時區

date.timezone ="Asia/Shanghai"

a.centos7版本開機檔案的修改

make install無錯安裝成功之後就開始進行配置,首先將預設配置複製到指定位置

    cp -R ./sapi/fpm/php-fpm.service /usr/lib/systemd/system/php7-fpm.service
/usr/lib/systemd/system/php7-fpm.service

修改相應路徑就好了。。。我也沒有測試

b.centos6版本開機檔案的修改

    cp -R ./sapi/fpm/init.d.php-fpm /etc/init.d/php7-fpm  # 這樣啟動的時候名字不會衝突    chmod +x /etc/init.d/php7-fpm

修改啟動項名稱vi /etc/init.d/php7-fpm

    prefix=/usr/local/php7    exec_prefix=${prefix}        php_fpm_BIN=${exec_prefix}/sbin/php7-fpm    php_fpm_CONF=${prefix}/etc/php7-fpm.conf    php_fpm_PID=${prefix}/var/run/php7-fpm.pid

添加開機啟動,建立軟連

chkconfig --add php7-fpmchkconfig php7-fpm  on  # 這兩步根據需要選擇ln -s  /usr/local/php7/bin/php  /usr/bin/php

啟動php7-fpm

centos7

    systemctl enable php7-fpm.service    systemctl start  php7-fpm.service

centos6

    sudo /etc/init.d/php7-fpm restart
編譯報錯處理
# 找到類似的報錯libiconv_open,因為內容找不到了PHP7 編譯安裝時碰到 undefined reference to `libiconv_open‘ 問題解決方案  系統內容centos6.7make install 的時候遇到錯誤:ext/gd/libgd/.libs/gdkanji.o: In function `do_convert‘:/root/src/php-7.1.3/ext/gd/libgd/gdkanji.c:349: undefined reference to `libiconv_open‘/root/src/php-7.1.3/ext/gd/libgd/gdkanji.c:364: undefined reference to `libiconv‘/root/src/php-7.1.3/ext/gd/libgd/gdkanji.c:380: undefined reference to `libiconv_close‘ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_dtor‘:/root/src/php-7.1.3/ext/iconv/iconv.c:2565: undefined reference to `libiconv_close‘ext/iconv/.libs/iconv.o: In function `php_iconv_stream_filter_ctor‘:/root/src/php-7.1.3/ext/iconv/iconv.c:2591: undefined reference to `libiconv_open‘ext/iconv/.libs/iconv.o: In function `_php_iconv_strlen‘:/root/src/php-7.1.3/ext/iconv/iconv.c:754: undefined reference to `libiconv_open‘/root/src/php-7.1.3/ext/iconv/iconv.c:778: undefined reference to `libiconv‘/root/src/php-7.1.3/ext/iconv/iconv.c:812: undefined reference to `libiconv_close‘解決方案:vim Makefile,添加"-liconv":結果如下所示:EXTRA_LIBS = -lcrypt -lresolv -lcrypt -lrt -lpng -lz -lcurl -lz -lrt -lm -ldl -lnsl -lxml2 -lz -lm -ldl -lcurl -lxml2 -lz -lm -ldl -lxml2 -lz -lm -ldl -lcrypt -lxml2 -lz -lm -ldl -lxml2 -lz -lm -ldl -lxml2 -lz -lm -ldl -lcrypt -liconv再次 make install 通過
安裝擴充模組mysql模組

由於PHP從5.x開始,PHP串連MYSQL無論使用哪種方式都是使用的mysqlnd驅動,且PHP7已經正式移除了mysql擴充,由於新特性的原因,PHP7針對資料庫主機地址為localhost和127.0.0.1時分別會採用unix domain socket和TCP/IP兩種不同的方式串連MySQL服務。

而採用unix domain socket方式時PHP7會使用預設的/tmp/mysql.sock作為通訊端,但是CentOS7預設MySQL服務MariaDB的通訊端位置為/var/lib/mysql/mysql.sock,於是即使是所有資料庫連接資訊都正確的情況下也會出現諸如“mysqli::real_connect(): (HY000/2002): No such file or directory ” 和 “Error establishing a database connection”之類的錯誤提示。

不過我們公司使用的是--with-pdo-mysql=mysqlnd 所以沒有出現mysql串連問題,這裡給遇到的同學一個連結php7_mysql擴充模組安裝

redis模組

1.git clone:

git clone  https://github.com/phpredis/phpredis.git

官網:https://github.com/phpredis/phpredis

切換分支:

git checkout -b php7 origin/php7

2.檢查PHP擴充

/usr/local/php7/bin/phpize  # 根據個人路徑來,如果是php5的擴充模組就不是這個結果了

3.建立編譯串連、安裝

./configure --with-php-config=/usr/local/php7/bin/php-configmakemake testmake install

4.檢查so檔案

cd /usr/local/php7/lib/php/extensions/no-debug-non-zts-20160303  # 這裡的家目錄不一樣,主要是還是最後一級目錄名稱ls

5.修改php.ini

vi /usr/local/php7/etc/php.ini添加:extension="redis.so"

6.檢查模組

php7 -m |grep redis# php -m是檢查擴充模組的

如果有redis則表示正常

7.重啟php-fpm

sudo /etc/init.d/php7-fpm restart
nginx 配置

對應的php啟動不同的連接埠,或者socket模式,

# fastcgi_pass  unix:/var/run/php7-fpm.socket;fastcgi_pass fastcgi_pass   127.0.0.1:9002;

php5共存php7

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.