如何在不使用任何现成可用的软件包(例如WAMPServer或XAMPP)的情况下在Windows上安装具有PHP支持的Apache和MySQL服务器?
如何在不使用任何现成可用的软件包(例如WAMPServer或XAMPP)的情况下在Windows上安装具有PHP支持的Apache和MySQL服务器?
Answers:
首先,我建议您阅读Apache for Windows 的平台特定说明 -它解释了Windows特定的一些功能,例如作为服务运行,这是您在其他OS上所没有的,并且以前可能从未使用过。
如这些平台特定说明中所述,Apache不提供Windows二进制文件,但是它们具有指向多个提供二进制文件的第三方站点的链接,例如Apache Lounge。
从该网站,我们可以下载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
run httpd.exe
,通常不会显示任何错误。
如果出现错误对话框,指出MSVCR110.dll
系统上缺少该对话框,则需要安装Visual Studio 2012的Visual C ++ Redistributable-与往常一样,在出现提示时,选择适当的位版本: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
就是这样,现在您在“服务”中有一个新服务(Windows + R,然后键入“ services.msc”,然后按Enter),名为“ Apache2.4”,您可以像其他任何Windows服务一样进行控制。
localhost
只有- 可选如果您出于开发目的进行此设置,则要确保除您之外的任何人都无法访问它,防火墙应该已经解决了这一问题,但是,让Apache接受来自本地的请求,让我们为其添加另一安全层仅机器。
打开Apache的配置文件C:\Apache24\conf\httpd.conf
,搜索默认目录块<Directory "c:/Apache24/htdocs">
。
如果结尾,应该有一行Require all granted
,这意味着任何人都可以访问该服务器。让我们做Require local
一个只允许从本地机器访问的东西。
另外,您可以告诉Apache仅绑定到环回接口,这样即使您的防火墙和上述访问控制指令都失败了,服务器仍不会对整个Internet开放。
为此,找到Listen
指令(默认情况下将其设置为80
)并将其更改为以下内容:
Listen 127.0.0.1:80
Listen [::1]:80
第一行是不言自明的,第二行是第一行的IPv6等效项,括号在IPv6表示法中用于分隔地址和端口。
保存文件(如果您已经在运行服务器),然后重新启动它以考虑我们的更改,现在只有localhost
访问权限,其他人将获得一个403 Forbidden
。
我建议您阅读有关在Windows系统上安装的官方PHP文档。
从Windows的官方PHP下载页面下载最新的PHP二进制文件,选择与您的Apache安装的位版本匹配的线程安全版本(x86表示32位,x64表示64位)。
非线程安全版本仅当作为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很可能在工作。
您可以通过创建一个文件一样测试你的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
,应该已经有一条注释行,只需取消注释该行即可。
现在从其下载页面下载Composer的Windows安装程序-或仅使用此直接链接。
按照说明进行操作,当提示您输入PHP的路径时,浏览C:\PHP
并选择php.exe
。
就是这样,Composer现在已在整个系统范围内安装,可以在任何地方使用-您可以尝试一下,只需打开一个新的命令提示符即可(您不能使用已打开的命令提示符,因为它需要读取PATH
Composer的新变量集安装程序),然后输入composer
。
您应该会得到一个漂亮的ASCII艺术徽标以及类似以下内容:
Composer version e87bc894daf8d5f8e77a01dd7ae5f0446ae30b14 2014-05-01 15:40:28
如果要从PHP访问MySQL数据库,则需要启用允许您这样做的扩展,例如php_mysqli
或php_pdo_mysql
-我建议同时启用它们。
C:\PHP\php.ini
在文本编辑器中打开PHP的配置文件,然后搜索php_mysqli
或php_pdo_mysql
-它们应该已经存在,请取消注释。
完成后,现在您可以使用mysqli
或访问任何MySQL数据库PDO
。
在MySQL Installer下载页面上,下载Web安装程序mysql-installer-web-community-xxxxx.msi
。
我使用了mysql-installer-web-community-5.6.21.1.msi。上次更新此答案的最新版本:mysql-installer-web-community-8.0.15.0.msi(请查看文章底部的编辑日期)。
安装程序将根据您的系统自动安装适当的版本(32位或64位),即使MySQL的位版本不必与Apache和PHP的位版本匹配,但使用64位版本的系统仍然有益系统支持它以利用超过3 GB的RAM,这非常重要,因为数据库服务器倾向于使用大量RAM。
按照安装程序中的步骤进行操作,如果要为开发而安装它,那么Developer default
它将是您的最佳选择,它还将安装MySQL Workbench(它是本机GUI客户端),从而避免了您必须安装慢速的基于Web的工具,例如如果您不习惯使用命令行客户端,请使用PHPMyAdmin。
安装完所有内容后,安装程序将询问您一些基本配置值,除非您要从网络上的另一台计算机访问数据库,否则我建议禁用“打开防火墙端口以供网络访问”。
设置root密码-如果仅用于开发目的并且您的防火墙阻止来自网络的传入连接,则无需使用强密码。
最后,您可以通过以下方法禁用无用的MySQL通知程序:右键单击任务栏图标,进入“操作”->“选项”,然后取消Run at Windows Startup
选中该复选框并应用。这样可以为您节省几MB的RAM,并避免在启动计算机时降低计算机的速度。
就是这样,您现在有了一个功能齐全的WAMP服务器,它可以作为服务运行,并且不依赖于任何用户(即使没有人登录也可以访问)。
请注意,我不知道它的安全性,出于开发目的,我会说这是相当安全的,因为您的防火墙应该阻止Apache(端口80和443)和MySQL(端口3306)的传入连接。
这已在Windows 7安装上进行了测试,它在Vista,Windows 8以及可能的Windows Server 2008/2012上也应该可以正常工作-如果不是这样,请随时发表评论和/或投票。
MSVCR110.dll
错误出现时(在当前的Apache版本上),我最终安装了Visual C ++ Redistributable 2010 SP1。后来我得到了有关该文件的另一个错误VCRUNTIME140.dll
,这需要我安装Visual C ++可再发行的Visual Studio 2015年
截至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>
确保所有路径均正确。如果您不在php7apache2_4.dll
PHP目录中,则可能是下载了错误的软件包。