前言
最近有空整理一下php 在windows上面的环境配置。原因是发现网上大多数php环境配置的相关帖子内容凌乱、多数是不能配置成功的。所以决定全部走一遍配置,以确保整个过程是成功的。并在此基础上开个帖子记录下这个完整的安装和配置过程,以备忘和供有需要的同学参考。
1. PHP 的下载、安装和配置
1.1 下载 php
官方下载地址:https://windows.php.***/downloads/releases/
我这里没有下载最新版,而是 php-7.4.33-Win32-vc15-x64.zip
1.2 安装 php
将下载的 zip 压缩包解压到安装目录: E:\Software\PHProgram\PHP
(我的位置)
1.3 配置 php 系统变量
将 PHP 的安装目录(如 E:\Software\PHProgram\PHP)添加到 系统变量 的 Path
变量中:
1.4 配置 php.ini
将 PHP 目录下的php.ini-development
,复制一份并重命名为 php.ini
,作为PHP的配置文件。
编辑php.ini文件:
-
设置PHP扩展包的具体目录
找到:
; On windows: ; extension_dir = “ext”
修改为:
; On windows: extension_dir = “E:\Software\PHProgram\PHP\ext”
-
开启相应的库功能
搜索 “
;extension=
”,定位并开启所需的库功能:
-
设置时区
找到
;date.timezone =
修改为:
date.timezone = Asia/Shanghai
-
检查是否安装成功
cmd 中输入检查版本的命令:
php -v
2. apache 的下载、安装和配置
2.1 下载 Apache
安装包官方下载地址:https://www.apachelounge.***/download/VS16/
下载的 ZIP 文件是:httpd-2.4.57-win64-VS16.zip
2.2 安装 Apache
将下载的zip 文件解压到 E:\Software\PHProgram\Apache-2.4.57\Apache24
2.3 修改配置 Apache
找到 Apache24\conf
目录下的 httpd.conf
文件,用记事本打开,并转到 Define SRVROOT
“c:/Apache24”
修改为:
# ServerRoot at a non-local disk, be sure to specify a local disk on the
# Mutex directive, if file-based mutexes are used. If you wish to share the
# same ServerRoot for multiple httpd daemons, you will need to change at
# least PidFile.
#
Define SRVROOT "E:\Software\PHProgram\Apache2.4.57\Apache24"
ServerRoot "${SRVROOT}"
#
# Mutex: Allows you to set the mutex mechanism and mutex file directory
2.4 指定服务端口(非必须)
定位到 Listen 80
,改为其它端口
# Change this to Listen on specific IP addresses as shown below to
# prevent Apache from glomming onto all bound IP addresses.
#
#Listen 12.34.56.78:80
Listen 8888
#
# Dynamic Shared Object (DSO) Support
Apache
默认端口为80
,为避免端口冲突,可修改为其他端口。如使用默认80端口,则通过http://localhost
即可访问,如使用修改后的端口,则必须加端口号:如http://localhost:8888
2.5 配置系统变量
2.6 安装服务
必须以 管理员身份 运行 cmd
,然后进入 Apache\bin
目录
C:\WINDOWS\system32> e:
E:\> cd Software\PHProgram\Apache-2.4.57\Apache24\bin
E:\Software\PHProgram\Apache-2.4.57\Apache24\bin> httpd -k install -n Apache2.4
如果要移除服务:cmd 中输入
sc delete Apache2.4
后回车
2.7 Apache 环境开启 hta***ess 伪静态(可选)
-
什么是伪静态 ?
伪静态其实是相对真实静态来讲的,伪静态只是改变了URL的显示形式,实际上还是一个动态的页面。伪静态的页面后缀可以是html
、htm
或者是目录格式等。像thinkphp
等框架的pathinfo
模式,也是伪静态的一种。 -
为什么要用伪静态 ?
Ⅰ为了seo
优化,伪静态有利于搜索引擎的收录,能够增加网站优化效果;
Ⅱ 为了让URL
看起来更简单,更加友好易读,也给人一种专业性的感觉。
Apache 服务器上开启和通过.hta***ess
文件来配置伪静态:
1)在 Apache 配置文件httpd.conf
中启用Rewrite
打开httpd.conf
,定位到代码:
#LoadModule rewrite_module modules/mod_rewrite.so
2)把前面#
去掉。没有则添加,但必须独占一行,以使 apache 支持 mod_rewrite
模块。
LoadModule rewrite_module modules/mod_rewrite.so
3)继续在 httpd.conf
搜索定位 AllowOverride
,并把后面的参数从None
全部改成All
4)配置.hta***ess
伪静态规则
-
在要启用伪静态的项目的根目录(如
www
)下建立.hta***ess
文件 -
在
.hta***ess
文件中输入以下内容(或开源项目本身指定的内容)< IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f #RewriteRule RewriteRule index.html$ index.php #RewriteRule ^(.*?).html$ index.php?$1.html [QSA,PT,L] #RewriteRule ^/index([0-9]*).html$ /index.php?id=$1 #更多伪静态规则 < /IfModule>
2.8 启动服务
-
方式一
打开Apache/bin
目录下的ApacheMonitor.exe
启动Apache
; -
方式二
服务 >> Apache 2.4 右键 启动
测试是否安装成功:
在浏览器中输入HTTP://localhost:8888(此处8888是我选择的端口)验证服务是否成功搭建
或者查看系统服务:
安装成功!
3. 整合 PHP、Apache
3.1 配置 apache 支持 php
1)打开 Apache24\conf
目录下的配置文件 httpd.conf
,并定位到:
#LoadModule vhost_alias_module modules/mod_vhost_alias.so
2)在下方添加:
LoadModule php7_module "E:/Software/PHProgram/PHP/php7apache2_4.dll"
PHPIniDir "E:/Software/PHProgram/PHP"
AddType application/x-httpd-php .php .html .htm
注:这里安装的是
PHP7
,假如是PHP8
,则应相应地换成php8_module
、php8apache2_4.dll
等
3.2 修改网站默认首页
找到:
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
4)改为:
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
3.3 修改Apache 默认的站点目录
1)在 E:\Software\PHProgram
下,新建 一个名为 www
的文件夹,做为网站根目录;
2)在 httpd.conf
中,找到如下代码:
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "${SRVROOT}/htdocs"
<Directory "${SRVROOT}/htdocs">
修改为:
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "E:\Software\PHProgram\www"
<Directory "E:\Software\PHProgram\www>
此目录即为打开 http://localhost:8888
时的根目录,可在该目录创建index.php
,用于默认访问的 php
文件。
3.4 测试 php 网站
在 www
目录下,新建文件index.php
,写入以下内容:
<?php
phpinfo();
?>
然后打开http://localhost:8888
,如果显示PHP
版本及配置信息,则表示配置成功!
4. 安装 php 依赖管理工具:***poser
***poser
是 PHP 开发必不可少的工具之一,可有效减少依赖包下载和管理的烦恼。
4.1 下载 ***poser
官方下载地址:https://get***poser.org/download/,
也可点击 这里 直接下载(不打开下载页)
4.2 安装 ***poser:方式一
1)检查/修改配置文件
在 php 安装目录中找到 php.ini 文件,用记事本打后定位到
;extension=openssl
去掉前面的“;
”(分号)以启用配置
extension=openssl
2)双击运行 ***poser-Setup.exe
程序会在每次执行时安装最新的 ***poser 版本,后面一步步安装即可。
3)检查是否安装成功
然后等待安装完成,重新打开 命令行窗口,输入命令检查是否安装成功:
Microsoft Windows [版本 10.0.22621.1555]
(c) Microsoft Corporation。保留所有权利。
C:\Users\pro>***poser --version
***poser version 2.5.5 2023-03-21 11:50:05
当然,也可以按照官方文档的方式进行安装,见方式二。
4.3 安装 ***poser:方式二
php -r "copy('https://get***poser.org/installer', '***poser-setup.php');"
php -r "if (hash_file('sha384', '***poser-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01 eae') { echo '安装程序验证'; } else { echo '安装程序损坏'; unlink('***poser-setup. php'); } echo PHP_EOL;"
php ***poser-setup.php
php -r "unlink('***poser-setup.php');"
4.4 更改 ***poser 镜像
因为国外网站访问比较慢,这里介绍安装***poser 镜像。
1)阿里云 ***poser 镜像 【推荐
】
***poser config -g repo.packagist ***poser https://mirrors.aliyun.***/***poser/
2)腾讯云 ***poser 镜像
***poser config -g repo.packagist ***poser https://mirrors.cloud.tencent.***/***poser/
3)华为云 ***poser 镜像
***poser config -g repo.packagist ***poser https://repo.huaweicloud.***/repository/php/
4)安畅云 ***poser 镜像
***poser config -g repo.packagist ***poser https://php.***pkg.org/
5. VsCode 配置
VsCode
是用的比较多的开发 PHP 的工具,进行配置之后要比Jerbrian
家的IDE
要方便很多。
5.1 安装 vs code 插件
在vs code插件商店中,搜索并安装相关的组件:
***poser
PHP 语言支持
-
PHP Debug
(后面需要做进一步的设置) PHP Extendsion Pack
-
Php IntelliSense
注:Vs code 安装 debug 插件后,需要在 settings.json
中进行设置,即在最外层大括号下面,添加以下两个php.exe
所在的路径:
{
// "settingsSync.ignoredExtensions": [
// ],
"php.validate.executablePath": "E:/Software/PHProgram/PHP/php.exe",
"php.debug.executablePath": "E:/Software/PHProgram/PHP/php.exe"
}
5.2 下载和配置 Xdebug 库
Xdebug
,是一个 PHP 插件,可用于单步调试 / 输出调试等,配合VS Code的插件,功能十分强大,可满足日常大多数环境需求。
插件功能包括:
- 远程监听调试
- 本地单文件调试
- 本地浏览器调试
一般前两个功能使用较多,小脚本使用第二个功能,网站类代码推荐监听调试。
准备下载与当前 php 版本、当前系统相对应的 Xdebug
版本
打开 版本选择 网页:
1) cmd 中运行以下命令
php -i
2)运行后,复制cmd中得到的 phpinfo()
的完整输出信息:
phpinfo()
PHP Version => 7.4.33
$_SERVER['argv'] => Array
(
)
... ...
3)打开上面提供的这个 版本选择 链接,并粘贴到此网页中的多选文本框中,然后提交。
4)下载 Xdebug
提交后,网站会根据已提交的信息,自动为您推荐当前PHP版本、系统环境匹配的Xdebug
库。然后就可下载该 xdebug.dll
库文件
5)将下载的 php_xdebug-3.1.6-7.4-vc15-x86_64.dll
复制到 E:\Software\PHP_Program\PHP\ext
扩展目录下
并将文件php_xdebug-3.1.6-7.4-vc15-x86_64.dll
重命名为 php_xdebug.dll
6)修改 E:\Software\PHProgram\PHP
目录下的 php.ini
配置文件
在php.ini
文件末尾加上以下代码并保存:
[XDebug]
zend_extension=php_xdebug.dll
xdebug.output_dir="E:\Software\PHProgram\tmp\xdebug"
; xdebug 监听地址(Xdebug3写法,2的名称为 remote_host)
xdebug.client_host="127.0.0.1"
xdebug.client_port=9003
xdebug.remote_handler=dbgp
xdebug.start_with_request = yes
xdebug.idekey = Vscode
xdebug.collect_return = On
xdebug.mode = debug
; 本机调试,Xdebug3新增设置
xdebug.discover_client_host = On
注:
1、修改php.ini
文件后,必须重启Apache
服务才能生效;
2、本文安装的Xdebug
基于版本3x
。如果是2x
,那么php.ini
中的 [Xdebug] 的配置项不同,具体请看官网文档
【Xdebug3
和Xdebug2
配置项变化较大(3的配置项在2的基础上有移除、改名或新增等),更多配置请参考官方文档(很多网上的配置都是错的)】
7)cmd
命令提示符下测试xdebug
安装是否成功:
-
php --version
命令Microsoft Windows [版本 10.0.22621.1555] (c) Microsoft Corporation。保留所有权利。 C:\Users\pro> php --version PHP 7.4.33 (cli) (built: Nov 2 2022 16:00:55) ( ZTS Visual C++ 2017 x64 ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Xdebug v3.1.6, Copyright (c) 2002-2022, by Derick Rethans C:\Users\pro>
-
网页中输出
phpinfo()
信息www
(网站要目录)下的index.php
文件:<?php phpinfo(); ?>
浏览器访问 http://localhost:8888 :
出现 Xdebug,说明安装成功 !如果
phpinfo
有XDebug
,cmd
下没有,请检查环境变量设置是否正确
8)Vs code
中 php 的 debug
插件配置
-
在网站根目录www下,新建一个
test.php
文件(用于debug
插件的配置测试),并编写以下内容:<?php for ($i = 0; $i < 10; $i++) { echo $i; } ?>
-
在有打开的 php 文件的情况下(如
test.php
),单击 VSCode 左侧列表的【运行和调试】图标
再点击【创建launch.json
文件】按钮此时,即自动创建
.vscode
文件夹并将launch.json
保存到www/.vscode/
路径下。生成的
launch.json
文件中的配置项如下:{ "version": "0.2.0", "configurations": [ { "name": "Launch built-in server and debug", "type": "php", "request": "launch", "runtimeArgs": [ "-S", "localhost:8888", "-t", "." ], "port": 9003, "serverReadyAction": { "action": "openExternally" } }, { "name": "Debug current script in console", "type": "php", "request": "launch", "program": "${file}", "cwd": "${fileDirname}", "externalConsole": false, "port": 9003 }, { "name": "Listen for Xdebug", "type": "php", "request": "launch", "port": 9003 } ] }
注:
Listen for Xdebug
项的port
属性,需要与php.ini
配置文件中相同;Xdebug
的默认调试端口已从9000
更改为9003
。
5.3 调试运行 debug
1)选择运行和调试右边的下拉框,选择调试模式(如,选择 Listen for Xdebug
),程序里打上断点;
2)按 F5 开始调试(也可按调试按钮);
3)打开浏览器访问 http://localhost:8888/test.php
此时页面尚不能正常加载(转圈)
4)继续按 F5 调试,直到程序跑完,就会看到页面加载好全部内容
php.ini
中,xdebug.mode = debug
的使用场景为需要断点调试的时候。
但有时程序本身没问题,只是想看看性能和各个地方的耗时情况,则将 ’debug
‘模式换成 trace
(耗时)或 profile
(性能) 模式。
如:
-
trace
,修改 php.inixdebug.mode = trace
在Vscode 调试模式名称下拉框中,选“
Debug current script in console
”,去掉php程序中所有断点,此时按一下 F5 程序就执行完毕,然后找到目录E:\Software\PHProgram\tmp\xdebug
(php.ini中配置的目录),能看到多出了一个类似trace.xxxxx.xt
这样的文件。 -
profile
(同理,略)本地开发时,一般同时开启两个,即
xdebug.mode = debug,profile
说明:允许以逗号分隔
xdebug.mode
的值,作为标识符来同时启用多个模式
6. MySQL在Windows 环境中的安装
参见我的另一篇文章 MySQL在Windows 环境中的安装
7. 附:Xdebug3 参数说明
7.1 xdebug.mode
此设置控制启用哪些Xdebug功能。
接受以下值:
值 | 说明 |
---|---|
off |
没有启用任何功能。Xdebug 除了检查功能是否已启用外不起作用。如果您想要接近零的开销,请使用此设置。 |
develop |
启用包括重载的var_dump() 在内的开发帮助。 |
coverage |
使Code Coverage Analysis 能够生成代码覆盖率报告,主要是与PHPUnit 结合使用 。 |
coverage |
使Code Coverage Analysis 能够生成代码覆盖率报告,主要是与PHPUnit 结合使用 。 |
debug |
启用步骤调试。这可用于在代码运行时逐步检查代码,并分析变量的值。 |
gcstats |
使垃圾收集统计信息能够收集有关PHP的垃圾收集机制的统计信息。 |
profile |
启用性能分析,您可以使用它通过KCacheGrind 之类的工具分析性能瓶颈。 |
trace |
启用功能跟踪功能,该功能允许您记录每个函数调用,包括参数,变量赋值以及在对文件的请求期间进行的返回值。 |
以"
,
"(逗号)分隔xdebug.mode
的值作为标识符来同时启用多个模式xdebug.mode=develop,trace
。
还可以通过XDEBUG_MODE
在命令行上设置环境变量来设置模式,这样优先于xdebug.mode
设置。
7.2 start_with_request
在CLI
模式下,PHP脚本可以被轻松的调试,但是在fastcgi
模式下,xdebug
在何种情况拦截请求并触发调试呢,实际上一套WEB API 只有极少有性能瓶颈的API才需要被debug,每个接口都去记录profile
是没必要的(此配置的意义)
值 | 说明 |
---|---|
yes |
该功能在 PHP 请求启动时以及运行任何 PHP 代码之前启动。例如,xdebug.mode = trace 和 xdebug.start_with_request = yes 启动整个请求的功能跟踪。 |
no |
请求开始时,该功能未激活。你仍然可以调用函数xdebug_start_trace() 来启动 trace ;调用xdebug_break() 开始逐步调试;调用xdebug_start_gcstats() 来做垃圾收集统计。 |
trigger |
1)仅当请求开始时存在特定触发条件时,才激活该功能。触发器的名称是(大写)XDEBUG_TRIGGER ,而Xdebug 会去检查一下变量中($_ENV ,$_GET ,$_POST ,$_COOKIE )是否有这个字段;2)功能特定的触发器名称也有一个旧式的备用名称:( XDEBUG_PROFILE 对应于 Profiling ),(XDEBUG_TRACE 对应于 Function Trace )和 (XDEBUG_SESSION 对应于 Step Debugging );3)也可以通过进行步骤调试的调试会话管理 XDEBUG_SESSION_START 。4)使用 xdebug.trigger_value 可以控制哪个特定的触发器值将激活该触发器。如果xdebug.trigger_value 设置为空字符串,则将接受任何值:示例: http://localhost:8000/test.php?XDEBUG_TRIGGER
|
default |
该default值取决于xdebug.mode :debug :trigger gcstats :no profile :yes trace :trigger
|