如何在 Windows 上安装支持 PHP 的 Apache 和 MySQL 服务器没有使用任何现成的软件包,如 WAMPServer 或 XAMPP?
答案1
阿帕奇
首先,我建议你阅读平台特定说明适用于 Windows 的 Apache - 它解释了一些 Windows 特定的功能,例如作为其他操作系统上所没有且可能从未使用过的服务运行。
正如这些平台特定说明中提到的,Apache 不提供适用于 Windows 的二进制文件,但它们有几个提供二进制文件的第三方站点的链接,例如Apache 休息室。
从该网站,我们可以下载 32 位版本(win32)或 64 位版本(Win64)-如果您的操作系统是 64 位,您应该始终尝试安装 64 位版本的软件,但请注意,您还需要使用 64 位模块,这意味着如果您只有 32 位模块,那么请下载 32 位 Apache。
这是我撰写本文时使用的版本:Apache 2.4.10 Win64。本答案最后更新时的最新版本:Apache 2.4.38 Win64(查看帖子底部的编辑日期)。
下载完成后,只需将Apache24
文件夹解压到硬盘的根目录,这样您就会得到类似的路径C:\Apache24\bin
。
打开命令行窗口(Windows+R 并输入cmd
然后按 Enter),将目录更改为C:\Apache24\bin
并运行httpd.exe
,通常它不会打印任何错误。
如果你收到错误对话框,指出MSVCR110.dll
你的系统缺少,则需要安装适用于 Visual Studio 2012 的 Visual C++ 可再发行组件- 与往常一样,出现提示时,选择适当的位版本:vcredist_x86.exe
适用于 32 位系统和vcredist_x64.exe
64 位系统。
如果出现无法绑定到端口 80 的错误,请检查是否有其他应用程序使用该端口 - 众所周知,Skype 默认使用端口 80 和 443;在高级连接设置中取消选中“使用端口 80 和 443 作为传入连接的备用端口”,重新启动 Skype 以应用更改,然后您应该能够顺利启动 Apache。
类似的警告Could not reliably determine the server's fully qualified domain name
目前可以被忽略。
Windows 防火墙可能会提示您允许 Apache 在特定网络上进行通信,我建议您使用默认设置:允许它在家庭和工作网络上进行通信,但不允许在公共/不受信任的网络上进行通信。
然后,打开浏览器并浏览http://localhost
,如果您看到一个页面,显示It works !
“则表示您的 Apache 安装正在运行”。
您现在可以通过在命令提示符中按 Ctrl+C 来停止当前正在运行的 Apache。
如果您收到有关无法确定系统的完全限定域名的警告,请通过编辑C:\Apache24\conf\httpd.conf
和修改ServerName
变量来修复它(它应该已经存在于注释中,只需取消注释并更改它):
ServerName <yourhostname>
替换<yourhostname>
为系统的主机名或localhost
。
最后,如果您想在系统启动时自动运行服务器(即使没有人登录),您需要将其作为服务运行 - 在新的提升的(以管理员身份)命令提示符中,键入:
httpd.exe -k install
就是这样,现在您在服务中有了一个名为“Apache2.4”的新服务(Windows+R 然后输入“services.msc”然后按 Enter),您可以像任何其他 Windows 服务一样控制它。
限制 Apache 仅可访问localhost
-选修的
如果您为了开发目的而进行此项设置,您想确保除了您之外没有人可以访问它,您的防火墙应该已经处理好了这个问题,但是让我们通过告诉 Apache 只接受来自本地机器的请求来为其添加另一层安全性。
打开Apache的配置文件C:\Apache24\conf\httpd.conf
,搜索默认目录块<Directory "c:/Apache24/htdocs">
。
最后应该有一行Require all granted
,这意味着任何人都可以访问此服务器。让我们Require local
只允许从本地计算机访问。
另外,您可以告诉 Apache 仅绑定到环回接口,这样即使您的防火墙和上面提到的访问控制指令都失败,服务器仍然不会向整个互联网开放。
为此,找到Listen
指令(默认设置为80
)并将其更改为以下内容:
Listen 127.0.0.1:80
Listen [::1]:80
第一行是不言自明的,第二行是第一行的 IPv6 等效行,括号用于在 IPv6 表示法中分隔地址和端口。
保存文件,如果您已经在运行服务器,则重新启动它以便将我们的更改考虑在内,现在只有localhost
您可以访问,其他所有人都会获得403 Forbidden
。
PHP
我建议你读一下官方 PHP 文档关于在 Windows 系统上安装它。
从官方下载最新的 PHP 二进制文件适用于 Windows 的 PHP 下载页面,选择与您的 Apache 安装的位版本相匹配的线程安全版本(32 位为 x86,64 位为 x64)。
非线程安全版本仅在作为 CGI 二进制文件运行时才有效 - 更多信息这里。
我使用的版本是这个:PHP 5.6.2 VC11 x64 线程安全。本答案最后更新时的最新版本:PHP 7.3.3 VC15 x64 线程安全(查看帖子底部的编辑日期)。
PHP
在硬盘根目录创建一个空文件夹,并将之前下载的存档解压到那里,您应该有一个类似的路径C:\PHP\ext
,否则您就做错了。
在 中C:\PHP
,将php.ini-production
或php.ini-development
(取决于您的需要)重命名为php.ini
。
打开该php.ini
文件,搜索extension_dir = "ext"
并取消注释该行(删除第一个;
)。这会将默认扩展目录设置为ext
(解析为C:\PHP\ext
,避免必须手动添加ext/
到所有扩展的路径前面,就像在此帖子的先前版本中一样)。
现在配置 Apache 以使用该 PHP,通过编辑C:\Apache24\conf\httpd.conf
- 在所有LoadModule
行之后添加以下内容:
(以下适用于 PHP 7仅有的)
LoadModule php7_module "c:\php\php7apache2_4.dll"
<IfModule php7_module>
AddHandler application/x-httpd-php .php
AddType application/x-httpd-php .php .html
PHPIniDir "c:\php"
</IfModule>
(以下内容适用于 PHP 5仅有的)
LoadModule php5_module C:/PHP/php5apache2_4.dll
<IfModule php5_module>
DirectoryIndex index.html index.php
AddHandler application/x-httpd-php .php
PHPIniDir "C:/PHP"
</IfModule>
现在尝试通过打开命令提示符C:\Apache24\bin
并运行来手动启动 Apache httpd.exe
- 如果您没有看到任何错误,则表示您的配置文件有效并且 PHP最有可能的工作。
您可以通过创建一个类似于 inside 的文件并转到来测试您的 PHP 安装info.php
-<?php phpinfo();
您http://localhost/info.php
应该会看到有关您的系统和 PHP 安装及其所有模块的大量信息。如果您收到其他信息(例如“内部服务器错误”),则表示出现了问题。
您现在可以终止当前的 Apache 进程(在控制台中按 Ctrl+C)并启动服务 - 以下部分不与 Apache 交互,并且可以在已启动的服务器的情况下完成。
作曲家 -选修的
Composer 是 PHP 中用于管理依赖项的工具,类似于包管理器。它可以轻松安装 PHP 包甚至整个框架。
Composer 需要启用 PHP OpenSSL 扩展,因此我们在 中启用它C:\PHP\php.ini
。
使用文本编辑器的搜索功能搜索php_openssl.dll
,应该已经有一行注释了,只需取消注释该行即可。
按照说明进行操作,当提示输入 PHP 路径时,浏览C:\PHP
并选择php.exe
。
就是这样,Composer 现在已经在系统范围内安装并可以从任何地方使用 - 您可以尝试一下,只需打开一个新的命令提示符(您不能使用已经打开的命令提示符,因为它需要读取PATH
由 Composer 安装程序设置的新变量)并输入composer
。
你应该得到一个漂亮的 ASCII 艺术标志和类似的东西:
Composer version e87bc894daf8d5f8e77a01dd7ae5f0446ae30b14 2014-05-01 15:40:28
PHP MySQL 扩展 -选修的
如果您想从 PHP 访问您的 MySQL 数据库,您需要启用允许您这样做的扩展,如php_mysqli
或php_pdo_mysql
- 我建议同时启用它们。
C:\PHP\php.ini
在文本编辑器中打开 PHP 的配置文件并搜索php_mysqli
或php_pdo_mysql
- 它们应该已经存在,取消注释它们。
完成后,你可以使用以下任一方式访问任何 MySQL 数据库mysqli
或者PDO
。
MySQL
在MySQL 安装程序下载页面下载网络安装程序mysql-installer-web-community-xxxxx.msi
。
我使用了 mysql-installer-web-community-5.6.21.1.msi。此答案上次更新时的最新版本:mysql-安装程序-web-社区-8.0.15.0.msi(查看帖子底部的编辑日期)。
安装程序将根据您的系统自动安装适当的版本(32 位或 64 位),尽管 MySQL 的位版本不必与 Apache 和 PHP 的位版本匹配,但使用 64 位版本仍然是有益的,因为您的系统支持它来利用更多功能3 GB 内存,这非常重要,因为数据库服务器往往会使用大量的 RAM。
按照安装程序中的步骤进行操作,如果您是为了开发而安装它,那么这Developer default
将是您的最佳选择,它还将安装本机 GUI 客户端 MySQL Workbench,从而避免您必须安装缓慢的基于 Web 的工具(如 PHPMyAdmin)(如果您不习惯使用命令行客户端)。
一旦一切都安装完毕,安装程序将询问您一些基本的配置值,我建议禁用“打开防火墙端口进行网络访问”,除非您想从网络上的另一台机器访问数据库。
设置根密码 - 如果仅用于开发目的并且防火墙阻止来自网络的传入连接,则不需要强密码。
最后,您可以禁用无用的 MySQL Notifier,方法是右键单击托盘图标,进入操作 -> 选项,然后取消选中复选框Run at Windows Startup
并应用。这将为您节省几 MB 的 RAM,并避免在启动时降低机器速度。
就是这样,您现在拥有一个功能齐全的 WAMP 服务器,它作为服务运行并且不依赖于任何用户(即使没有人登录也可以访问)。
请注意,我不知道这是否安全,出于开发目的,我认为这是相当安全的,因为你的防火墙应该阻止 Apache(端口 80 和/或 443)和 MySQL(端口 3306)的传入连接。
这是在 Windows 7 安装上测试的,它也应该可以在 Vista、Windows 8 和可能的 Windows Server 2008/2012 上正常工作 - 如果不是这种情况,请随意评论和/或投反对票。
答案2
PHP 7
上述答案中的说明自 2017 年 7 月起完美运行,但是,如果您希望使用 PHP 7,则必须将以下几行添加到C:\Apache24\conf\httpd.conf
,而不是该答案中的行(仅适用于 PHP 5)[在所有行后添加以下内容LoadModule
]:
LoadModule php7_module C:/PHP/php7apache2_4.dll
<IfModule php7_module>
DirectoryIndex index.html index.php
AddHandler application/x-httpd-php .php
PHPIniDir "C:/PHP"
</IfModule>
确保所有路径正确。如果您的 PHP 目录中没有php7apache2_4.dll
,则可能是您下载了错误的包。