版本匹配原则:Apache 2.4 + PHP 7.4/8.x (TS) + MySQL 5.7/8.0;生产环境建议统一使用 Linux 发行版仓库版本(如 Ubuntu 22.04: Apache 2.4.52, PHP 8.1, MySQL 8.0)。
D:\Apache24、D:\PHPC:\MySQL(默认即可,避免权限问题)复制 php.ini-development 为 php.ini,编辑关键项:
| 配置项 | 推荐值 | 说明 |
|---|---|---|
| extension_dir | D:\PHP\ext | 扩展 DLL 目录,绝对路径 |
| doc_root | D:\Apache24\htdocs | Web 根目录,需与 Apache DocumentRoot 一致 |
| cgi.force_redirect | 0 | Apache 模块模式下必须关闭 |
| date.timezone | Asia/Shanghai | 避免 date() 警告 |
| display_errors | On | 开发环境开启,生产关闭 |
| error_reporting | E_ALL | 报告所有错误 |
| extension= mysqli | 取消注释 | 启用 MySQL 支持 |
| extension= pdo_mysql | 取消注释 | 启用 PDO MySQL |
| extension= gd | 取消注释 | 图像处理 |
| extension= mbstring | 取消注释 | 多字节字符串 |
| extension= openssl | 取消注释 | HTTPS/加密 |
| extension= curl | 取消注释 | HTTP 客户端 |
将 php.ini 复制到 C:\Windows(或 Apache 的 bin 目录),并将 php8ts.dll (或 php7ts.dll)、libmysql.dll 复制到 C:\Windows\System32(或加入系统 PATH)。
# 加载 PHP 模块 (TS 版)
LoadModule php_module "D:/PHP/php8apache2_4.dll"
# 指定 PHPIniDir
PHPIniDir "D:/PHP"
# 关联 .php 文件
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
# 默认首页
DirectoryIndex index.php index.html
# 字符集
AddDefaultCharset UTF-8
# 启用重写 (可选)
LoadModule rewrite_module modules/mod_rewrite.so
验证:重启 Apache,访问 https://localhost/phpinfo.php(内容 )。
# Ubuntu/Debian
sudo apt update && sudo apt install apache2 mysql-server php php-mysql php-gd php-mbstring php-xml php-curl php-zip php-bcmath php-intl libapache2-mod-php
# CentOS/RHEL 7 (需 EPEL + Remi)
sudo yum install epel-release
sudo yum install https://rpms.remirepo.net/enterprise/remi-release-7.rpm
sudo yum-config-manager --enable remi-php81
sudo yum install httpd mariadb-server php php-mysqlnd php-gd php-mbstring php-xml php-curl php-zip php-bcmath php-intl
# Ubuntu (systemd)
sudo systemctl start apache2 mysql
sudo systemctl enable apache2 mysql
# CentOS 7
sudo systemctl start httpd mariadb
sudo systemctl enable httpd mariadb
sudo mysql_secure_installation
# 设置 root 密码、移除匿名用户、禁止 root 远程登录、删除 test 库
编辑 /etc/php/8.1/apache2/php.ini (Ubuntu) 或 /etc/php.ini (CentOS),同 Windows 关键项。重载 Apache:sudo systemctl reload apache2。
<VirtualHost *:80>
ServerName dev.example.com
DocumentRoot /var/www/dev.example.com/public
<Directory /var/www/dev.example.com/public>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/dev.example.com_error.log
CustomLog ${APACHE_LOG_DIR}/dev.example.com_access.log combined
</VirtualHost>
启用站点:sudo a2ensite dev.example.com && sudo systemctl reload apache2 (Ubuntu)。
| 现象 | 可能原因 | 解决 |
|---|---|---|
| PHP 页面显示源码/下载 | Apache 未加载 PHP 模块或 AddType 缺失 | 检查 LoadModule、AddType、重启 Apache |
| 连接 MySQL 失败 | 扩展未启用、密码错误、socket 路径不对 | phpinfo 确认 mysqli/pdo_mysql;检查 php.ini mysql.default_socket |
| 中文乱码 | 数据库/表/连接字符集不一致 | 统一 utf8mb4;PDO DSN 加 charset=utf8mb4 |
| 上传大文件失败 | php.ini post_max_size/upload_max_filesize 过小 | 调大至 100M+,同时调整 Apache LimitRequestBody |
| 权限报错 | 目录所属用户非 www-data/apache | chown -R www-data:www-data /var/www/... |
docker-compose up -d 启动标准化 PHP+MySQL+Redis+Nginx 栈,版本锁定、环境一致、秒级迁移。php -S localhost:8000 -t public 快速调试单项目,无需全局安装。