今天笔者决定要重新学习PHP,以应聘后端开发的相关职位,遂拿出我安装了Linux Mint 19.3(基于Ubuntu 18.04)的笔记本,安装Apache2+PHP开发环境。查阅了不少资料,然而相关资料非常散装,折腾了一个多小时,遂把折腾的心得,整理成这篇教程。
安装
安装Apache2
只需运行以下命令即可安装Apache2:
1 |
|
默认情况下,Apache2会安装成一项系统服务,日后可以通过/etc/init.d/apache2
和systemctl apache2
来进行管理。通过以下命令检测Apache2是否安装上:
1 |
|
注意:新版本的Apache2已经废弃了组件httpd
,由可执行文件apache2
替代。
安装PHP
Ubuntu 18.04默认提供的PHP版本是7.2,可以采用“宏包”的形式安装——安装一个php
包,就可以安装上所有基本的PHP组件:
1 |
|
运行后,从APT的输出结果可以看出,必要的组件都将会装上,其中包括Apache2服务器上的PHP模块:
1 |
|
安装完成后,可以运行php -v
来检测PHP是否安装好。安装成功后,会显示版本信息:
1 |
|
安装PHP模块
Ubuntu中的PHP模块均使用软件包提供,需要什么模块就安装哪个包,例如MySQL和cUrl模块:
1 |
|
这些包也是宏包,不带版本号,默认会安装与当前PHP对应的版本。
配置
Windows下的集成包Wamp Server和XAMPP是开箱即用的,意味着安装后无需专门进行配置,即可直接使用Apache2和PHP。但手动安装的Apache2和PHP都不行,必须费一番功夫折腾配置文件。
主要涉及到的配置文件有:
/etc/apache2/apache2.conf
:主配置文件。它可以用Include指令来包含其他的配置文件。/etc/apache2/sites-avaliable/
:存放站点配置文件的目录。一个Apache2服务器可以运行多个站点。/etc/apache2/sites-enabled/
:启用的站点配置文件,存放sites-available
中配置文件的链接,想启用哪个就吧哪个链接进来。貌似把配置文件本体放进来是不会起作用的。
其他供参考的配置文件:
/etc/apache2/mods-avaliable/
:存放模块配置文件的目录。Apache2服务器可以加载各种模块,PHP语言支持正是用模块来提供的。- 这里的配置文件又有两种类型(语法完全相同):
*.conf
,为模块的配置信息,相当于apache2.conf
的补充;*.load
,为模块自动加载的入口文件,里面的内容为LoadModule
指令。
- 这里的配置文件又有两种类型(语法完全相同):
/etc/apache2/mods-enabled/
:与sites-enabled/
类似,想启用哪个模块,就把哪个模块的配置文件链接进来。
注意:新版本的Apache2已经不再使用httpd.conf
作为配置文件,它的作用被apache2.conf
和其他附属配置文件取代。
修改站点配置文件
Apache2配置文件有专门的语法,其中,每个配置项的格式为:配置项名 配置值
。
安装Apache2后,站点配置文件中就有了一个默认的配置:000-default.conf
。
一般需要修改或添加以下配置项:
ServerName
:服务器的域名。- 在本地开发PHP的,把域名设置为
localhost
即可。
- 在本地开发PHP的,把域名设置为
DocumentRoot
:站点文件的根目录,例如index.html
等文件要存放的目录。- 默认为
/var/www/
或/var/www/html/
。 - 将它改为你用户主目录下的一个目录。这里使用
/home/username/.apache/default_site
。
- 默认为
DirectoryIndex
:站点入口文件名,即未输入网页文件名时,Apache2会给你加载的文件名。- 将它设为
index.html index.htm index.php
。
- 将它设为
修改后的配置文件大致如下所示:
1 |
|
修改目录权限
设置站点的DocumentRoot
后,默认情况下用户是没有它的访问权限的,这时如果直接使用localhost
访问,会提示“403 Forbidden”。
解决办法是,在apache2.conf
中添加新DocumentRoot
目录的权限。配置文件中管理目录权限的段如下所示:
1 |
|
可见,几个默认的目录都有相应的权限配置。因此我们也需要把自己的DocumentRoot
目录加进来,添加以下内容到这一部分(或文件尾部):
1 |
|
重启服务器
要想设置生效,必须重启服务器。运行以下命令重启Apache2:
1 |
|
或者是
1 |
|
检查服务器是否能访问
在DocumentRoot
中新建一个index.php
:
1 |
|
然后打开浏览器,访问 http://localhost 或 http://127.0.0.1,出现PHP的详细信息,即配置成功。
解决问题
无法使用PHP
一般地,PHP的宏包会同时安装好Apache2的PHP模块 libapache2-mod-php7.2
,不仅会放置模块的文件,更会在/etc/apache2/mods-avaliable
中放置好相应的配置文件,无需手动添加PHP的支持。因此,安装宏包(或单独安装PHP模块)后,Apache2服务器就能自动支持PHP。
但是总会有一些异常原因,使得服务器不能解析PHP文件(例如先安装PHP再安装Apache2)。可按照以下办法解决。
(1) 排查是否未启用PHP模块
使用apache2ctl
来查看当前已加载的模块列表:
1 |
|
如果PHP模块已加载,则会输出下面结果,否则为空:
1 |
|
(2) 重新安装PHP支持模块
如果上述命令找不到PHP模块,则Apache2的PHP模块可能已丢失,运行以下命令以补上:
1 |
|
(3) 手工启用PHP模块
如果libapache2-mod-php7.2
已经安装,却仍无法启动,则可尝试手动启用:
1 |
|
期间会自动处理模块之间的依赖关系,输出如下结果:
1 |
|
如果发生如下依赖关系的错误,则可先禁用掉相应的模块,然后再启用。笔者的处理过程如下:
1 |
|
最后,重新启动Apache2,使更改生效:
1 |
|
参考资料
- [Apache] Forbidden 403 错误原因与解决
- ubuntu apache2配置
- apache2 不支持php文件 解决办法
- Ubuntu 配置 Apache, MySQL, PHP 以及 phpMyAdmin 过程记录
- Ubuntu Apache配置及开启mod_rewrite模块
- 本文作者: 爱拼安小匠
- 本文链接: https://anclark.github.io/2019/12/28/PHP/在Ubuntu上配置Apache2+PHP/
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-ND 3.0(署名-非商用-禁止演绎 3.0) 许可协议。转载请注明出处!