web运行大致流程
浏览器输入地址,回车(发送请求)
根据规则找到对应web服务器。规则如下:
首先在本机hosts文件中找对应IP
如果hosts中没有找到,则到互联网上找对应IP
如果还是没有找到,则终止请求,返回“找不到服务器”提示
web服务器取得对应文件
如有需要,对该文件进行一定的处理(比如php代码执行)
将文件(或执行结果文件)返回给浏览器(返回应答)
浏览器接收到文件
浏览器处理文件(显示/执行)
hosts文件位置:
window操作系统目录/system32/drivers/etc/hosts
注意:hosts文件没有后缀,而且就是文本文件。
该文件只有一个语法:
ip地址 域名
含义:该域名对应该ip地址。
其中127.0.0.1表示“本机”
DNS服务器:无非是“超大规模的hosts文件”
WEB软件运行原理图
PHP网站运行原理图:
涉及到浏览器, apache软件, PHP语言, MySQL数据库,我们的PHP程序(代码)
安装apache
规划目录:
尽量将apache,php,mysql安装到一个位置,比如:
建议大家直接在c盘或d盘建一个文件夹amp,然后再分上述目录。
安装完后,初始站点为:http://localhost/
如下:
该站点对应文件夹为: apache安装目录/htdocs/
该“主页”文件为:index.html
在apache中配置PHP语言包
apache的配置文件为:
apache安装目录/conf / httpd.conf
打开它,并“装载”php语言包:
基本语法如下:
并重启apache。
设定php文件有php语言模块处理的代码,还可以有以下方式:
实际上,这种后缀,可以任意设定,比如
AddType application/x-httpd-php .php .abc phtml
php的配置
配置时区
初始运行php输出时间:
结果却是这样:
错误提示的意思是没有配置php的“时区”(timezone)。
php的配置文件默认“没有”,如下所示:
先运行<?php phpinfo(); ?>,可以看到php的配置文件的情况
虽然默认情况下,php没有配置文件也能运行。但实际上,php语言包中提供了2个配置文件的模板,自己选用就可以了:
我们只要修改其后缀就可以(现在选用开发阶段的php.ini)
首先,我们要需要在apache的配置文件中,“指定”php.ini文件的位置!!!
然后再去php.ini文件中找到关键字:timezone,
原始:
修改为如下:
还得重启apache。
最后重新运行刚才的3php.php网页:
配置php内部模块
php,作为一门语言,其也有若干个模块,每个模块可以完成某些特定的工作,比如数据库操作,比如图片处理。
这些模块,通常都只要进行“开关”设置,如下所示:
目标:让php可以调用mysql函数,如下所示:
初始运行结果为:
说明:严重错误,调用了未定义的函数 mysql_connect();.......
实际上,mysql_connect()函数,就是隶属于php中的一个模块,必须打开该模块,才可以使用:
初始:
打开它:
还需要指定,php的这些(扩展)模块所在的完整物理路径(位置),形式如下:
extends_dir “完整物理路径(位置)”;
修改为:
重启apache,然后再浏览,结果为:
可见,现在该函数可以使用了,但因为还没有mysql数据库服务器,自然连接不成功!
接下来安装mysql数据库
mysql数据库的安装
我们安装: mysql-5.5.24-win32.msi
然后在重新运行,
结果如下:
设置2个环境变量以方便和后续的操作:
apache的bin目录:
apache安装目录/bin
mysql的bin目录:
mysql安装目录/bin
加入到系统环境变量设置:
资源管理器》计算机》右键》属性》高级属性设置》高级》环境变量》系统变量》path
虚拟主机基本配置
什么叫虚拟主机?
通常是指,对外看来是一*立运行的“服务器”,有其自身的域名可以对外提供服务。虚拟主机其实就是讲一台真实的主机(电脑),通过一定的软件设定,让外界看起来像有“多台”主机,此时就成为虚拟主机。
端口监听设置
一台电脑(服务器),对外来说,确定其“身份”(位置),本质上只有一个IP。通过IP来识别该服务器。
此时,如果一个请求来到“本机”,但又可能需要不同的方式来区分不同的请求(比如web浏览请求,文件下载请求,邮件收发请求。。。。),此时就使用一个叫做“端口”的数字来对此做进一步区分。
对于apache,则只要在配置文件httpd.conf中,声明对哪些端口提供服务,则外界来的该端口请求就会找到apache这个web软件并提供相应服务——如果不是这些端口,apache不负责。
默认只对80端口负责提供web服务:
我们可以自己来加上更多端口(虽然很少这样实际使用):
重启apache,结果如下:
主机配置关键项:2项
设定主机名:
就是网站的域名。
ServerName www.abc.com
或者:
ServerName abc.com
或者:
ServerName news.abc.com
或者:
ServerName def.news.abc.com
设定主机的实际物理路径:
就是网站的实际文件所在位置。
DocumentRoot “c:/www”
或者:
DocumentRoot “H:/itcast/class/bj-php-36”
理解一个主机的本质:就是一个文件夹而已,并映射一个域名以对外“好看”。
不过,通常,一个站点的实际文件夹,也需要给其设定“访问权限”:
目录访问设定
<directory “要设定权限的实际目录路径”>
#这里来设定访问权限
</directory>
举例:
在目录权限设定范围中,还可以设定“是否允许分布式权限配置文件”:
<directory “要设定权限的实际目录路径”>
AllowOverride All
</directory>
其含义是:该目录中,允许一个特定的文件(.htaccess)来对该目录做“其他设定”(其实也是权限设定一类)。该文件的设定,会覆盖这里Directory中的设定!
在该文件中:
其他相关设定
默认页设置DirectoryIndex:
如果请求的地址中没有指定要访问的页面文件名,则此项生效
目录别名设置Alias
目录别名又叫“虚拟目录”,就是一个不存在的文件夹(目录) ,但却可以对外访问。
比如,某站点(www.php36.com)所在的文件夹中,没有soft这个目录,但我们可以配置出如下可访问的效果:
http://www.php36.com/soft/
语法实现:
Alias /虚拟目录名 “实际目录完整路径”
举例:
多域名虚拟主机配置
一个主机,通常设定的项包括:
主机名(ServerName)
主机别名(ServerAlias):
主机实际路径(文件)(DocumentRoot)
目录权限中的一些设定:<Directory>Options, Order, Allow, AllowOverride, DirectorIndex...</Directory>
目录默认页设定(DirectorIndex)
目录别名(Alias):
则多域名虚拟主机设定,就是可以做多个站点,每个站点都可以设定上述项目。
注意:我们如果开通过多域名虚拟主机配置项,则原来httpd.conf中的默认主机的配置项就“失效”了。
多站点实现方式:
1,在主配置文件(httpd.conf)中打开虚拟主机配置文件(httpd-vhosts.conf)引入项:
初始:
打开后:
2,设定计划做多站点配置的IP及端口(通常是已经设定好了):
3,然后就一个一个站点配置就好了:
#站点1:
<VirtualHost *:80>
这里就是第一个站点的所有配置项
</VirtualHost>
#站点2:
<VirtualHost *:80>
这里就是第 2 个站点的所有配置项
</VirtualHost>
#站点3:
<VirtualHost *:80>
这里就是第 3 个站点的所有配置项
</VirtualHost>
举例:
通常,需要先删除默认安装时生成的2个“虚拟主机配置项”。
站点2:
可见该站点只是“找回”原来的站点而已。
在这种多站点配置中,第一个站点被称为“默认站点”:
——当某个请求根据端口进入到本apache的服务范围中,但该请求的地址信息中的域名又无法跟任何一个站点的主机名匹配的时候,Apache就会当做用户是要访问该默认站点(第一个站点)。