小白安裝PHP7

小白安裝PHP7

原文地址:https://github.com/wanguowan/notetext-blog/blob/master/php7.md

目錄

系統說明
1. 下載源碼包
2. apt命令
3. PHP安裝前系統包安裝
3.1 安裝bison
3.2 安裝re2c
4. 擴展說明
5. 編譯安裝PHP7
5.1 最終編譯參數
5.2 過程中擴展包依賴錯誤及對應安裝
5.3 編譯
5.4 配置
5.5 驗證
總結

系統說明

操作系統:Ubuntu 14.04.4 LTS (GNU/Linux 3.13.0-86-generic x86_64)
PHP版本:PHP-7.0.13

下載源碼包

因爲小白安裝,所以各種查詢,最終在php.net找到版本說明及下載地址

選擇中國的下載地址進行下載,在服務器上執行下面命令下載

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

下載完成後重命名並解壓

$ mv mirror php7.tar.gz
$ tar zxvf php7.tar.gz

因爲自己沒有編譯安裝過PHP,純小白,所以流程參考網上,鏈接如下

安裝PHP7
php.net UNIX系統下的安裝

但是對於各種參數,感覺完全按照流程安裝下來,沒有什麼收穫,所以對比網友安裝過程及官網中標註的安裝前的依賴包進行安裝

apt命令

後面安裝系統庫需要使用apt命令,基本使用方法如下,詳情請參考apt

apt-get install <libname>       //  安裝包
apt update                      //  更新源
apt-cache search <libname>      //  查找包

PHP安裝前系統包安裝

bison是什麼鬼,re2c是什麼鬼,php.net中說明編譯需要這兩個包。上網查了一番,原來bison與re2c是php的語法分析器.[詳情] [bison]

知道bison和re2c是做什麼用的之後,開始安裝

安裝bison

命令:

wan@hostname:~/php-7.0.13$ apt-cache search bison

wan@hostname:~/php-7.0.13$ sudo apt-get install bison

安裝完後立馬查看bison版本,查看是否安裝成功

wan@hostname:~/php-7.0.13$ bison --help

wan@hostname:~/php-7.0.13$ bison -V 
bison (GNU Bison) 3.0.2
Written by Robert Corbett and Richard Stallman.

Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

安裝re2c

命令:

wan@hostname:~/php-7.0.13$ apt-cache search re2c

wan@hostname:~/php-7.0.13$ sudo apt-get install re2c

根據參考中網友安裝過程,不安裝gcc,安裝re2c會報錯,說好的報錯呢,難道系統已經有gcc了?果斷命令:

wan@onlywan:~/php-7.0.13$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.8/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.8.4-2ubuntu1~14.04.1' --with-bugurl=file:///usr/share/doc/gcc-4.8/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.8 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.8 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-libmudflap --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.8-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.8-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.8.4 (Ubuntu 4.8.4-2ubuntu1~14.04.1)

這下就放心了。
下一步,研究擴展,其他php.net中說的環境如果有報錯,再安裝也不遲

擴展說明

前一段時間公司測試服務器搭建一個工程,使用laravel框架,composer install的時候,報出一個缺少依賴包的錯誤,細節忘了,大概記得缺少fileinfo依賴。小白我第一次安裝擴展呀,擺好姿勢,各種興奮,可以搞點以前沒搞過的了。各種查詢,結果安裝fileinfo。然後各種被虐:pecl安裝擴展有warning,結果make失敗;然後去pecl官網,下載源碼,一路下來,make還是報錯。然後懷疑是pecl warning的問題,然後各種查詢,解決了warning的問題,重新來,make還是報錯。查詢過程中,看到有人說在php源碼中編譯安裝擴展。最後發現root用戶目錄下有源碼,然後進入到源碼中,抱着試一試的心態,竟然成功了。這麼簡單的事情,竟然搞了快一下午。

有了上面的經歷,決定一次性準備好所有可能需要的擴展

開始研究擴展(所謂研究就是對着參考的大神的列表,一個一個研究是幹啥用的)

–with-config-file-path=PATH

Set the path in which to look for php.ini [PREFIX/lib]

–with-mcrypt

加密支持擴展庫詳情

mysql數據庫連接擴展

–with-mysql=mysqlnd
–with-mysqli=mysqlnd
–with-pdo-mysql=mysqlnd

wan@hostname:~/php-7.0.13$ ./configure --help | grep mysql   
  --with-mysqli=FILE      Include MySQLi support.  FILE is the path
                          to mysql_config.  If no value or mysqlnd is passed   
  --enable-embedded-mysqli   
  --with-mysql-sock=SOCKPATH   
  --with-pdo-mysql=DIR    PDO: MySQL support. DIR is the MySQL base directory
                          If no value or mysqlnd is passed as DIR, the
  --enable-mysqlnd        Enable mysqlnd explicitly, will be done implicitly
  --disable-mysqlnd-compression-support
                          Disable support for the MySQL compressed protocol in mysqlnd
  --with-zlib-dir=DIR     mysqlnd: Set the path to libz install prefix

其中–with-mysql在PHP7中已經廢棄。
而兩外兩個配置中使用的mysqlnd,

查詢mysqlnd是什麼,原來是zend自己開發的mysql驅動,來避免可能存在的版權問題,而且貌似還更快 詳情

果斷使用mysqlnd

