我服了,作为一个4年的老 phper,当我想在 windows 上手动搭建环境还是遇到了好多问题,所以通过这篇记录下来,不要每次都是重新开始,每一次都要蹚一遍所有的坑!
php
在官网这个地址 https://windows.php.net/download/ 下载已编译好的php程序。里面同时提供了多个版本,当然选最新版的 php7.4,然后在 php7.4 里面又提供了4个版本,分别是:
- VC15 x64 Non Thread Safe
- VC15 x64 Thread Safe [√]
- VC15 x86 Non Thread Safe
- VC15 x86 Thread Safe
真是选择困难症啊,首先,win10是64位的,那肯定选x64,其次使用的是 apache,所以选择 thread safe 版本(原因请参考1),所以最终选择 VC15 x64 Thread Safe
。如下图1所示,点击下载那个 zip 压缩文件。直接浏览器下载比较慢,所以我把地址复制到迅雷下载会快很多。
图1
![](/images/blog/278026a17aa92c611aefa2d277c8de5e.png]] ![[2860168ef4e7807c40e9d3d36a5c98c6.png)
下载完之后解压缩,我习惯放在 c:/lib/php/php7.4
,然后打开系统环境变量,把 c:/lib/php/php7.4/bin
添加到环境变量,具体操作如下图,这下脑残都能看懂了吧:
图2:WIN+S 打开系统搜索,搜索 env
就出现环境变量
图3:添加环境变量
环境变量添加成功后,就能够在命令行直接运行 php
,打开 cmd/git bash/powershell
或其他你用的任意一个命令行确认一下是否真的可以。哦,看到版本号就说明ok了。
C:\Users\feife>php --version
PHP 7.4.6 (cli) (built: May 12 2020 11:41:06) ( ZTS Visual C++ 2017 x86 )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
php extensions
接下来,就要安装 php 扩展了,在此以 php-redis 扩展为例,其他扩展可以类似操作。
首先,打开 php.ini 文件,如果没有这个文件,就把 c:/lib/php/php7.4/php.ini-development
这个文件复制一份,改名为 c:/lib/php/php7.4/php.ini
,作为我们开发环境下的配置文件。修改一行配置,将 extension_dir
改为绝对路径,不然加载扩展会有问题:
extension_dir = "C:/Lib/php/7.4/ext"
其次打开这个地址 https://windows.php.net/downloads/pecl/releases/ ,这里面列出了 php 在 windows 下面的所有 pecl 扩展。直接 ∧ + F
搜索 redis
,如下图4,点开它:
图4
我们又看到了好多版本的选择,真是选择困难症啊,一般来说,没有特殊项目要求的话,直接选最新版本即可。
图5:选择最新版本redis扩展
点开之后,又出现了 redis 的各个版本,这里根据我们上面选择的 php 版本,我们应该选择 php_redis-5.2.2-7.4-ts-vc15-x64.zip
这个,点击下载:
图6
下载之后解压,得到了 php_redis.dll
文件,把它复制到 c:/lib/php/php7.4/ext
目录下面,
图7
然后打开 php 的配置文件 c:/lib/php/php7.4/php.ini
:
打开 php.ini
后,找到这个位置,添加一行:extension=redis
,
图8
然后在命令行里面输入 php -m
,列出所有已安装的扩展,看看有没有 redis
,如果有,就说明安装成功了,如下图9:
图9
至此扩展就安装完成了,真费劲。
apache
打开这个地址 https://www.apachelounge.com/download/ ,里面列出了 apache 在 windows 下的已编译好的版本。废话不多说,直接下载最新版本 httpd-2.4.43-win64-VS16.zip
。如下图10,然后还要注意一下,还需要下载并安装 vc_redist_x64
,这个要先执行,直接点击安装就行了。否则 apache 启动不起来。
图10
下载后解压,我习惯于放在 c:/lib/apache24
里面,然后如上面描述一样,把 C:\Lib\Apache24\bin
这个地址也添加到环境变量 path
中,然后启动一下看看:
C:\Users\feife>httpd
httpd: Syntax error on line 39 of C:/Lib/Apache24/conf/httpd.conf: ServerRoot must be a valid directory
报了一个错误,那就打开 httpd.conf
配置文件看看:
图11
原来是这个配置 ServerRoot
的问题,默认配置写的是 c:/Apache24
,这个显然不是我们的 apache 安装路径,所以改为 c:/lib/apache24
就可以了。再试一次:
图12
刚才的问题已经没有了,又冒出一个新的问题:AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using fe80::894f:14db:c88a:dfd0. Set the 'ServerName' directive globally to suppress this message
,但注意,这个时候 httpd.exe
并没有退出,说明启动成功,这个消息只是一个警告提示。先到浏览器看一下:
图13
刚才那个警告,可以这样解决:打开 httpd.conf
,找到这一行:#ServerName www.example.com:80
改为 ServerName localhost:80
即可。事实上,我发现不改的话好像也没问题,因为第二次执行 httpd
时已经不报这个错了,在浏览器访问 http://localhost
也成功了,说明它的配置默认也是用的 localhost:80
的。最终效果如下图14:
图14
目前为止,如果我想要apache服务,就必须手动执行 httpd
,很不方便,命令行一退出服务就终止了,所以需要把 apache
安装作为一个服务,系统启动时默认启动。这也简单,命令行执行一下 httpd -k install
即可。下次系统启动时就会自动启动这个服务了,如果现在就要启动这个服务,执行 httpd -k start
即可,如果哪天不想用了,执行 httpd -k uninstall
卸载一下就是了。
如果在卸载的时候遇到:(OS 5)拒绝访问。 : AH10010: Failed to open the 'Apache2.4' service
,如下图15:
图15
这个原因是当前命令行没有以管理员启动,所以要以管理员权限启动之后才可以,如下图16,
图16:以管理员权限启动命令行
我用的是 windows terminal
,cmd
和 powershell
也都有这个选项。但 git bash
没有,这个要注意一下
图17
好了,apache 的安装就结束了。
apache 配置支持 php 项目
我们先配置一下项目,看看会有什么问题。
配置项目
我的项目是 C:\Users\feife\Documents\code\lara-admin
,一个基于 laravel 的后台管理系统,下面要配置这个项目到 http://localhost:8000
访问。
打开 apache 的配置文件 C:\Lib\Apache24\conf\extra\httpd-vhosts.conf
,这个配置文件就是专门用于配置虚拟主机的,里面已经有了两个示例(图18),我们只要在这个基础之上改改就好了。
图18
修改完之后
<VirtualHost *:8000>
DocumentRoot "C:/Users/feife/Documents/code/feiffy.cc/lara-admin/public"
<Directory "C:/Users/feife/Documents/code/feiffy.cc/lara-admin/public">
AllowOverride All
Require all granted
</Directory>
ErrorLog "logs/lara-admin-error.log"
CustomLog "logs/lara-amdin-access.log" common
</VirtualHost>
别忘了,这里虚拟主机的端口号是 8000,还需要在 httpd.conf
增加一行 Listen 8000
以支持 8000 端口的监听。改完保存,重启一下服务 httpd -k restart
再打开 http://localhost:8000
看看:
图19
拒绝了连接,是不是启动失败了?看下错误日志 C:\Lib\Apache24\logs\error.log
,
(OS 5)拒绝访问。 : AH10014: Failed to open the 'Apache2.4' service
哦,对的,这个命令 httpd -k restart
也是需要管理员权限的,再试一次。
图20
怎么直接返回默认 80 端口的内容了,一定是哪里不对,搜索一番,哦,原来这个配置文件 C:\Lib\Apache24\conf\extra\httpd-vhosts.conf
默认是不加载的。那么好办,打开 httpd.conf
,找到这行:
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
把前面的 #
去掉,再重启一次试试:
图21
403错误,这时我们去日志目录看看,发现新增了一个 lara-admin-error.log
的错误日志文件,这至少说明一件事,我们的虚拟主机配置已经生效了,接下来看下这个错误日志内容:
[Sun May 17 13:40:32.171675 2020] [autoindex:error] [pid 9704:tid 1152] [client ::1:5968] AH01276: Cannot serve directory C:/Users/feife/Documents/code/lara-admin/public/: No matching DirectoryIndex (index.html) found, and server-generated directory index forbidden by Options directive
这个简单,是配置的问题,打开 C:\Lib\Apache24\conf\extra\httpd-vhosts.conf
,增加一行 directoryIndex index.php
的配置,完整如下图:
图22
再三重启服务,看看:
图23
如图,直接把 index.php
的源码输出了,我故意的,因为到目前为止,apache 还不支持解析 php 代码,需要额外安装一个 dll 库,此时,apache 就把 index.php
当成普通 txt 文本输出了。
配置 php 支持
要支持 php,需要安装一个 dll,这个 dll 其实 php7.4 已经自带了,就在 C:\Lib\php\7.4\php7apache2_4.dll
,只需要在 apache 的配置文件中一行对这个dll的引用即可。
打开 httpd.conf
,在最后一行添加三行配置,后重启服务,再打开浏览器看看
LoadModule php7_module "C:/Lib/php/7.4/php7apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "C:/Lib/php/7.4"
OK了,最后成功打开。
增加 mod_rewrite 支持
如果不启用这个模块,那么 php 的 index.php 同目录下 的 .htaccess
就不生效,就不能把所有请求重定向到 index.php 了。
打开 httpd.conf
,将下面一行前面的 #
去掉,再重启服务即可:
LoadModule rewrite_module modules/mod_rewrite.so
设置允许跨域
由于我的项目是前后端分离,所以要支持跨域。
首先,需要在 httpd.conf
中开启 mod_headers 模块,找到下面一行,去掉 #
:
LoadModule headers_module modules/mod_headers.so
然后,在 httpd-vhost.conf
文件中加上一行允许的请求域名,完整配置如下:
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost *:8000>
DocumentRoot "C:/Users/feife/Documents/code/lara-admin/public"
<Directory "C:/Users/feife/Documents/code/lara-admin/public">
directoryIndex index.php
AllowOverride All
Require all granted
Header set Access-Control-Allow-Origin *
</Directory>
ErrorLog "logs/lara-admin-error.log"
CustomLog "logs/lara-amdin-access.log" common
</VirtualHost>
再重启服务,即可
End
以上就是一个多年经验的 phper 想要在一台全新的 win10 上面手动搭建 php apache laravel 开发运行环境的心路历程。
完。