編譯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 #用來指定 php3.ini 或 php4.ini 的路徑
--with-MySQL=/usr/local/mysql #mysql安裝目錄,對mysql的支援
--with-mysqli=/usr/local/mysql/bin/mysql_config #mysqli擴充技術不僅可以調用MySQL的預存程序、處理MySQL事務,而且還可以使訪問資料庫工作變得更加穩定。
--with-mysql-sock=/tmp/mysql.sock #指定mysql通訊端檔案位置
--enable-safe-mode #開啟安全模式,預設值是開啟的
--disable-short-tags #配置本選項後,PHP 的程式就不能使用短的標記,一定要用的長標記
--with-exec-dir=DIR #PHP 執行路徑(有時為了系統的安全性考慮,會指定 PHP 程式一定要在哪個目錄執行)
--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-sqlite-utf8 #使sqllite支援utf-8
--enable-bcmath #開啟圖片大小調整,用到zabbix監控的時候用到了這個模組
--enable-sockets #開啟 sockets 支援
--enable-exif #圖片的中繼資料支援
--enable-magic-quotes #魔術引用的支援
--disable-rpath #關閉額外的運行庫檔案
--disable-debug #關閉偵錯模式
--enable-debug #本選項一般不會使用,除非在開發 PHP 程式時比較有用。它可以顯示額外的錯誤資訊
--with-ldap=DIR #若要使用目錄協議 (Lightweight Directory Access Protocol, LDAP) 則必須要開啟本選項。有關 LDAP 的細節,可以參考 RFC 檔案的 RFC1777 及 RFC1778
--with-mime-magic=/usr/share/file/magic.mime #魔術標頭檔位置
--with-apache=DIR #用本選項可以讓 PHP 以apache的模組方式使用,DIR 的字串可以是 /usr/local/apache 或其它安裝apache的目錄
--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-oracle=DIR #使用 Oracle 資料庫。Oracle 的版本要在 7.3 版以上。您也可以在 PHP 程式中使用環境變數 ORACLE_HOME 來指定 Oracle 的路徑。更多有關 Oracle 的資訊請參考 Oracle 的網站 http://www.oracle.com
--with-sybase=DIR #使用 Sybase 資料庫。更多有關 Sybase 的資訊請參考 Sybase 的網站 http://www.sybase.com
--with-sybase-ct=DIR #使用 Sybase-CT 資料庫
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
備忘:需要單獨安裝的擴充
1. gd庫。
2. ming的擴充。
3. mhash和mcrypt的擴充
1>指定了--with-apxs2=/usr/local/apache/bin/apxs以後,就不要再啟用--enable-fpm和--enable-fastCGI,apxs是以php module的模式載入PHP的。
2>Mysql在編譯了Mysql開發library以後,可以不用指定mysql的路徑。
3>PHP編譯存在基礎的依賴的關係,編譯PHP首先需要安裝XML擴充,因為php5核心預設開啟了XML的支援,其他的基礎庫,相應需要:
4>GD -> zlib, Png, Jpg, 如果需要支援其他,仍需要根據實際情況編譯擴充庫,ttf庫需要freetype庫的支援。
5>--enable-magic-quotes,是一個極其不推薦的參數,當然,如果你需要PHP為你做這些底下的工作,實際上他也沒有很徹底的解決問題。
6>-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集合各種擴充,適應各種環境,這會讓把你自己逼進窘境的。