–with-gd

php處理圖形的擴展庫詳情

–with-iconv

文件編碼轉化庫詳情

–with-zlib

數據壓縮用的函式庫詳情

–enable-bcmath

科學計算包

–enable-shmop

PHP讀寫創建刪除UNIX共享內存段詳情

–enable-sysvsem

PHP進程信號控制詳情

–enable-inline-optimization

無該配置。默認開啓;對應有關閉配置 –disable-inline-optimization

–enable-mbregex

多字節正則功能 multibyte regex support
無該配置。默認開啓;對應有關閉配置 –disable-mbregex

–enable-mbstring

Enable multibyte string support
在計算中文字符串長度的時候,使用過~

–enable-gd-native-ttf

GD: Enable TrueType string function
TrueType一種字體,中文名稱全真字體 詳情

–enable-pcntl

PHP進程控制詳情

–enable-sockets

Enable sockets support

–enable-xml

無該配置。默認開啓該功能 –disable-xml
XML support

–with-xmlrpc=DIR

Include XMLRPC-EPI support

–enable-zip

Include Zip read/write support

–enable-soap

Enable SOAP support
簡單對象訪問協議[Simple Object Access Protocol]詳情

–without-pear

Do not install PEAR
貌似一個管理擴展工具,不是很清楚,感覺沒啥用詳情

–with-gettext=DIR

Include GNU gettext support
GNU Gettext 開源多語組件詳情

–enable-session

無該配置;默認支持 –disable-session Disable session support

–with-curl=DIR

Include cURL support
利用URL語法在命令行方式下工作的開源文件傳輸工具詳情

–with-jpeg-dir=DIR

GD: Set the path to libjpeg install prefix

–with-freetype-dir

字體引擎詳情

–enable-opcache

無此配置,php opcache默認打開 關閉參數–disable-opcache Disable Zend OPcache support
opcache詳情

編譯安裝PHP7

最終編譯參數

wan@hostname:~/php-7.0.13$ ./configure --prefix=/usr/local/php7 \
--with-config-file-path=/usr/local/php7/etc \
--with-mcrypt=/usr/include \
--enable-mysqlnd \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-gd \
--with-iconv \
--with-zlib \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--enable-gd-native-ttf \
--with-openssl \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--without-pear \
--with-gettext \
--enable-session \
--with-curl \
--with-jpeg-dir \
--with-freetype-dir

過程中擴展包依賴錯誤及對應安裝

錯誤:

configure: error: xml2-config not found. Please check your libxml2 installation.

解決方法:

wan@hostname:~/php-7.0.13$ apt-cache search libxml2
wan@hostname:~/php-7.0.13$ sudo apt-get install libxml++2.6-dev

錯誤:

configure: error: Cannot find OpenSSL’s

wan@hostname:~/php-7.0.13$ apt-cache search openssl
wan@hostname:~/php-7.0.13$ sudo apt-get install openssl
wan@hostname:~/php-7.0.13$ sudo apt-get install pkg-config
wan@hostname:~/php-7.0.13$ sudo apt-get install libssl-dev

錯誤:

configure: error: Please reinstall the libcurl distribution -
easy.h should be in /include/curl/

解決方法:

wan@hostname:~/php-7.0.13$ sudo apt-get install curl

錯誤

configure: error: Please reinstall the libcurl distribution -
easy.h should be in /include/curl/

解決方法:

wan@hostname:~/php-7.0.13$ sudo apt-get install libcurl4-gnutls-dev

錯誤

configure: error: jpeglib.h not found.

解決方法:

wan@hostname:~/php-7.0.13$ sudo apt-get install libjpeg-dev

錯誤

configure: error: png.h not found.

解決方法:

wan@hostname:~/php-7.0.13$ sudo apt-get install libpng++-dev

錯誤

configure: error: freetype-config not found.

解決方法:

wan@hostname:~/php-7.0.13$ sudo apt-get install libfreetype6-dev

錯誤

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

解決方法:

wan@hostname:~/php-7.0.13$ sudo apt-get install libmcrypt-dev

經過半天折騰終於看到了
Thank you for using PHP.

編譯

wan@hostname:~/php-7.0.13$ make && sudo make install

配置

wan@hostname:~/php-7.0.13$ cp php.ini-production /usr/local/php7/etc/php.ini  
wan@hostname:~/php-7.0.13$ cp sapi/fpm/init.d.php-fpm /etc/init.d/php7-fpm  
wan@hostname:~/php-7.0.13$ chmod +x /etc/init.d/php7-fpm  
wan@hostname:~/php-7.0.13$ cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf  
wan@hostname:~/php-7.0.13$ cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf
wan@hostname:~/php-7.0.13$ cd /usr/local/bin
wan@hostname:~/php-7.0.13$ sudo ln -s ../php7/bin/php

驗證

wan@hostman:~$ php -v
PHP 7.0.13 (cli) (built: Nov 19 2016 17:22:48) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

總結

因是第一次安裝,所以各種問題都是解決後記錄,可能有些細節忘記記錄。也可能有些解決方法不正確等等,還望大家指正,多多交流。

整個過程花費很長時間,包括整理這片文章,感謝那些在網上分享自己經驗的人

後續會繼續研究配置nginx,fpm,mysql等。如果感興趣,可以繼續關注後面的記錄

歡迎添加公衆號:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章