php編譯安裝參數說明 php
一、php編譯安裝的基本步驟 html
//首先要下載一個php的安裝包,例如:php-5.6.25.tar.gz, mysql
tar zxvf php-5.6.25.tar.gz // 解壓php安裝包,獲得一個php-5.6.25的文件夾 linux
cd php-5.6.25 nginx
./configure //對php的安裝進行配置,後面要加配置選項 web
# make && make install 正則表達式
//編譯安裝完成以後,須要從解壓後的文件夾中把php.ini-development 算法
//或是 php.ini-production 重命名成php.ini 複製到php安裝文件中的相應位置, sql
//可在phpinfo中查看 相應位置. 數據庫
// 把/usr/local/php/etc/php-fpm.conf.default 複製到當前文件夾下,保存未php-fpm.conf
二、php各參數配置詳解
--prefix=/usr/local/php //指定 php 安裝目錄
--with-apxs2=/usr/local/apache/bin/apxs //整合apache,
//apxs功能是使用mod_so中的LoadModule指令,
//加載指定模塊到 apache,要求 apache 要打開SO模塊
--with-config-file-path=/usr/local/php/etc //指定php.ini位置
--with-MySQL=/usr/local/mysql //mysql安裝目錄,對mysql的支持
--with-mysqli=/usr/local/mysql/bin/mysql_config
//mysqli擴展技術不只能夠調用MySQL的存儲過程、處理MySQL事務,
//並且還可使訪問數據庫工做變得更加穩定。
--enable-safe-mode //打開安全模式
--enable-ftp //打開ftp的支持
--enable-zip //打開對zip的支持
--with-bz2 //打開對bz2文件的支持
--with-jpeg-dir //打開對jpeg圖片的支持
--with-png-dir //打開對png圖片的支持
--with-freetype-dir //打開對freetype字體庫的支持
--without-iconv //關閉iconv函數,各類字符集間的轉換
--with-libXML-dir //打開libxml2庫的支持
--with-XMLrpc //打開xml-rpc的c語言
--with-zlib-dir //打開zlib庫的支持
--with-gd //打開gd庫的支持
--enable-gd-native-ttf //支持TrueType字符串函數庫
--with-curl //打開curl瀏覽工具的支持
--with-curlwrappers //運用curl工具打開url流
--with-ttf //打開freetype1.*的支持,能夠不加了
--with-xsl //打開XSLT 文件支持,擴展了libXML2庫 ,須要libxslt軟件
--with-gettext //打開gnu 的gettext 支持,編碼庫用到
--with-pear //打開pear命令的支持,PHP擴展用的
--enable-calendar //打開日曆擴展功能
--enable-mbstring //多字節,字符串的支持
--enable-bcmath //打開圖片大小調整,用到zabbix監控的時候用到了這個模塊
--enable-sockets //打開 sockets 支持
--enable-exif //圖片的元數據支持
--enable-magic-quotes //魔術引用的支持
--disable-rpath //關閉額外的運行庫文件
--disable-debug //關閉調試模式
--with-mime-magic=/usr/share/file/magic.mime //魔術頭文件位置
三、CGI方式安裝才用的參數:
--enable-fpm //打上PHP-fpm 補丁後纔有這個參數,CGI方式安裝的啓動程序
--enable-fastCGI //支持fastcgi方式啓動PHP
--enable-force-CGI-redirect //重定向方式啓動PHP
--with-ncurses //支持ncurses 屏幕繪製以及基於文本終端的圖形互動功能的動態庫
--enable-pcntl //freeTDS須要用到的,多是連接mssql 纔用到
--with-mcrypt //mcrypt算法的擴展
--with-mhash //mhash算法的擴展
//以上函數庫須要安裝
--with-gmp //應該是支持一種規範
--enable-inline-optimization //優化線程
--with-openssl //openssl的支持,加密傳輸時用到的
--enable-dbase //創建DBA 做爲共享模塊
--with-pcre-dir=/usr/local/bin/pcre-config //perl的正則庫案安裝位置
--disable-dmalloc
--with-gdbm //dba的gdbm支持
--enable-sigchild
--enable-sysvsem
--enable-sysvshm
--enable-zend-multibyte //支持zend的多字節
--enable-mbregex
--enable-wddx
--enable-shmop
--enable-soap
四、注意事項
指定了--with-apxs2=/usr/local/apache/bin/apxs之後,就不要再激活--enable-fpm和--enable-fastCGI,apxs是以php module的模式加載PHP的。
Mysql在編譯了Mysql開發library之後,能夠不用指定mysql的路徑。
PHP編譯存在基礎的依賴的關係,編譯PHP首先須要安裝XML擴展,由於php5核心默認打開了XML的支持,其餘的基礎庫,相應須要:GD -> zlib, Png, Jpg, 若是須要支持其餘,仍須要根據實際狀況編譯擴展庫,ttf庫須要freetype庫的支持。
--enable-magic-quotes,是一個極其不推薦的參數,固然,若是你須要PHP爲你作這些底下的工做,實際上他也沒有很完全的解決問題。
--with-openssl,須要openssl庫。mysqli是MySQL團隊提供的MySQL驅動,具備不少實用的功能和典型特徵。不過他不是MySQL於PHP平臺最好的選擇,PDO被證明,是一個簡易、高併發性,並且易於建立和回收的標準接口。不過PDO也經歷了5.3之前的內存溢出的問題,在5.3之後,在讀取Oracle的LOB資源時,若不對內存進行限制,仍會內存溢出。
若是是產品模式,好像pear、shmop、ftp等,都不推薦使用,他們要作的事情,用C/C++,用Java,甚至其餘腳本語言,都有很好很快速的選擇,無需侷限於使用PHP去實現。不熟悉的類庫和不經常使用的庫,也不推薦使用。magic-quote、session.auto_start、PHP服務器信息、PHP報錯信息等在編譯完成後,應該第一時間關閉,避免暴露服務器信息。
PHP對應的Web Server模式,Module、fastcgi、fpm只須要一種便可,服務器不是你的試驗田。fastcgi能夠選擇Nginx和lighttpd,其實Nginx也是使用lighttpd的spwan-fcgi進行fcgi進程管理的。fpm是使用PHP自身去管理多進程,有點相似一個後端代理。不管什麼模式,在發佈產品服務器,都應該作進程和線程調優,作足夠多的壓力測試,找出最好的進程數組合。
選好一種PHP OPCode cache的擴展,這個也是很重要的,linux 2.6核心下,fcgi下,xcache有較好的實踐經驗,其餘的在併發數增長之後,性能衰減嚴重。
若是真的想體驗,寧肯編譯多幾個PHP版本,也不要針對一個版本的PHP集合各類擴展,適應各類環境,這會讓把你本身逼進窘境的。
五、須要單獨安裝的擴展
gd庫。
ming的擴展。
mhash和mcrypt的擴展
六、其餘模塊
詳細選項上,除了上述的安裝簡介外,也能夠在編譯時加入其它的選項。
apache 模塊
語法: --with-apache=DIR
說明: 用本選項可讓 **PHP
** 以apache的模塊方式使用,DIR 的字符串能夠是 /usr/local/apache 或其它安裝apache的目錄
範例: --with-apache=/var/lib/apache
fhttpd 服務器模塊
語法: --with-fhttpd=DIR
說明: 若使用 fttpd 服務器,可使用本指令編譯 PHP。用模塊的方式配合 fttpd 服務器,能夠有較好的效率。
Adabas D 數據庫
語法: --with-adabas=DIR
說明: 數據庫系統爲 Adabas D 數據庫時須要加本選項。關於 Adabas D 數據庫的細節,能夠參考 http://www.adabas.com。
範例: --with-adabas=/usr/local/adabasd
dBase 資料表
語法: --with-dbase
說明: 只要加本選項,不用其它的參數或函數庫,PHP 就會讓系統有存取 dBase 資料表的功能。
filePro 數據庫
語法: --with-filepro
說明: 不用指定數據庫路徑及其它函數庫等,能夠讀取 filePro 數據庫 (惟讀)。
mSQL 數據庫
語法: --with-msql=DIR
說明: 提供存取 mSQL 數據庫。更多的細節請參考 mSQL 的網站 http://www.hughes.com.au。
範例: --with-msql=/usr/local/Hughes
MySQL 數據庫
語法: --with-mysql=DIR
說明: 提供存取 MySQL 數據庫。更多的細節請參考 MySQL 的網站 http://www.tcx.se。
範例: --with-mysql=/usr/local/mysql
iODBC 數據庫裝置
語法: --with-iodbc=DIR
說明: 提供 ODBC 數據庫裝置,用來存取後端數據庫。更多的細節請參考 iODBC 的網站 http://www.iodbc.org。
範例: --with-iodbc=/usr/local/iodbc
OpenLink ODBC 數據庫裝置
語法: --with-openlink=DIR
說明: 使用 OpenLink ODBC 數據庫裝置,用來存取後端數據庫。更多的細節請參考 OpenLink ODBC 的網站 http://www.openlinksw.com。
範例: --with-openlink=/usr/local/openlink
Oracle 數據庫
語法: --with-oracle=DIR
說 明: 使用 Oracle 數據庫。Oracle 的版本要在 7.3 版以上。您也能夠在 PHP 程序中使用環境變量 ORACLE_HOME 來指定 Oracle 的路徑。更多有關 Oracle 的信息請參考 Oracle 的網站 http://www.oracle.com。
範例: --with-oracle=/export/app/oracle/product/7.3.2
PostgreSQL 數據庫
語法: --with-pgsql=DIR
說 明: 使用 PostgreSQL 數據庫。更多有關 PostgreSQL 的信息請參考 PostgreSQL 的網站 http://www.postgreSQL.org 或臺灣的 Mirror 站 http://postgresql.ccit.edu.tw。
範例: --with-pgsql=/usr/local/pgsql
Solid 數據庫
語法: --with-solid=DIR
說明: 使用 Solid 數據庫。更多有關 Solid 的信息請參考 Solid 的網站 http://www.solidtech.com。
範例: --with-solid=/usr/local/solid
Sybase 數據庫
語法: --with-sybase=DIR
說明: 使用 Sybase 數據庫。更多有關 Sybase 的信息請參考 Sybase 的網站 http://www.sybase.com。
範例: --with-sybase=/home/sybase
Sybase-CT 數據庫
語法: --with-sybase-ct=DIR
說明: 使用 Sybase-CT 數據庫。
範例: --with-sybase-ct=/home/sybase
Velocis 數據庫
語法: --with-velocis=DIR
說明: 使用 Velocis 數據庫。有關 Velocis 數據庫的進一步資料請參考 Raima 公司的網站 http://www.raima.com。
範例: --with-velocis=/usr/local/velocis
自訂 ODBC 數據庫驅動程序
語法: --with-custom-odbc=DIR
說明: 使用自訂的 ODBC 函數庫。固然,在使用本方式時要指定 CUSTOM_ODBC_LIBS 及 CFLAGS 變量。例如在 QNX 機器上使用 Sybase **SQL
** Anywhere 時可能要配置系統環境變量 CFLAGS=-DODBC_QNX、LDFLAGS=-lunix 及 CUSTOM_ODBC_LIBS="-ldblib -lodbc",並要在 PHP 配置加入 --with-custom-odbc=/usr/lib/sqlany50
範例: --with-custom-odbc=/usr/local/odbc
不使用 ODBC 數據庫驅動程序
語法: --disable-unified-odbc
說 明: 使用本選項將使全部的 ODBC 數據庫驅動程序不做用。本選項不用指定路徑,而受本選項影響的選項有 --with-iodbc、--with-solid、--with-adabas、--with-velocis 及 --with-custom-odbc。
LDAP 目錄協議
語法: --with-ldap=DIR
說明: 若要使用目錄協議 (Lightweight Directory Access Protocol, LDAP) 則必需要打開本選項。有關 LDAP 的細節,能夠參考 RFC 文件的 RFC1777 及 RFC1778。
範例: --with-ldap=/usr/local/ldap.
mcrypt 編碼函數庫
語法: --with-mcrypt=DIR
說明: 當安裝了 mcrypt 函數庫後,可在編譯 PHP 時加入本選項,讓程序可使用編解碼功能。
範例: --with-mcrypt=/usr/local/include
Sys V 信號
語法: --enable-sysvsem
說明: 要使用 SysV 的信號 (semaphores) 機制,則要打開本選項。
XML 支持
語法: --with-xml
說明: 打開本選項能夠支持 James Clark's 寫的 XML 解析程序庫。
維護模式
語法: --enable-maintainer-mode
說明: 本選項通常不會打開,除非是 PHP 開發人員比較有用。
正則表達式程序庫
語法: --with-system-regex
說明: 若您須要額外的正則表達式功能,能夠加入本選項。
PHP 配置文件
語法: --with-config-file-path=DIR
說明: 用來指定 php3.ini 或 php4.ini 的路徑,供 PHP 初始化時使用。
範例: --with-config-file-path=/usr/local/lib
PHP 執行路徑
語法: --with-exec-dir=DIR
說明: 有時爲了系統的安全性考慮,會指定 PHP 程序必定要在哪一個目錄執行。
範例: --with-exec-dir=/usr/local/bin
調試模式
語法: --enable-debug
說明: 本選項通常不會使用,除非在開發 PHP 程序時比較有用。它能夠顯示額外的錯誤信息。
安全模式
語法: --enable-safe-mode
說明: 默認值是打開的,能夠對系統安全提供比較多的保護。
變量追蹤
語法: --enable-track-vars
說明: 讓 PHP 能 追蹤 HTTP_GET_VARS、HTTP_POST_VARS 及 HTTP_COOKIE_VARS 三個變量,通常是打開的。
自動加引入字符
語法: --enable-magic-quotes
說明: 可以讓程序在執行時自動加入反斜線的引入字符。
打開調試器
語法: --enable-debugger
說明: 打開內建的 PHP 調試器。目前本功能還在實驗階段,還沒有成熟。
取消路徑 (discard path)
語法: --enable-discard-path
說明: 打開這個選項,**用戶
**就不能透過瀏覽器讀取 .htaccess 等和系統安全相關的文件。
高精確度數學函數
語法: --enable-bcmath
說明: 打開高精確度函數。必需要先安裝本函數庫,本選項方有效。
強制 CGI 重定向
語法: --enable-force-cgi-redirect
範 例: 若使用 CGI VERSION 模式來執行 PHP 的設,打開本選項會增長安全性。例如用戶讀 http://my.host/cgi-bin/php/secret/doc.html 遇到比較瞭解 PHP 系統的黑客級用戶可能會自已輸入如下網址 http://my.host/secret/doc.html 來讀取相關信息。若 PHP 和 Apache 編譯在一塊兒,讓 PHP 變成 Apache 的一部份,則不須要加入本選項。
不使用短的標記
語法: --disable-short-tags
說明: 配置本選項後,PHP 的程序就不能使用短的標記,必定要用的長標記。
引入遠端檔寧
語法: --enable-url-includes
說明: 配置本選項可以讓 PHP 程序能夠引入 (include) 遠端的 HTTP 或 FTP 服務器中的文件。
關閉語法效果
語法: --disable-syntax-hl
說明: 使用本選項會關閉 PHP 語法的彩色效果。
函數庫路徑
語法: CPPFLAGS=-IDIR 及 LDFLAGS=-LDIR
說明: 若 PHP 在安全或編譯所需的函數庫在值得的路徑,須要加入本選項,LDFLAGS 表示函數庫的路徑,CPPFLAGS 表示標頭文件的路徑。
範例: LDFLAGS=-L/my/lib/dir CPPFLAGS=-I/my/include/dir ./configure
七、最小化原則
./configure --prefix=/usr/local/php --enable-fpm (適合nginx平臺)
./configure --prefix=/usr/local/php --with-apxs2=/usr/sbin/apxs (適合apache平臺)
PS:--prefix指定安裝目錄,這個無論編譯安裝什麼軟件都通用!
這兩個平臺因爲使用php的方式不一樣,因此編譯參數不一樣,本文主要以nginx平臺爲主。
下圖是最小化編譯安裝php的info信息:
雖然是最小化安裝的php,可是默認仍是會安裝一下php模塊
[root@web01 ~]# /application/php/bin/php -m
[PHP Modules]
Core
ctype
date
dom
ereg
fileinfo
filter
hash
iconv
json
libxml
pcre
PDO
pdo_sqlite
Phar
posix
Reflection
session
SimpleXML
SPL
sqlite3
standard
tokenizer
xml
xmlreader
xmlwriter
[Zend Modules]
只是不少時候,咱們的php項目會用到其餘不少其餘的模塊,
例如discuz論壇:
從環境檢測的要求來看,咱們須要在編譯php的時候,增長--with-curl啓用curl模塊和--with-gd 啓動GD模塊,discuz還須要鏈接數據庫,因此還得增長--with-mysql=mysqlnd
例如phpmyadmin:
從官方文檔能夠看出,須要的php模塊有session,hash,ctype,json,mbstring,zip,gd2,openssl,xml,libxml,curl等,其中session,hash,ctype,json,xml,libxml最小化安裝的php就有,不用額外指定編譯參數
例如zabbix:
總結:php的模塊,就像qq遊戲大廳裏的遊戲,能夠隨意的添加,可是建議,php編譯參數,不要盲目的去指定一大堆用不上的參數,知足項目須要便可!只要是程序均可能有bug,有漏洞,最小化原則,能夠減小被攻擊的風險!
文章來源: