今天的目标1:
<?php
echo “hello world”; //表明配置好了apache
echo “
现在时间:” . date(“Y-m-d H:i:s”) ; //表明配置好了php
$link = mysql_connect(“localhost”, “rott”, “123” ); //表明配置好了mysql
?>
目标2:
能够建立多个站点,比如:
www.abc.com能访问一个“网站”;
www.php39.com,能访问另一个“网站”
缩写:Personal Home Page ==>>PHP:HypeText Preprocessor
1995PHP/FI,Rasmus Lorderf,Personal Home Page
1997PHP/FI2.0,1998PHP3,2000PHP4,2005PHP5
web服务器端脚本:主要作用
应用程序图形界面
运行php文件:php.exe -f "php文件路径"
运行php代码:php.exe -r "php脚本代码"
php作为一门语言,本身可以是一个纯绿色版的“文件夹”——称之为“php语言包”
其中,有一个文件为:php.exe,可以用来它“执行”php代码:
演示1:
这是1base.php文件:
通过php.exe去“执行”它,如下:
演示2: 直接运行php代码:
形式:
php.exe -r "php脚本代码"
一个重要观念:
web软件的运行模式中,总是先在客户端(浏览器端),发起一个“请求”,然后,服务器端才产生反馈动作(就是“运行”程序),并因此而返回给该浏览器一定的信息——就是所谓的应答(响应);
其中运行过程中,所涉及到的一些相关技术或软件如下:
浏览器端: 服务器端 数据库端
html 服务器软件语言 mysql
css apache PHP oracle
js IIS java mssql
..... ...... ......
其中,浏览器端的技术是“无可替代”的,而其他层面的,都是有可替代性。
浏览器输入地址,回车(发送请求)
首先在本机hosts文件中找对应IP
hosts文件位置:操心系统/system32/drivers/etc/
注意:需要以管理员身份打开编辑器,才能编辑保存它
如果hosts中没有找到,则到互联网上找对应IP(DNS服务器中)
如果还是没有找到,则终止请求,返回“找不到服务器”提示
web服务器取得对应文件(就是请求的文件)
如有需要(比如php文件),对该文件进行一定的处理(比如php代码执行)
将文件(或执行结果文件)返回给浏览器(返回应答)
浏览器接收到文件
浏览器处理文件(显示/执行)
注意:
成功后,浏览器中浏览如下:
apache安装后的目录结构:
将刚才的网页1base.php放到apache的htdocs文件中,并通过浏览器“浏览”:
可见,根本无法运行php!!!
其实,我们就需要去配置apache了:
分2步:
第一步:
装载php“模块”——其实就是指php语言包中的一个文件而已!
A:首先,我们将php语言模块,拷贝到计划的目录中来:...... /bj-php-39/amp/php/
B:打开apache的配置文件:apache安装位置/ conf / httpd.conf
第二步:
指定php后缀的文件,去“找”这个php模块处理(执行)——这里,基本是固定写法:
然后,重启apache,再次刷新刚才的页面:
可见,php已经通过apache发挥作用了!
注意:apache配置文件修改后,必须重启apache,才能生效!
另外:第2步中“设定php后缀的文件由php模块去处理”的命令,可以有另一种写法,如下:
命令所在位置:
apache安装位置/bin/httpd.exe
命令使用方式:
httpd.exe -t
命令结果:
如果配置文件httpd.conf没有语法错误,就返回: syntax OK
如果有错误,则会提示第几行错误!
用法1:强行拖入法
用法2:配置环境变量法:
我的电脑》属性》高级系统设置》高级》环境变量》系统变量》path》编辑,
然后,在其中加入刚才httpd.exe文件所在的完整目录路径,注意使用英文分号(;)跟以前的内容分开:
然后,就可以在cmd中直接使用:
先看php的代码:
浏览的结果为:
这是,因为,我们还没有配置php语言模块(语言引擎)的运行时区!
需要去修改php的配置文件:
php的配置文件位置:
php语言包/php.ini
初始,并没有该文件的直接版本,而是提供了2个选择性版本:
我们采用php.ini-development,改其后缀就可以了!
第一步:
然后打开该文件,并查找关键字:timezone:
修改为:
第二步:
在apache的配置文件(httpd.conf)中,设置php.ini文件的路径(位置):
然后,还是要重启apache,然后,重新刷新刚才显示时间的网页,结果为:
理解一件事情:
php(语言模块)是apache的众多模块之一!
mysql是php语言中的众多模块之一!
目标:运行一行“连接mysql数据库”的代码:
但运行结果却是报错:调用未定义的函数!
这是,因为,mysql作为一个php的“模块”尚未配置!
解决,分2步:
第一步:
在php.ini文件中,设定php模块所在的路径(查找关键字extension_dir):
我们要修改为指向php语言包中的ext这个目录的“完整物理路径”:
第2步:
“打开”mysql这个模块就可以了(查找关键字php_mysql.dll):
修改为:
然后,重启apache,重新浏览刚才的网页,结果为:
下面就可以安装mysql数据库软件,以“建立”mysql数据库服务器。
然后,重新浏览刚才的php网页(将代码略修改为以下):
结果为:
主机名(服务器名/站点名): ServerName服务器名
站点位置(站点目录路径):DocumentRoot“实际物理路径”
默认情况下,apache安装成功,就默认配置好了一个“站点”,该站点的实际位置在:
apache安装位置/htdocs/
默认主机名是安装时设置的,比如www.abc.com,当然,也可以使用localhost
在apache的主配置文件httpd.conf中:
也可以写为:
实际应用中,我们几乎都是80。
ServerName服务器名
举例:
也可以设置为:
形式:
DocumentRoot “实际物理路径”
重要观念:
站点就是“文件夹”——我让它当站点,它就是站点。
比如:
原始的站点在这里:
修改为:
在浏览“localhost”,发现被进制访问(Forbidden),然后添加访问权限,如下:
就可以了。
一个站点,就是一个“目录”。
每个目录,都应该给其设定“访问权限”,语法如下:
<Directory “要设置权限的目录路径”>
#设置当一个请求中没有给定请求的文件名又没有默认网页(首页)的时候,显示文件列表
Options Indexes
#设置权限控制的先后顺序,只有2种:Deny,Allow(先拒绝,后允许),Allow,Deny(先允许后拒绝)
Order Deny,Allow
#Deny用于设定要拒绝访问的来源地址或服务器名,几乎没有实际意义!
Deny from拒绝名单 比如:deny from 192.168.3.8 172.180.4
Allow from允许名单 比如:Allow from all
#设置该文件夹下的“默认网页”(首页),可以设置多个,用于请求中不带文件名的时候自动使用该文件作为“返回”页面。
DirectoryIndex index.php index.html main.php default.php abc.php 123.html
</Directory>
对于某个目录的访问权限,我们在apache中使用Directory来设定,但可能不够方便:
1,apache配置修改,必须重启apache
2,某个站点中的“下级目录”访问权限,不方便单独设置,
这种,可以称为“集中式权限”;
分布式权限,就是:针对某个网站的任何一个下级目录,都可以单独去设置其访问权限,并且可以不重启apache就生效。
做法:分2步:
第1步:
在该站点对应目录权限的Directorty配置中添加一条:
第2步:
在该目录下的任何子目录中,创建一个特殊的文件(.htaccess),在该文件中写所需要的“权限内容”(几乎跟Directory中的写法一样):
举例:
www.php39.com/day1/中,初始可以浏览结果如下:
然后,在该文件夹中添加一个文件:.htaccess其内容为:
(该ip不知是谁,反正不是我!)
在该day1文件夹中,就多了一个文件:
然后,重新访问刚才路径(刷新):
分3步:
第1步:
在apache的主配置文件httpd.conf中,“打开”多站点虚拟主机配置文件项(关键词:vhosts):
初始:
修改为:
第2步:
在httpd-vhosts.conf文件中,设定希望提供“多站点”服务的IP地址和端口号,通常默认就是:*:80,其中“*”代表所有IP,默认其实apache安装好之后就设置好了,无需手动设置(关键字NameVirtualHost):
第3步:
然后就一个站点一个站点加上!形式如下:
<virtualhost *:80>
#这里设置站点1的各项信息
</virtualhost>
<virtualhost *:80>
#这里设置站点2的各项信息
</virtualhost>
...........
注意:
1,先把httpd-vhosts.conf文件中的2个初始安装生成的站点,删除!!!
2,每个站点的设置项,主要就3个:
ServerName,
DocumentRoot,
<Directory>...</Directory>
3,在多站点配置中,第一个站点被称为“默认站点”,如果某个请求的域名无法跟任何一个站点“匹配”,就会当做请求的是默认站点去处理(应答)
4,一旦实现了多站点配置,则最初安装成功时的“默认站点”就失效了,我们可以将“localhost”当做一个普通站点重新设置就可以了,也可以将其放在第一个位置又重新作为默认站点。
举例:
某个站点www.abc.com所对应文件夹下有一个目录为d1,则可以这样访问该目录:
这个d1就称为“真实目录”;
虚拟目录就是:
该站点下不存在某目录名,但却可以使用同样的语法形式,去访问,比如:
www.abc.com/d2 //假设该站点目录下根本就没有d2这个目录,此时却可以访问
实现这种技术,就是所谓“目录别名”(虚拟目录)的设置,如下:
在一个站点中,做如下2步:
第1步:
设置目录别名的名字和其对应的“实际真实目录(文件夹位置)”:
Alias /目录别名的名字 “实际真实目录(文件夹)的位置”
第2步:
设置该真实目录的访问权限(否则是禁止访问的):
<Directory “真实目录路径”>
。。。。。。跟其他目录权限设置一样
</Directory>
���k~