最近做的一個項目要部署到阿里雲的ECS上,系統爲centos6.5,部署上去以後以後發現項目無法運行,查看了下php的版本,發現是5.3的,這個也是阿里雲的yum源中的php版本,不支持新項目中 [ ]定義數組的方式,修改代碼代價太大,所以就考慮着替換高版本php,去官網看了下,發現最新版本爲5.6.25,一直也沒機會整理一下,藉此次機會,整理一下編譯的步驟.(比較多,建議ctrl+s弄下來慢慢看) 如僅僅是想查詢具體的編譯安裝方式
或者擴展安裝 可以直接拉到最下面去 本文將會持續整理
下面是傳送門
第一部分 基本參數詳解
>>傳送門<<
第二部分 內置擴展與依賴包詳解
>>傳送門<<
第三部分 三方擴展詳解
第四部分 常用安裝步驟
注意
本文比較長,所列出的絕大部份東西實際學習中基本不會接觸 爲了方便學習 將按使用程度標出 紅色標註的區域爲重要部分 綠色爲可選
需要說明的是 --enable --disable --with --without參數 開關擴展都是通過這幾個參數指定的 後邊我會詳細講解
第二部分 擴展與依賴包
說明:php的源碼包中包含了內置擴展 就在安裝包內的ext文件夾中 有興趣的可以自己去看下
在編譯時直接指定參數即可 但是部分擴展需要依賴與額外的第三方依賴包 比如最常見的gd(圖像處理)擴展等.
如果你已經安裝過php 想查看你安裝過程中指定安裝了哪些擴展 可以使用如下命令
php -i | grep configure
補充一句 老鳥直接忽略 如果提示php command not found 或者不是指定的內置命令 請切換到你的php安裝目錄的bin目錄下執行
./php -i | grep configure
例:輸出如下
Configure Command => './configure' '--prefix=/usr/local/php' '--with-config-file-path=/etc/php'
'--enable-fpm' '--enable-pcntl' '--enable-mysqlnd' '--enable-opcache' '--enable-sockets'
'--enable-sysvmsg' '--enable-sysvsem' '--enable-sysvshm' '--enable-shmop'
'--enable-zip' '--enable-ftp' '--enable-soap' '--enable-xml' '--enable-mbstring'
'--disable-rpath' '--disable-debug' '--disable-fileinfo' '--with-mysql=mysqlnd'
'--with-mysqli=mysqlnd' '--with-pdo-mysql=mysqlnd' '--with-pcre-regex'
'--with-iconv' '--with-zlib' '--with-mcrypt' '--with-gd' '--with-openssl'
'--with-mhash' '--with-xmlrpc' '--with-curl' '--with-imap-ssl'
然後就可以查看你是否安裝了指定的擴展 有些參數是默認開啓的 所以你你編譯時可以不去指定
## 擴展選項設置 ##
此處是一些內置擴展的總體配置 不熟悉的話請直接忽略
--with-EXTENSION=shared,[path] 將擴展安裝爲共享方式 第二個參數指定擴展的路徑
--disable-all 禁用所有擴展
--with-regex= 使用正則表達式安裝指定擴展 這個一般別指定哈 除非 算了 沒有除非
## 無需依賴的擴展 ##
以下內置擴展無需額外的依賴包 可以直接通過編譯參數指定是否安裝 前面說過 有些擴展時默認開啓的 但有些需要你自己去手動指定開啓狀態
--with-pcre-regex
開啓正則表達式支持 可以開啓preg系類函數 php 5.3.0 起這個擴展不能被禁用 因此它總是存在的 但它仍然可以通過--with-pcre-regex=dir 指定 一個外部的 PCRE 庫進行編譯
--enable-mbstring
在你操作(trim、split、splice 等等)多字節編碼的字符串的時候,由於在這種編碼方案下,兩個或多個連續字節可能只表達了一個字符,所以你需要使用專門的函數 比如你trim一箇中文字符串 mbstring 提供了針對多字節字符串的函數 能夠幫你處理PHP中的多字節編碼
--enable-bcmath
開啓高精度數學函數庫 如果你的項目中涉及精度要求極高的運算 請務必開啓此擴展 具體的我不在此做過多詳述
--with-jpeg-dir
打開對jpeg圖片的支持 默認開啓
--with-png-dir
打開對png圖片的支持 默認開啓
--enable-zip
打開對zip的支持 默認開啓
--enable-ftp
打開ftp的支持 默認開啓
--with-bz2
打開對bz2文件的支持 默認開啓
--without-iconv
關閉iconv函數,字符集間的轉換 默認關閉
## 需要外部依賴包的擴展 ##
## libxml2 擴展##
libxml2是一個c語言編寫的xml解析器 用來解析 處理 生成xml 如果你希望你的php可以處理xml 那麼你需要安裝這個依賴文件
yum安裝命令:
yum install libxml2 libxml2-devel
我拿2.2.x版本爲例 源碼安裝:
tar -zxvf libxml2-2.6.20.tar.gz
cd libxml2-2.6.20
./configure --prefitx=/usr/local
make && make install
注意安裝路徑 php要開啓此擴展需要指定此擴展庫的路徑
對應的php編譯參數
--disable-libxml 禁止libxml2擴展
--enable-libxml 開始libxml2擴展支持
--with-libxml-dir=dir 開啓libxml2的支持 dir參數爲對應的libxml依賴庫的安裝路徑 如果是yum安裝或者未指定安裝路徑則不需要制定此參數
## openssl擴展 ##
openssl是一個強大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協議.常見的比如https加密 git密鑰生成 這個擴展庫在大多數liunx內核系統上都是自帶的 可以使用命令查詢下自己有沒有安裝
openssl version -a
如果沒有
yum安裝命令
yum install openssl openssl-devel
源碼安裝 建議安裝兩次,shared 作用是生成動態連接庫
wget ftp://ftp.openssl.org/source/openssl-1.0.0c.tar.gz
tar -zxf openssl-1.0.0c.tar.gz
cd openssl-1.0.0c/
./config --prefix=/usr/local --openssldir=/usr/local/ssl
make && make install
./config shared --prefix=/usr/local --openssldir=/usr/local/ssl
make clean
make && make install
## zlib擴展 ##
zlib是提供數據壓縮用的函式庫
yum安裝命令
yum install zlib zlib-devel
源碼安裝 以1.2.5版本爲例
<strong>wget http://zlib.net/zlib-1.2.5.tar.gz
tar -zxf zlib-1.2.5.tar.gz
cd zlib-1.2.5/
./configure --prefix=/usr/local
make && make install</strong>
編譯參數
--with-zlib=dir 指定zlib的安裝路徑
--with-zlib-dir=dir 與上述作用相同
注:gd庫將需要這個依賴包 詳見gd庫的安裝
以下3個擴展都不是php所需的包 但由於php的gd擴展需要依賴於這3個包 所以也就附上了
## libpng擴展 ##
如名,這個擴展是用來處理png圖片的
yum安裝
yum install libpng libpng-devel
源碼安裝
tar -zxvf libpng-1.2.18.tar.gz
cd libpng-1.2.18
cp scripts/makefile.linux makefile
make
make install
這裏的makefile不是用./configure生成,而是直接從scripts/裏拷一個
注:gd庫將需要這個依賴包 詳見gd庫的安裝
## libjpeg擴展 ##
處理jpg圖片用的 不多說
yum安裝
yum install libjpeg libjpeg-devel
源碼安裝
<strong>tar -zxvf jpegsrc.v6b.tar.gz
cd jpeg-6b/
./configure --prefix=/usr/local/jpeg6 --enable-shared
cp /usr/bin/libtool ./
mkdir /usr/local/man/man1
make
mkdir /usr/local/jpeg6
mkdir -p /usr/local/jpeg6/include
mkdir -p /usr/local/jpeg6/lib
mkdir -p /usr/local/jpeg6/bin
mkdir -p /usr/local/jpeg6/man/man1
make install-lib
make install</strong>
這裏configure一定要帶--enable-shared參數 不然不會生成共享庫這個jpeg軟件一般默認安裝 不指定路徑的話 應該很順利的 但是如果指定安裝目錄後 就需要我們手動創建很多目錄
注:gd庫將需要這個依賴包 詳見gd庫的安裝
## freetype擴展 ##
FreeType是一個完全開源的 可擴展 可定製且可移植的字體引擎 它提供統一的接口來訪問多種字體格式文件
yum安裝
yum install freetype freetype-devel
源碼安裝
tar -zxvf freetype-2.4.8.tar.gz
cd freetype-2.4.8
./configure --prefix=/usr/local/freetype
make
make install
注:gd庫將需要這個依賴包 詳見gd庫的安裝
## GD 擴展 ##
gd庫依賴4個額外庫 分別是 zlib libpng libjpeg freetype 要先安裝這幾個包以後才能安裝gd yum安裝除外
yum安裝
yum install php-gd
yum安裝的會自己去解決依賴關係源碼安裝 需要指定4個依賴庫位置
tar zxvf gd-2.0.35.tar.gz
cd gd-2.0.35
./configure
--prefix=/usr/local/gd
--with-zlib=/usr/local/zlib/
--with-png --with-freetype=/usr/local/freetype/
--with-jpeg=/usr/local/jpeg6/
make && make install
對應的編譯命令
--with-gd
## curl 擴展 ##
curl是利用URL語法在命令行方式下工作的開源文件傳輸工具.
yum安裝:
yum install curl libcurl-devel
源碼安裝
wget http://curl.haxx.se/download/curl-7.17.1.tar.gz
tar -zxf curl-7.17.1.tar.gz
cd curl-7.17.1
./configure
make
make install
編譯時指定參數 另外比較新版本的php將curl包含在源碼包中 ext目錄下 安裝時可以直接
--with-curl 安裝
源碼或者一些比價古老版本的需要使用
--with-curl= 指定curl安裝路徑
未完 持續整理中...