PHP---1.Mac环境下LAMP的搭建

一.介绍

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

官网:https://www.apache.org/

1.常用命令:

开启:

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

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服务)
 PHP---1.Mac环境下LAMP的搭建_第1张图片

3.apche工作原理

 PHP---1.Mac环境下LAMP的搭建_第2张图片
 apache本身没有功能,它的功能是加载的模块提供的。

4.apache启动过程

 PHP---1.Mac环境下LAMP的搭建_第3张图片
 

2.PHP 结合 Apache一起使用

PHP官网:http://www.php.net/

1.引入PHP的组件

由上面我们知道Apache是需要各个组件的,所以如果想将他们一起使用,Apache需要引用PHP的组件。
将Apache配置文件/etc/apache2/httpd.conf打开,并将引入PHP的代码去掉注释
这里写图片描述

2. 引入测试文件

我们创建index.php


phpinfo();

将其放在 Apache服务部署路径在 /Library/WebServer/Documents 目录下

然后打开网站 http://localhost/index.php
PHP---1.Mac环境下LAMP的搭建_第4张图片

三.MySql

官网:https://www.mysql.com/

1.下载社区服务器

https://dev.mysql.com/downloads/mysql/
PHP---1.Mac环境下LAMP的搭建_第5张图片
注意:安装MySQL时给的用户和密码很重要,将来是登录MySQL服务

2.下载完后的设置

查看版本:

mysql --version 

会报错,报错信息为: zsh: command not found: mysql ,这是因为该命令默认访问/usr/local/bin/mysql 路径下的mysql,所以我们需要建立一个软连接即可,可以在终端中使用如下命令:

 sudo ln -fs /usr/local/mysql/bin/mysql /usr/local/bin/mysql 

 这个时候再次利用安装MySQL时给出的用户和密码登录MySQL服务,在终端输入如下命令后回车,需要输入MySQL密码:

 mysql -u root -p     //使用root用户登录

此时已经进入了MySQL服务,退出的命令为quit(exit也可以)

3.设置全局变量

启动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 来保存文件了。

4.常用命令

登录Mysql:以root的身份登录

mysql -uroot -p

表示超级用户名root,密码稍后输入,端口号3306(不输入P默认为3306),
主机地址127.0.0.1(若使用本机作为主机,h默认127.0.0.1)

mysql退出三种方法:

exit;

quit;

\q;

5.Apache和php以及Mysql一起使用

我们创建index.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。

解决方案:

  1. 使用TCP/IP代替Unix socket。即在连接的时候将localhost换成127.0.0.1。
  2. 修改MySQL的配置文件my.cnf,指定mysql.socket的位置:/var/lib/mysql/mysql.sock (你的mysql.socket路径)。
  3. 直接在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时刷新密码

解决方法:
PHP---1.Mac环境下LAMP的搭建_第6张图片
更改root密码(注意加分号

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '【密码】';

刷新权限:

flush privileges;

然后关闭重启就可以了。

6. Web界面的客户端—phpmyadmin

我们可以通过网站直接访问我们的服务器
下载地址: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搭建虚拟主机。

我们需要了解几个概念:
站点:一个文件夹,用来保存与网站有关的文件
虚拟目录:站点+权限
虚拟主机:虚拟目录和域名绑定在一起

4.1 更改apache虚拟目录

在Apache配置文件/etc/apache2/httpd.conf中,
DocumentRoot指向的就是Apache虚拟主机的目录,我们只要更改这个目录就可以了。那么Apache运行起来后指向的文件地址就会发生变化。

DocumentRoot "/Library/WebServer/Documents"

例如我们可以将其改为:

DocumentRoot "/test"

这时候我们访问:
PHP---1.Mac环境下LAMP的搭建_第7张图片
发现是不能访问的,那是因为我们还没有权限

4.2更改虚拟目录的权限

在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除外

4.3 更改默认首页

/etc/apache2/httpd.conf文件下
默认找index.html 没有的话就找index.php……


    DirectoryIndex index.html index.php a.php

4.4 开启虚拟主机

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中配置虚拟主机
PHP---1.Mac环境下LAMP的搭建_第8张图片
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文件夹
PHP---1.Mac环境下LAMP的搭建_第9张图片

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,如果主配置中有指向,那么后面的指向就会发生问题。
PHP---1.Mac环境下LAMP的搭建_第10张图片
PHP---1.Mac环境下LAMP的搭建_第11张图片
7.运行sudo apachectl restart,重启Apache后就开启了虚拟主机配置功能。

5.分布式部署

上一节我们讲到了Apache可以搭建虚拟主机,但是我么你会发现配置主机的时候耦合度是很高的,并且如果httpd.conf配置发生变化,那么所有的虚拟主机的配置都发生变化。如何实现不同的虚拟主机有不同的配置?
这就需要分布式部署了:
PHP---1.Mac环境下LAMP的搭建_第12张图片
其实很简单,就是给每一个虚拟主机的创建一个为.htaccess的文件,该文件又称为分布式部署文件,这个文件可以覆盖httpd.conf文件中的配置。一个网站下可以有多个分布式部署文件。每个.htaccess文件只能作用于当前目录和子目录。

5.1 基本配置

例如:
原来我们的配置是

 
    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> 
 

2 新建.htaccess文件
这里写图片描述
代码为:

// 其实就是将原来配置中的Directory标签内的内容移过来
Options Indexes FollowSymLinks MultiViews
Order deny,allow 
Allow from all 

总结:
1、 Apache配置文件由主配置文件和分布式配置文件组成
2、 主配置文件修改后需要重启服务器,分布式配置修改后不需要重启服务器。
3、 创建分布式部署文件必须借助于编辑器。
4、 分布式部署会降低Apache的性能,不是必须使用就不要用。
5、 必须在虚拟主机中允许分布式部署文件覆盖。

5.2 通过分布式部署文件更改PHP配置

一般来说PHP的配置信息有两种格式:
(我只是举例子,并不真的是PHP的属性)

asd = on/off     // 开关性质的配置 
fgh = 4          // 值性质的配置

我们可以在分布式部署文件.htaccess中去更改PHP的这两种属性。
php_flag————-用来更改开关性质的配置
php_value————用来更改值性质的配置

例如:
我们在.htaccess更该属性:
这里写图片描述

在PHP文件中获取
这里写图片描述
会发现属性值已经被改变了(ini_get()用来获取php配置的值)

你可能感兴趣的:(PHP,PHP,LAMP,虚拟主机,Apache,mac下搭建PHP环境)