[TOC]
原文地址 blog.csdn.net
一. 介绍
LAMP:
- L:Linux- - - - - - - - - - - - - - - - - - - - - 操作系统
- A:Apache - - - - - - - - - - - - - - - - - - - HTTP 服务器
- M:Mysql - - - - - - - - - - - - - - - - - - - – 数据库软件
- P:PHP(Perl 或 Python)- - - - - - - - - - 开源的一种编程语言
WAMP :
widows+apahce+mysql+php
因为我使用的是 mac 电脑,所以这里就不在多说了。
二. Apache 和 PHP
mac 系统是自带有 Apache 和 PHP 的。我们无需自己安装,但是可能会版本有所不同。
2.1 Apache
1. 常用命令:
开启:
1
sudo httpd -k start (或 sudo apachectl start)
可以查看一下 Apache 服务是否开启成功,在浏览器中输入 localhost:80(80 是默认端口),如果浏览器中显示 It Works!则证明 Apache 服务开启成功
关闭:
1
sudo httpd -k stop (或 sudo apachectl stop)
重启:
1
sudo httpd -k restart (或 ssudo apachectl restart)
查看版本:
1
httpd -v
检测 apche 配置:
1
httpd -t
检测 Apache 当前的依赖
1
httpd -M
2. 相关文件的位置
1. 安装路径
Apache 服务的默认安装路径是/etc/apache2
因为不调好找我们可以在 Finder 下使用快捷键 command+shift+g,然后输入 / etc 回车,就会看到 apache2 目录
2.Apache 服务部署路径
Apache 服务部署路径在 /Library/WebServer/Documents 目录下,使用快捷键command+shift+g后进入 Library(资源库),倒数第二个 WebSever 文件夹下的 Documents 目录就是 Apache 服务的部署路径,我们的项目需要放在此目录下。
3. 更改 apache 的端口
当 Apache 服务开启成功,在浏览器中输入 localhost:80(80 是默认端口),如果我们想更改端口
将 Apache 默认安装路径是/etc/apache2/httpd.conf打开,
搜索 Listen80,修改成你想要的端口号即可(注:对配置文件修改过后要一定要重启 Apache 服务)
3.apche 工作原理
apache 本身没有功能,它的功能是加载的模块提供的。
4.apache 启动过程
2.PHP 结合 Apache 一起使用
PHP 官网:http://www.php.net/
1. 引入 PHP 的组件
由上面我们知道 Apache 是需要各个组件的,所以如果想将他们一起使用,Apache 需要引用 PHP 的组件。
将 Apache 配置文件/etc/apache2/httpd.conf打开,并将引入 PHP 的代码去掉注释
2. 引入测试文件
我们创建 index.php
1
2
<?php
phpinfo();
将其放在 Apache 服务部署路径在 /Library/WebServer/Documents 目录下
然后打开网站 http://localhost/index.php
三. MySql
-
下载社区服务器
https://dev.mysql.com/downloads/mysql/
注意:安装 MySQL 时给的用户和密码很重要,将来是登录 MySQL 服务
-
下载完后的设置
查看版本:
1
mysql --version
会报错,报错信息为: zsh: command not found: mysql ,这是因为该命令默认访问/usr/local/bin/mysql 路径下的 mysql,所以我们需要建立一个软连接即可,可以在终端中使用如下命令:
1
sudo ln -fs /usr/local/mysql/bin/mysql /usr/local/bin/mysql
这个时候再次利用安装 MySQL 时给出的用户和密码登录 MySQL 服务,在终端输入如下命令后回车,需要输入 MySQL 密码:
1
mysql -u root -p //使用root用户登录
此时已经进入了 MySQL 服务,退出的命令为 quit(exit 也可以)
-
设置全局变量
启动 MySQL 服务
1
sudo /usr/local/mysql/support-files/mysql.server start
停止 MySQL 服务
1
sudo /usr/local/mysql/support-files/mysql.server stop
我们会发现很是不方便,所以我们需要设置全局变量
设置全局配置文件
1
vim ~/.bash_profile (也可以直接open ~/.bash_profile 直接将配置文件打开)
加入全局变量
1
PATH=$PATH:/usr/local/mysql/bin
应用
1
source ~/.bash_profile
如果有错
用 vi 修改文件,保存文件时,提示 “readonly option is set”的解决方法。
步骤:
-
按 Esc 键
-
输入 :set noreadonly
-
然后就能正常保存了,你可以输入 :wq 来保存文件了。
-
常用命令
登录 Mysql:以 root 的身份登录
1
mysql -uroot -p
表示超级用户名 root, 密码稍后输入,端口号 3306(不输入 P 默认为 3306),
主机地址 127.0.0.1(若使用本机作为主机,h 默认 127.0.0.1)
mysql 退出三种方法:
1
2
3
4
5
exit;
quit;
\q;
5.Apache 和 php 以及 Mysql 一起使用
我们创建 index.php
1
2
<?php
mysqli_connect('localhost','root','haochangdi') or die('error');
然后运行 Mysql 和 Apache,打开 http://localhost/index.php
5.1 错误 1
会发现报错了
我们将 localhost 就会报此错误,改成 127.0.0.1 后正常。
原因:
当主机填写为 localhost 时 MySQL 会采用 unix domain socket 连接,当主机填写为 127.0.0.1 时 MySQL 会采用 TCP/IP 的方式连接。使用 Unix socket 的连接比 TCP/IP 的连接更加快速与安全。这是 MySQL 连接的特性,可以参考官方文档的说明 4.2.2. Connecting to the MySQL Server。
解决方案:
- 使用 TCP/IP 代替 Unix socket。即在连接的时候将 localhost 换成 127.0.0.1。
- 修改 MySQL 的配置文件 my.cnf,指定 mysql.socket 的位置:
/var/lib/mysql/mysql.sock(你的 mysql.socket 路径)。 - 直接在 php 建立连接的时候指定 my.socket 的位置(官方文档:mysqli_connect)。比如:
$db = new MySQLi(‘localhost’, ‘root’, ‘root’, ‘my_db’, ‘3306’, ‘/var/run/mysqld/mysqld.sock’)
通常意义上 localhost 和 127.0.0.1 是等价的,只是 mysql 在处理这个名词的问题上有一些不同,是根据不同的地址来采取的不同的通信手段。
问题的最终解决方案是在连接的时候手动指定了 sock 文件的路径
5.2 错误 2
当我们将localhost改为127.0.0.1后,再次打开 http://localhost/index.php,发现任然报错
(HY000/2054): The server requested authentication method unknown to the clie
原因:
mysql8.0 改变了密码的验证方式,我们需要连接 PHP 和 mysql8.0 时刷新密码
解决方法:
更改 root 密码(注意加分号)
1
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '【密码】';
刷新权限:
1
flush privileges;
然后关闭重启就可以了。
-
Web 界面的客户端—phpmyadmin
我们可以通过网站直接访问我们的服务器
下载地址:http://www.phpmyadmin.net/home_page/downloads.php
将下载下来的解压,并改名为 phpmyadmin,放在 /Library/WebServer/Documents/ 目录下,完整的目录为:/Library/WebServer/Documents/phpmyadmin/,那么命令行进入这个目录,输入以下命令:
1
2
cp config.sample.inc.php config.inc.php
vim config.inc.php
按照下面进行修改:
1
2
$cfg['blowfish_secret'] = ''; //用于Cookie加密,随意的长字符串
$cfg['Servers'][$i]['host'] = '127.0.0.1'; //MySQL守护程序做了IP绑定
接着我们就可以在浏览器中输入 URL:http://localhost/phpmyadmin/
用户名为:root 密 码:admin
此时就可以 login 到 mysql 的管理界面。
四. 搭建虚拟主机
我们可以利用 Apache 搭建虚拟主机。
我们需要了解几个概念:
站点:一个文件夹,用来保存与网站有关的文件
虚拟目录:站点 + 权限
虚拟主机:虚拟目录和域名绑定在一起
4.1 更改 apache 虚拟目录
在 Apache 配置文件/etc/apache2/httpd.conf中,
DocumentRoot 指向的就是 Apache 虚拟主机的目录,我们只要更改这个目录就可以了。那么 Apache 运行起来后指向的文件地址就会发生变化。
1
DocumentRoot "/Library/WebServer/Documents"
例如我们可以将其改为:
1
DocumentRoot "/test"
这时候我们访问:
发现是不能访问的,那是因为我们还没有权限
4.2 更改虚拟目录的权限
在 Apache 配置文件/etc/apache2/httpd.conf中,在Directory中写虚拟目录路径,标签内写配置
1
2
3
4
<Directory "/test">
Allow from all
</Directory>
例题 1
1
2
3
Order allow,deny
Allow from all
//全部允许
例题 2
1
2
3
Order allow,deny
Deny from all
//全部拒绝
例题 3
1
2
3
4
Order allow,deny
Allow from all
Options Indexes
//显示该文件的目录
例题 4
1
2
3
4
5
6
<Directory "/PHP/Apache/test">
Order deny, allow
Allow from 192.168.101.50
Deny from 192.168
</Directory>
//拒绝192.168开头的IP地址(192.168.101.50除外)
例题 5
1
2
3
4
5
6
<Directory "/PHP/Apache/test">
Order deny, allow
Allow from 192.168.101.50
Deny from all
</Directory>
//允许192.168.101.50,其他都拒绝
例题 6
1
2
3
4
5
6
<Directory "/PHP/Apache/test">
Order allow,deny
Allow from 192.168
Deny from 192.168.101.50
</Directory>
//只允许192.168开头的IP,192.168.101.50除外
4.3 更改默认首页
在/etc/apache2/httpd.conf文件下
默认找 index.html 没有的话就找 index.php……
1
2
3
<IfModule dir_module>
DirectoryIndex index.html index.php a.php
</IfModule>
4.4 开启虚拟主机
-
打开 Apche 的配置文件
/etc/apache2/httpd.conf -
在 httpd.conf 中找到
#Include /private/etc/apache2/extra/httpd-vhosts.conf,去掉前面的 “#”,保存并退出。 -
打开了配置虚拟主机文件
/etc/apache2/extra/httpd-vhosts.conf,配置虚拟主机了。
(需要注意的是该文件默认开启了两个作为例子的虚拟主机,要他们注释掉) -
在 httpd-vhosts.conf 中配置虚拟主机
80 指的是 80 端口
例如:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<VirtualHost *:80>
DocumentRoot "/Library/WebServer/aaa"
ServerName "www.aaabbb.com"
ErrorLog "/private/var/log/apache2/test-error_log"
CustomLog "/private/var/log/apache2/test-access_log" common
<Directory />
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "/Library/WebServer/bbb"
ServerName "www.bb.com"
ErrorLog "/private/var/log/apache2/test-error_log"
CustomLog "/private/var/log/apache2/test-access_log" common
<Directory />
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
http://www.aaabbb.com/ 访问到是/Library/WebServer/aaa文件夹
http://www.bb.com/ 访问到是/Library/WebServer/bbb文件夹
- 关闭主文件中的虚拟主机
因为如果不关闭,输入的域名会被解析到主配置中的虚拟目录中。将/etc/apache2/httpd.conf文件下面的代码注释
1
DocumentRoot "/Library/WebServer/Documents"
- 运行
sudo vi /etc/hosts,打开 hosts 配置文件,加入”127.0.0.1 www.aaabbb.com” 和”127.0.0.1 www.bb.com”,这样就可以配置完成 test 虚拟主机了。
这也就是为何要执行第 5 步的原因,因为 www.aaabbb.com 和 www.bb.com 其实指向的任然是 127.0.0.1,如果主配置中有指向,那么后面的指向就会发生问题。
-
运行
sudo apachectl restart,重启 Apache 后就开启了虚拟主机配置功能。 -
分布式部署
上一节我们讲到了 Apache 可以搭建虚拟主机,但是我么你会发现配置主机的时候耦合度是很高的,并且如果httpd.conf配置发生变化,那么所有的虚拟主机的配置都发生变化。如何实现不同的虚拟主机有不同的配置?
这就需要分布式部署了:
其实很简单,就是给每一个虚拟主机的创建一个为.htaccess的文件,该文件又称为分布式部署文件,这个文件可以覆盖httpd.conf文件中的配置。一个网站下可以有多个分布式部署文件。每个. htaccess 文件只能作用于当前目录和子目录。
5.1 基本配置
例如:
原来我们的配置是
1
2
3
4
5
6
7
8
9
10
11
12
<VirtualHost *:80>
DocumentRoot "/Library/WebServer/bbb"
ServerName "www.bb.com"
ErrorLog "/private/var/log/apache2/test-error_log"
CustomLog "/private/var/log/apache2/test-access_log" common
<Directory />
Options Indexes FollowSymLinks MultiViews
AllowOverride None // 不允许使用分布式部署
Order deny,allow
Allow from all
</Directory>
</VirtualHost>
现在改为:
- 更改配置虚拟主机文件
/etc/apache2/extra/httpd-vhosts.conf中的配置
1
2
3
4
5
6
7
8
9
10
// 主要是更改Directory标签内的内容
<VirtualHost *:80>
DocumentRoot "/Library/WebServer/bbb"
ServerName "www.bb.com"
ErrorLog "/private/var/log/apache2/test-error_log"
CustomLog "/private/var/log/apache2/test-access_log" common
<Directory />
AllowOverride all //允许分布式部署覆盖主配置文件
</Directory>
</VirtualHost>
2 新建.htaccess文件
代码为:
1
2
3
4
// 其实就是将原来配置中的Directory标签内的内容移过来
Options Indexes FollowSymLinks MultiViews
Order deny,allow
Allow from all
总结:
1、 Apache 配置文件由主配置文件和分布式配置文件组成
2、 主配置文件修改后需要重启服务器,分布式配置修改后不需要重启服务器。
3、 创建分布式部署文件必须借助于编辑器。
4、 分布式部署会降低 Apache 的性能,不是必须使用就不要用。
5、 必须在虚拟主机中允许分布式部署文件覆盖。
5.2 通过分布式部署文件更改 PHP 配置
一般来说 PHP 的配置信息有两种格式:
(我只是举例子,并不真的是 PHP 的属性)
1
2
asd = on/off // 开关性质的配置
fgh = 4 // 值性质的配置
我们可以在分布式部署文件.htaccess中去更改 PHP 的这两种属性。
php_flag————- 用来更改开关性质的配置
php_value————用来更改值性质的配置
例如:
我们在.htaccess更该属性:
在 PHP 文件中获取
会发现属性值已经被改变了(ini_get() 用来获取 php 配置的值)