本節包括在 Unix 平台的 Apache 2.x 下(xià)安裝 PHP 的說明(míng)和(hé)提示。
警告
不推薦在使用(yòng) Apache 2 的産品中使用(yòng)線程化 MPM。應使用(yòng)預分支 MPM,Apache 2.0 和(hé) 2.2 默認的 MPM。其原因見 FAQ 中的相關條目使用(yòng)線程化 MPM 的 Apache2。
推薦閱讀 » Apache 文(wén)檔,了(le)解一下(xià) Apache 2.x 服務器,以及詳細的安裝參數。
可以從(cóng) » Apache 下(xià)載站(zhàn)點下(xià)載最新版本的Apache,并且根據上(shàng)文(wén)選擇合适版本的 PHP 下(xià)載。本向導僅包含最基礎的内容,隻能(néng)讓 Apache 2.x 和(hé) PHP 能(néng)夠正常工(gōng)作(zuò)。更多信息請(qǐng)閱讀 » Apache 文(wén)檔。這(zhè)裏省略所有的版本号,以保證本文(wén)的正确性。需要将本文(wén)的“NN”替換爲相應的版本号。
當前 Apache 2.x 有兩個流行的版本 - 2.4 和(hé) 2.2。雖然選擇某個版本會(huì)有種種原因,但(dàn)是如果可以考慮的話(huà),我們還是建議(yì)使用(yòng)最新的 Apache 2.4 版本。當然,以下(xià)的介紹同樣适合 Apache 2.4 和(hé) 2.2。請(qǐng)注意 Apache 2.2 已經不再被官方支持,并且不再發布新功能(néng)和(hé)補丁更新。
從(cóng)上(shàng)面列出的地方獲取 Apache 源碼包,然後解壓:
tar -xzf httpd-2.x.NN.tar.gz
同樣,獲取 PHP 源碼包并解壓:
tar -xzf php-NN.tar.gz
編譯并安裝 Apache。請(qǐng)參考 Apache 安裝文(wén)檔了(le)解編譯 Apache 的更多細節。
cd httpd-2_x_NN
./configure --enable-so
make
make install
現(xiàn)在已經将 Apache 2.x.NN 安裝在 /usr/local/apache2。本安裝支持可裝載模塊 和(hé)标準的 MPM prefork。之後,可以使用(yòng)如下(xià)命令啓動 Apache 服務器:
/usr/local/apache2/bin/apachectl start
如果成功,可以停止 Apache 服務器并繼續安裝 PHP:
/usr/local/apache2/bin/apachectl stop
現(xiàn)在需要配置并編譯 PHP。在這(zhè)裏可以用(yòng)各種各樣的參數來(lái)自(zì)定義 PHP,例如啓動哪些(xiē)擴展功能(néng)包的支持等。用(yòng) ./configure --help 命令可以列出當前可用(yòng)的所有參數。在此例中,将給出一個在有 MySQL 支持的 Apache 2 上(shàng)進行配置的範例。
如果按照上(shàng)面的說明(míng)從(cóng)源代碼編譯了(le) Apache,下(xià)面的例子會(huì)正确匹配 apxs 的路徑。如果通過其他(tā)方式安裝了(le) Apache,需要相應的調整 apxs 的路徑。注意,在有些(xiē)發行版本中,可能(néng)将 apxs 更名爲 apxs2。
cd ../php-NN
./configure --with-apxs2=/usr/local/apache2/bin/apxs --with-pdo-mysql
make
make install
如果決定在安裝後改變配置選項,隻需重複最後的三步 configure,make,以及 make install,然後需要重新啓動 Apache 使新模塊生效。Apache 不需要重新編譯。
請(qǐng)注意,除非明(míng)确有提示,否則“make install”命令将安裝 PEAR、各種 PHP 工(gōng)具諸如 phpize,并安裝 PHP CLI 等等。
配置 php.ini
cp php.ini-development /usr/local/lib/php.ini
可以編輯 php.ini 來(lái)設置 PHP 運行時(shí)的選項。如果想要把此文(wén)件放(fàng)到(dào)另外(wài)的位置,需要在步驟 5 添加 --with-config-file-path=/path 選項。
如果選擇了(le) php.ini-production,請(qǐng)務必閱讀其中的變更列表,它們将影響 PHP 的執行。
編輯 httpd.conf 文(wén)件以調用(yòng) PHP 模塊。LoadModule 表達式右邊的路徑必須指向系統中的 PHP 模塊。以上(shàng)的 make install 命令可能(néng)已經完成了(le)這(zhè)些(xiē),但(dàn)務必要檢查。
PHP 8 版本:
LoadModule php_module modules/libphp.so
PHP 7 版本:
LoadModule php7_module modules/libphp7.so
告知(zhī) Apache 将特定的擴展名解析成 PHP,例如,讓 Apache 将擴展名 .php 解析成 PHP。爲了(le)避免潛在的危險,例如上(shàng)傳或者創建類似 exploit.php.jpg 的文(wén)件并被當做 PHP 執行,我們不再使用(yòng) Apache 的 AddType 指令來(lái)設置。參考下(xià)面的例子,你(nǐ)可以簡單的将需要的擴展名解釋爲 PHP。 我們将添加 .php 來(lái)進行演示。
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
或者,你(nǐ)也(yě)想将 .php,.php2,.php3,.php4,.php5,.php6,以及 .phtml 文(wén)件都當做 PHP 來(lái)運行,我們無需額外(wài)的設置,僅需按照下(xià)面這(zhè)樣來(lái):
<FilesMatch "\.ph(p[2-6]?|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
然後,可以将 .phps 文(wén)件由 PHP 源碼過濾器處理(lǐ),使得其在顯示時(shí)可以高(gāo)亮(liàng)源碼,設置如下(xià):
<FilesMatch "\.phps$">
SetHandler application/x-httpd-php-source
</FilesMatch>
mod_rewrite 也(yě)有助于将那些(xiē)不需要運行的 .php 文(wén)件的源碼高(gāo)亮(liàng)顯示,而并不需要将他(tā)們更名爲 .phps 文(wén)件:
RewriteEngine On
RewriteRule (.*\.php)s$ $1 [H=application/x-httpd-php-source]
不要在正式生産運營的系統上(shàng)啓動 PHP 源碼過濾器,因爲這(zhè)可能(néng)洩露系統機密或者嵌入的代碼中的敏感信息。
按照通常的方式啓動 Apache 服務:
/usr/local/apache2/bin/apachectl start
或者
service httpd restart
按照上(shàng)面的步驟便可以使 Apache 2.x 将 PHP 作(zuò)爲 SAPI 模塊了(le)。當然 Apache 和(hé) PHP 都還有很(hěn)多配置選項,可以在相應的源代碼目錄中使用(yòng) ./configure --help 獲得更多信息。
假如要編譯一個多線程版本的 Apache,可在編譯時(shí)選擇用(yòng) worker MPM 來(lái)替換标準的 prefork MPM。隻需在上(shàng)面的第 3 步使用(yòng):
--with-mpm=worker
如果不是很(hěn)明(míng)确這(zhè)樣做的後果并且大(dà)概理(lǐ)解其含義的話(huà),最好(hǎo)不要進行這(zhè)一步。更多信息請(qǐng)參考 Apache 文(wén)檔中關于 » MPM-Modules 的部分。
注意:
Apache MultiViews 常見問題中讨論了(le)在 PHP 中使用(yòng) MultiViews。
注意:
要編譯多線程版本的 Apache,系統必須支持多線程。這(zhè)也(yě)意味着需要将 PHP 編譯爲 Zend Thread Safety(ZTS), 因此并不是所有的擴展都可以使用(yòng)了(le)。推薦編譯 Apache 使用(yòng)标準的 prefork MPM-Module。
網站(zhàn)建設開(kāi)發|APP設計(jì)開(kāi)發|小(xiǎo)程序建設開(kāi)發