关于域名解析
对于开发环境,我们常常没有(也不需要)专门的域名解析服务器 ,而是使用一个简单的文本文件来解析域名,规则就是一个域名对应一个IP就好了,该文本文件就是操作系统的hosts文件,例如windows操作系统该文件存放在/system32/drivers/etc/hosts,可以以管理员身份打开编辑器再进行修改。
运行PHP文件
PHP安装包(无需安装)文件中有个可执行文件php.exe,运行方法:
php.exe -f "php文件路径"
D:\SOFT\amp\php\php.exe -f C:\Users\Kang\Desktop\php\index.php
php.exe -r "php脚本代码"
D:\SOFT\amp\php\php.exe -r "echo 'aaa';"
Apache关联PHP以运行PHP文件
Apache有很多模块,PHP只是其中的一个功能模块而已。
Apache配置文件位置:D:\SOFT\amp\apache\conf\httpd.conf
# 第一步:装载PHP
LoadModule php5_module "D:\SOFT\amp\php\php5apache2_2.dll"
# 第二步:指定文件类型
<FilesMatch "\.php$">
setHandler application/x-httpd-php# 定义PHP模块的绰号
</FilesMatch>
# 第三步:重启Apache
第二步的替代方式
<IfModule mime_module>
# If the AddEncoding directives above are commented-out, then you
# probably should define those extensions to indicate media types:
#
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php .php3 .ppp
</IfModule mime_module>
测试输出时间
// 有警告
echo date("Y-m-d H:i:s");
解决
// 配置D:\SOFT\amp\php\php.ini
date.timezone = PRC
// phpinfo()查看php.ini的路径,Configuration File (php.ini) Path C:\Windows,并和刚才修改的php.ini文件位置对应起来,Apache中修改其位置即可,指定文件夹即可,不需要精确到文件名
PHPIniDir "D:\SOFT\amp\php
打通MySQL
PHP作为一个完整的语言包,其本身是作为Apache的一个模块并且被Apache调用,其内部又是有很多个子模块构成,其中就有MySQL。
目的:使用mysql_connect函数
// php.ini中装载MySQL
extension=php_mysql.dll
extension=php_mysqli.dll
// 指出该PHP中该模块的位置,和Apache加载PHP一样的道理
extension_dir = "D:\SOFT\amp\php\ext"
// 连接
$conn = mysql_connect("localhost", "root", "123");
httpd.ext -t
// 可以检测Apache的配置文件中的语法问题
D:\SOFT\amp\apache\bin\httpd.exe -t
虚拟主机配置
// 端口:目的是一台电脑能够对外提供多项服务,以下是行业默认端口
// web服务:80
// ftp服务:21
// 邮件收取服务:110
// 邮件发送服务:25
// mysql数据库服务:3306
虚拟主机:是指一个可以通过浏览器并使用某个域名可以访问的“web应用”,其核心的两件事:
// 主机(站点)的名字:ServerName
// 主机(站点)的实际文件夹位置:DocumentRoot 站点的实际完整路径
Apache的作用其实就是一个“转换”角色,讲当前电脑中的文件夹对外以某个域名(站点)的方式展示出去,换句话说,站点的本质就是一个文件夹。
当一个请求通过域名解析进入到当前Apache并端口匹配成功后,Apache就会开始提供服务,流程:
// 1、在站点设置中找ServerName项,看是否匹配请求中的地址
// 2、如果找到,则对应的目录(DocumentRoot配置项)中找对应的文件(可能是index.php)
// 3、如果找到,则返回该文件(或调用php语言模块执行后返回)
// 4、如果第二步没有找到对应请求中的域名,那么就将第一个主机当做准备提供服务的主机
只要端口匹配Apache设定,Apache一定会提供服务,即使主机名不匹配。
权限问题
You don't have permission to access / on this server.
需要添加权限,初始的站点所对应的文件夹,安装的时候已经设置好权限了。现在改了,但权限还没设置,所以被禁止。
<Directory "C:\...">
Options Indexes
Order deny,allow
Allow from all
</Directory>
制定默认访问文件
<IfModule dir_module>
DirectoryIndex index.html aaa.html
</IfModule>
// 如果最终都没有找到,Directory中Options中的Indexes就发挥作用了:显示该文件夹中的所有文件和文件夹
// 也可以将DirectoryIndex设置项放在一个单独的站点或单独的文件夹中,则只对该单独的站点或单独的文件夹起作用。
<Directory "C:\...">
Options Indexes
Order deny,allow
Allow from all
DirectoryIndex aaa.php
</Directory>
主机别名设置
ServerAlias 别名1 别名2 别名3
文件夹访问控制的文件控制方式
通常,我们在config配置文件中,使用Directory配置项,目的是用来控制文件夹的访问权限。但我们也可以使用一个独立的文件来控制某文件夹的访问权限。该文件名必须是: .htaccess
1,只有后缀和点号(无文件名部分)
2,该文件必须放在要被控制访问权限的文件夹中(不同的文件夹可以放不同的该文件)
3,Directory设置中必须使用AllowOverride All允许.htaccess发挥作用:
4,.htaccess文件中出现代码,几乎可以跟Directory设定中出现的代码一样
5,如果.htaccess文件有效,则其设置会覆盖Directory中的设置
6,此.htaccess文件修改后可以立即发挥作用,无需重启apache
目录别名设置Alias
一个站点中,如果不存在某个文件夹(目录),我们可以通过配置项,来做到“对外”看起来却存在一样。
但我们可以让该地址“可访问”,这就是目录别名(虚拟目录),通过该技术可以将一个站点之外的“网页/数据/内容”也呈现在当前站点中。
// 设置权限
<Directory "C:\...">
Options Indexes
Order deny,allow
allow from all
</Directory>
// 全局设置真实路径
<IfModule alias_module>
Alias /soft "C:\..."
</IfModule>
// 局部设置
<VirtualHost *:80>
ServerName
DocumentRoot "C:\..."
<Directory "C:\...">
Options Indexes
Order allow,deny
allow from all
DirectoryIndex aaa.php bbb.php
</Directory>
Alias /abc "C:\aaa\class"//
</VirtualHost>
多站点配置
step1
# Virtual hosts
Include conf/extra/httpd-vhosts.conf
step2
NameVirtualHost *:80
step3
<VirtualHost *:80>
ServerName
# 设置主机别名,即用改名也可以访问,前提是域名解析正确
ServerAlias
DocumentRoot "C:\..."
<Directory "C:\...">
Options Indexes
# 允许该文件夹中的.htaccess文件生效
AllowOverride All
Order allow,deny
allow from all
deny from 192.168.3.33
# 设定默认访问文件
DirectoryIndex aaa.php bbb.php
</Directory>
</VirtualHost>
step4
配置hosts