http://php.net/downloads.php
这里要注意,如果用 apahce_mod 运行 php , 那么 php 需要是 ts 版, 因为 ts 版才有这个模块 php7apache2_4.dll
php 需要安装 vc 依赖,在 php 下载页面的左边有 vc 库的下载链接的,用心找一下
不同版本的 php 对应 的 vc 版本是不一样的,如果不清楚这个对应关系,就把全部的 vc 版本都安装一次(只要能安装上)
extension_dir = "ext"
extension=curl
extension=fileinfo
extension=gd2
extension=gettext
extension=gmp
extension=intl
extension=mbstring
extension=exif
extension=mysqli
extension=openssl
extension=pdo_mysql
extension=pdo_sqlite
extension=sockets
extension=sqlite3
extension=xsl
file_uploads 是否允许上传文件
upload_max_filesize 上传文件的最大值
max_file_uploads 上传文件数量的最大值
post_max_size post 请求的最大值
short_open_tag 是否开启短标签
memory_limit 运行内存的最大值
max_execution_time 运行时间的最大值
short_open_tag 是否启用短标签
zend_extension = "php path\ext\php_opcache.dll"
opcache.enable_cli=1
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php composer-setup.php
php -r "unlink('composer-setup.php');"
composer config -g repo.packagist composer https://packagist.phpcomposer.com
@php "%~dp0composer.phar" %*
#!/usr/bin/env sh
php "$(dirname "$0")"/composer.phar $*
xdebug 的配置可以参考这篇文章 《在 VSCode 里调试 PHP》
https://dev.mysql.com/
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=C:\\mysql
# 设置mysql数据库的数据的存放目录
#datadir=C:\\mysql\\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
mysqld --initialize
# 以这样的方式运行 mysqld
mysqld --skip-grant-tables --shared-memory --console
# 使用 mysql 登录并修改密码
mysql -uroot -p
use mysql;
flush privileges;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
flush privileges;
quit
mysqld --console
mysqld install mysql
net start mysql
net stop mysql
mysqld remove mysql
# 登入 mysql
mysql -uroot -p
# 使用 mysql 库
use mysql;
# 修改密码
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
# 刷新权限
flush privileges;
初始化 mysql
mysqld --defaults-file="C:\Program Files\mysql-5.7.34-winx64\my.ini" --initialize
mysqld --defaults-file="C:\Program Files\mysql-5.7.34-winx64\my.ini" --console --skip-grant-tables
mysql -uroot
use mysql;
update user set authentication_string=password('1234') where user='root';
flush privileges;
mysqld --defaults-file="C:\Program Files\mysql-5.7.34-winx64\my.ini" --console
https://www.apachelounge.com/download/
Apache 官方只提供源码,二进制文件都是第三方编译的,这里选择 Apache Lounge 提供的二进制文件
打开 Apache 的配置文件 httpd.conf,往 httpd.conf 里添加 php 的模块,httpd.conf 这个文件在 Apache 安装目录的 conf 文件夹里
LoadModule php7_module modules/php7apache2_4.dll
AddHandler application/x-httpd-php .php
PHPIniDir "C:/php"
这段配置,加在 httpd.conf 的 179 行左右,就是加载模块那部分的尾部
打开 httpd.conf,将里面的 #ServerName localhost:80 注释去掉。
在 httpd.conf 里找到这一段
<Directory />
AllowOverride none
Require all denied
</Directory>
把这一段修改为
<Directory />
AllowOverride none
Require all granted
</Directory>
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host3.example.com
# 站点根目录
DocumentRoot “C:\www\wwwroot\dummy-host2.example.com.cn”
# 站点域名
ServerName dummy-host2.example.com.cn
# 错误日志
ErrorLog “C:\www\wwwlog\dummy-host2.example.com-error.log”
# 日志
CustomLog “C:\www\wwwlog\dummy-host2.example.com-access.log” common
# 默认文件名
注意,这里的站点目录和日志目录需要在自己新建
9. 启动 Apache,在命令行里运行
```plaintext
httpd
httpd -k install
httpd -k uninstall
httpd -k start
httpd -k stop
注意,在调用 httpd 注册 Apache 的服务时,弹出这句话
Errors reported here must be corrected before the service can be started
并不是 error ,而是提示:如果这行下边出现错误则解决错误后再启动!
SSLEngine on
SSLCertificateFile "${SRVROOT}/conf/ssl/domain.crt"
SSLCertificateKeyFile "${SRVROOT}/conf/ssl/rsa_private_key.pem"
<VirtualHost _default_:443>
DocumentRoot "${SRVROOT}/htdocs"
ServerName 2.example.com:443
ServerAlias 3.example.com 4.example.com
SSLEngine on
SSLCertificateFile "${SRVROOT}/conf/ssl/domain.crt"
SSLCertificateKeyFile "${SRVROOT}/conf/ssl/rsa_private_key.pem"
</VirtualHost>
Protocols h2 h2c http/1.1 http/1.0
<VirtualHost _default_:443>
DocumentRoot "${SRVROOT}/htdocs"
ServerName 2.example.com:443
ServerAlias 3.example.com 4.example.com
SSLEngine on
SSLCertificateFile "${SRVROOT}/conf/ssl/domain.crt"
SSLCertificateKeyFile "${SRVROOT}/conf/ssl/rsa_private_key.pem"
Protocols h2 h2c http/1.1 http/1.0
</VirtualHost>
http://nginx.org/download/nginx-1.21.1.zip
server {
listen 80;
server_name localhost;
access_log logs/localhost.access.log;
error_log logs/localhost.error.log;
location / {
root C:/wwwroot; # 这是站点根目录的路径
index index.html index.htm;
}
location ~ \.php$ {
root C:/wwwroot; # 这是站点根目录的路径
fastcgi_pass 127.0.0.1:9001;
fastcgi_index index.php;
include fastcgi.conf;
}
}
listen 443 ssl http2;
ssl_certificate ./crt/127.0.0.1/domain.crt;
ssl_certificate_key ./crt/127.0.0.1/rsa_private_key.pem;
set PHP_FCGI_CHILDREN=8
php-cgi -b 127.0.0.1:9001
nginx -s quit
nginx -s stop
nginx -s reload
nginx -T
https://github.com/MicrosoftArchive/redis/releases
这里推荐下载 zip 版
下载完后解压,然后 cd 进目录,然后运行这段
redis-server.exe redis.windows.conf
下载 https://pecl.php.net/package/redis
下载完后,把 dll 文件放在 php 的 ext 目录。
然后修改 php.ini ,加上下面这一行,最好加在那些拓展的位置
extension=php_redis.dll
https://www.redis.com.cn/redis-installation.html
nginx 和 apache 大多数情况下安装一个就可以,当然啦 nginx 反代 apache 也是可以的。
相比于 xampp 和 wampp 这类集成环境,笔者更喜欢,全部软件都自行安装。因为这样可以更好地控制各个软件的配置,和方便地安装同一个软件的多个版本 (所以这篇文章里的 mysql 才会选 zip 版来安装) 。
笔者对 Windows 的服务并不了解,所以大多数软件都是通过命令行直接运行的。
可以用 NSSM 把像 php-cgi 这类在命令行运行的程序封装成服务。 或者用 instsrv 和 srvany 配合,也可以把任意 exe 封装成服务。 instsrv.exe 和 srvany.exe 是 Microsoft Windows Resource Kits 工具集中的两个实用工具。
https 自签证书的生成,可以参考这篇文章 《密码学入门简明指南》 的这个章节 OpenSSL 的一般使用 。
https://www.phpmyadmin.net/
/libraries/config.default.php
/config.sample.inc.php
,设置这两个文件里的这个值,这个值的长度要大于 64
$cfg['blowfish_secret'] = ''
/config.sample.inc.php
修改 mysql 的连接参数 https://github.com/ErikDubbelboer/phpRedisAdmin
hosts 是用来修改本地的域名解释
hosts 的文件位置是 %WINDIR%\System32\drivers\etc\hosts
其中 %WINDIR% 是系统所在目录,一般是 %HOMEDRIVE%\WINDOWS
其中 %HOMEDRIVE% 是系统所在分区,一般是 C:
所以一般情况下 hosts 的文件位置是 C:\WINDOWS\System32\drivers\etc\hosts
修改 hosts 需要管理员权限,直接用记事本修改会保存失败的,可以用 vscode 修改
或者打开管理员的命令行,再在命令行里打开记事本,再用记事本打开 hosts 例如这样 这是 bat 的
notepad %WINDIR%\System32\drivers\etc\hosts
或者这样 这是 powershell 的
notepad $env:windir\system32\drivers\etc\hosts
hosts 修改后,可以用这个命令 nslookup 域名
来判断有没有生效
hosts 修改后如果沒有生效,可以用这个命令刷新 DNS ipconfig /flushdns
查看端口占用,第二列是本地监听的地址和端口,第二列是远程监听的地址和端口,最后一列是 pid
netstat -ano
列出进程名
netstat -anob
只查看 TCP
netstat -anob -p TCP
查看 TCP 下的 80 端口占用
netstat -anob -p TCP | findstr "80"
tasklist /V /FI "WINDOWTITLE eq titlename"
tasklist /V /FI "PID eq 9088"
tasklist /V /FI "IMAGENAME eq nginx.exe"
tasklist /V /FI "IMAGENAME eq nginx.exe" /FI "WINDOWTITLE eq titlename"
taskkill /T /F /FI "WINDOWTITLE eq titlename"
taskkill /T /F /FI "PID eq 9088"
taskkill /T /F /FI "IMAGENAME eq nginx.exe"