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