Windows搭建PHP环境

Apache配置

Non Thread Safe(NTS) 和 Thread Safe(TS): “NTS”,没有“php(5/7/8)apache2_4.dll”

  • 网站根目录
    替换“D:/progFiles/Apache24/htdocs”为自己使用的路径
  • 程序路径
    替换“D:/progFiles/Apache24/”为自己Apache2.4的路径;

php-apache

在配置文件(conf/httpd.conf)最后增加

  • PHP 8
PHPIniDir "D:/progFiles/php8.3"
LoadModule php_module "D:/progFiles/php-8.3/php8apache2_4.dll"
  • PHP 7

Php7.2+ 已移除 mcrypt.

PHPIniDir "D:/progFiles/php7.1"
LoadModule php7_module "D:/progFiles/php7.1/php7apache2_4.dll"
  • Php 5
PHPIniDir "D:/progFiles/php-5.6"
LoadModule php5_module "D:/progFiles/php-5.6/php5apache2_4.dll"

重写

  • a.打开模块
LoadModule rewrite_module modules/mod_rewrite.so
  • b.允许重写
AllowOverride All

SSL

  • open module
LoadModule ssl_module modules/mod_ssl.so
  • at httpd.conf:
Include conf/extra/httpd-ssl.conf
## apache haus httpd-2.4.55-o111s-x64-vs16.zip
##Include conf/extra/httpd-ahssl.conf

basic conf

httpd-ssl.conf:

  • ServerName localhost:443
  • SSLCertificateFile “${SRVROOT}/conf/ssl/development.crt”
  • SSLCertificateKeyFile “${SRVROOT}/conf/ssl/development.key”

copy “development.crt” and “development.key” to directory:

${SRVROOT}/conf/ssl

phpMyAdmin

如果使用本机mysql则无需配置!

配置远程MySQL

  • 建立配置文件
    重命名config.sample.inc.php为config.inc.php
  • 添加服务器信息
    修改localhost值: 服务器IP。
$cfg['Servers'][$i]['host'] = '192.168.1.4';

blowfish secret

The configuration file now needs a secret passphrase (blowfish_secret).

  • config blowfish_secret
$cfg['blowfish_secret'] = 'qtdRoGmbc9{8IZr323xYcSN]0s)r$9b_JUnb{~Xz';

Php.ini

  • extension设置目录
extension_dir = "D:/progFiles/phpNUM.NUM/ext"
  • memory limit:
memory_limit = -1

开启mysql

pdo and mysqli:

extension=mysqli
extension=pdo_mysql
  • test.php
<?php
    header("Content-Type: text/html; charset=utf-8");
    phpinfo();
?>
  • test_pdo.php:
<?php
// save as test_pdo.php

var_dump(PDO::getAvailableDrivers());

$host       = 'localhost';
$dbname     = 'carnumber';
$username   = 'tdtc2014';
$password   = 'qazxsw';

$pdo_object = new PDO("mysql:host=$host;dbname=$dbname", $username, $password);

$query = $pdo_object->query('SELECT * FROM users');

var_dump($query->fetchAll(PDO::FETCH_ASSOC));

opcache

在Dynamic Extensions最下面增加:

zend_extension = php_opcache.dll

Note: 如果不加入"opcache.mmap_base = 0x20000000" 会出现“Fatal Error Unable to open base address file”错误

[opcache]
opcache.enable = 1
opcache.memory_consumption = 128
opcache.max_accelerated_files = 4000
opcache.revalidate_freq = 60
opcache.mmap_base = 0x20000000

; Required for Moodle
opcache.use_cwd = 1
opcache.validate_timestamps = 1
opcache.save_comments = 1
opcache.enable_file_override = 0

FAQ

注册Windows服务(管理员权限):

@echo off
echo register begin... ...

set regpath=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment

echo register APACHE2_HOME... ...

set envname1=APACHE2_HOME
set varpath1=D:\progFiles\Apache24
reg add "%regpath%" /v %envname1% /d %varpath1% /f

echo register MYSQL_HOME... ...

set envname2=MYSQL80_HOME
set varpath2=D:\progFiles\mysql-8.0
reg add "%regpath%" /v %envname2% /d %varpath2% /f

echo register modify path... ...
reg add "%regpath%" /v Path /t REG_EXPAND_SZ /d "%path%;%%APACHE2_HOME%%\bin;%%MYSQL80_HOME%%\bin;" /f
rem wmic ENVIRONMENT where "Name='path' and UserName='<system>'" set VariableValue="%path%;%%APACHE2_HOME%%\bin;%%MYSQL80_HOME%%\bin;"

echo register end... ...

echo Service List Begin... ...

echo Service HTTPD reg... ...
httpd.exe -k install
echo ...
echo Service HTTPD(apache2.4) Start... ...
net start apache2.4


echo Service MYSQLD Reg... ...
rem %MYSQL80_HOME%\bin\mysqld --install MySQL80 --defaults-file="D:\progFiles\mysql-8.0\my.ini"
%MYSQL80_HOME%\bin\mysqld -install MySQL80
echo ...
echo Service MYSQLD(mysql80) Start... ...
net start MySQL80

echo Service List End... ...

pause>nul

Apache Issues

  • AH00526
  • AH00072
  • AH01797
  • AH01906

AH00526

AH00526: Syntax error on line 233 of D:/progFiles/Apache24/conf/httpd.conf:
Invalid command 'Order', perhaps misspelled or defined by a module not included in the server configuration

A: 去除如下配置语句的注释符。
Apache2.4启动时报AH00526错误(Invalid command ‘Order’)

#LoadModule access_compat_module modules/mod_access_compat.so

AH00072

Errors reported here must be corrected before the service can be started.
(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。  : AH00072: make_sock: could not bind to address [::]:443
(OS 10048)通常每个套接字地址(协议/网络地址/端口)只允许使用一次。  : AH00072: make_sock: could not bind to address 0.0.0.0:443
AH00451: no listening sockets available, shutting down
AH00015: Unable to open logs

A: 关闭其他占用443端口的软件。

AH01797

AH01797: client denied by server configuration

httpd-ssl.conf:

<Directory "${SRVROOT}/htdocs">
	###Options Indexes Includes FollowSymLinks
	###AllowOverride AuthConfig Limit FileInfo
    Order allow,deny
    Allow from all
    Require all granted
</Directory>

instead of

<Directory "${SRVROOT}/htdocs">
	Options Indexes Includes FollowSymLinks
	AllowOverride AuthConfig Limit FileInfo
    Require all granted
</Directory>

AH01906

localhost:443:0 server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)

A: use interactive