首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

LAMP 環境源碼編譯安裝指南:Apache 2.2 + MySQL 5.0 + PHP 5.2 (歷史版本參考)

     編輯:PHP 綜合知識

⚠️ 版本警示: 本文記錄的是 2009 年左右的歷史版本 (Apache 2.2.4、MySQL 5.0.77、PHP 5.2.8)。這些版本均已停止維護、存在已知安全漏洞,嚴禁用於生產環境。 現代部署請使用 AlmaLinux/Rocky Linux 9 + Apache 2.4 + MySQL 8.0/ MariaDB 10.6 + PHP 8.2+,並優先採用套件管理器 (dnf/apt) 或容器化 (Docker/Podman) 部署。

以下內容僅供學習源碼編譯原理、依賴關係管理與歷史技術棧理解參考。

編譯安裝核心流程

  1. 準備編譯工具鏈:gcc, gcc-c++, make, autoconf, libtool, pkgconfig
  2. 安裝依賴庫 (順序關鍵):zlib → OpenSSL → PCRE → expat → APR/APR-util → Apache → 庫依賴 → PHP
  3. 配置參數:--prefix 指定安裝路徑、--with-xxx 指定依賴路徑、--enable-xxx 啟用模組
  4. 編譯安裝:make && make install
  5. 環境變數與動態庫:ldconfig、PATH、PKG_CONFIG_PATH

關鍵依賴庫編譯要點 (歷史版本)

庫版本關鍵配置參數常見坑點
freetype2.3.5--prefix=/usr/local/phpsyslib/freetype-2.3.5PHP configure 需 --with-freetype-dir 指向此路徑
libjpeg6b--enable-shared (必須,否則無 .so)需手動建立 include/lib 目錄給 make install 用
libpng1.2.23cp scripts/makefile.linux makefile舊版無 configure,需手動複製 Makefile
zlib1.2.3--prefix=...OpenSSL、PHP 皆依賴
OpenSSL0.9.8e./config shared zlib需 shared 產生 .so;安裝後需替換系統 /usr/bin/openssl 與 /usr/include/openssl 軟連結
GD2.0.35指定所有依賴 --with-jpeg/--with-png/--with-freetype/--with-zlib極易因路徑錯誤導致編譯失敗,需逐一驗證
libxml22.6.16系統通常預裝,--with-libxml-dir=/usrPHP 5.2 需較舊版本,新版 libxml2 可能不相容
cURL7.17.1--with-ssl 指向 OpenSSL 路徑依賴 OpenSSL、zlib、libidn

Apache 2.2 編譯關鍵

# 解壓
tar -zxvf httpd-2.2.4.tar.gz
cd httpd-2.2.4

# 配置:Worker MPM (多執行緒)、共享模組、SO 支援、Rewrite/Deflate/Vhost
./configure \
  --prefix=/usr/local/apache2 \
  --enable-so \
  --enable-vhost-alias \
  --enable-rewrite \
  --enable-deflate \
  --enable-mods-shared=all \
  --with-mpm=worker

make && make install

注意:Apache 2.4 移除了 --with-mpm 參數,改為 --enable-mpms-shared=all 動態載入。

MySQL 5.0 二進制包部署 (非源碼編譯)


# 解壓並移動
tar -zxvf mysql-5.0.77-linux-i686-icc-glibc23.tar.gz
mv mysql-5.0.77-linux-i686-icc-glibc23 /usr/local/mysql

# 建立用戶組
groupadd mysql
useradd -r -g mysql -s /sbin/nologin mysql

# 權限設定
chown -R root:mysql /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql/data

# 初始化資料庫 (5.0 版本指令)
/usr/local/mysql/scripts/mysql_install_db --user=mysql

# 啟動腳本註冊服務
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chkconfig --add mysql
service mysql start

# 安全初始化
/usr/local/mysql/bin/mysql_secure_installation

PHP 5.2 編譯配置 (典型生產參數)


./configure \
  --prefix=/usr/local/php5.2.8 \
  --with-apxs2=/usr/local/apache2/bin/apxs \
  --with-config-file-path=/etc \
  --with-mysql=/usr/local/mysql \
  --with-mysqli=/usr/local/mysql/bin/mysql_config \
  --with-pdo-mysql=/usr/local/mysql \
  --with-libxml-dir=/usr \
  --with-gd=/usr/local/phpsyslib/gd-2.0.35 \
  --enable-gd-native-ttf \
  --with-jpeg-dir=/usr/local/phpsyslib/jpeg-6b \
  --with-png-dir=/usr/local/phpsyslib/png \
  --with-freetype-dir=/usr/local/phpsyslib/freetype-2.3.5 \
  --with-zlib-dir=/usr/local/phpsyslib/zlib-1.2.3 \
  --with-openssl-dir=/usr/local/ssl \
  --with-curl=/usr/local/phpsyslib/curl-7.17.1 \
  --enable-mbstring \
  --disable-ipv6 \
  --enable-sockets \
  --enable-bcmath \
  --enable-zip \
  --with-mhash \
  --with-mcrypt

make && make install
cp php.ini-production /usr/local/php5.2.8/lib/php.ini

現代化部署對比:為何不再推薦源碼編譯

維度源碼編譯 (傳統)套件管理器 / 容器 (現代)
安全更新手動重編、停機時間長dnf update / docker pull 分鐘級修補
依賴管理手動解決 .so 路徑、版本衝突自動解析相依、隔離環境
部署一致性環境差異大、難以複現Dockerfile 宣告式、完全一致
編譯優化可針對 CPU 指令集優化 (-march=native)通用優化足夠,瓶頸通常在 I/O/架構
運維成本極高 (專業編譯知識、故障排查難)低 (標準化流程、社群支援)

現代標準部署範例

Docker Compose (生產就緒)

version: '3.8'
services:
  web:
    image: php:8.2-apache
    ports: ["80:80", "443:443"]
    volumes:
      - ./src:/var/www/html
      - ./apache/vhost.conf:/etc/apache2/sites-enabled/000-default.conf
    depends_on: [db]
  
  db:
    image: mariadb:10.11
    environment:
      MYSQL_ROOT_PASSWORD: ${DB_ROOT_PASS}
      MYSQL_DATABASE: ${DB_NAME}
      MYSQL_USER: ${DB_USER}
      MYSQL_PASSWORD: ${DB_PASS}
    volumes:
      - db_data:/var/lib/mysql
    command: --innodb-buffer-pool-size=1G

volumes:
  db_data:

結語: 理解源碼編譯原理有助於深入掌握軟體依賴鏈與底層運作,但生產環境請務必採用現代化、標準化、自動化的部署方式。安全合規、快速迭代、災難恢復能力是現代運維的核心指標,手工編譯已無法滿足這些需求。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved