小白安裝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,純小白,所以流程參考網上,鏈接如下
但是對於各種參數,感覺完全按照流程安裝下來,沒有什麼收穫,所以對比網友安裝過程及官網中標註的安裝前的依賴包進行安裝
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等。如果感興趣,可以繼續關注後面的記錄
歡迎添加公衆號: