《php与mysql权威指南》第一部分
第一部分 准备篇
第1章 Apache基础
1.1 Apache介绍:开源的http服务器软件
常见的Web服务器:Apache,IIS,Tomcat
web系统架构也被成为B/S架构-浏览器/服务器架构
工作原理:浏览器向服务器发送一个http请求,服务器对接收到的请求信息进行处理,然后将处理结果返回给浏览器,最终将浏览器处理后的结果呈现给用户
apache特点:简单、快速、高效、稳定
1.2 Apache安装与部署
1.3 httpd.conf深入剖析
httpd.conf:基本服务器配置,服务器的资源映射文件,服务器的访问权限等
站点基本配置:
ServerRoot "":Apache软件安装位置
PidFile logs/httpd.pid:第一个httpd进程的进程号文件(所有其他进程的父进程)
Listen 80:监听端口号
ServerName www.example.com:主站点的名称
ServerAdmin admin@163.com:管理员的邮件地址
DocumentRoot "":主站点的网页存储地址
DirectoryIndex index.html index.htm index.php:主页文件的设置
服务器优化配置
利用的主要优势:更好的支持多处理器
---
httpd -l # 列出Apache的所有模块
---
工作模式如下:
prefork:服务器启动5个httpd进程(加上父进程,一共6个)
---
ps -ax|grephttpd #查看httpd进程
---
worker:现成监听客户的链接,当新客户链接时,其中一个空闲线程接受连接,服务器启动两个进程,50个线程,当线程不够用时,服务器会自动fork一个进程,再产生25个线程
perchild:紫禁城数量固定,线程数不受限制
HTTP响应头的信息配置
ServerTokens用来设置头部返回的apache版本信息,参数如下
Apache/2.0.54(Unix)mod_ssl/2.0.54 OpenSSL/0.9.7g
prod:仅软件名称;
Major:包括主版本号
Minor:包括次版本号
Min:仅完整版本号
OS:包括操作系统类型
Full:包括Apache支持的模块及模块版本号
持久性链接配置
KeepAlive On:开启持久性连接功能
MaxKeepAliveRequest 100:一个连接服务的最多请求次数
KeepAliveTimeOut 30:测试一次连接中的多次请求传输之间的时间,如果服务器已经完成一次请求,但一直没有接收到客户程序的下一次请求,在间隔超过了这个参数设置的值之后,服务器就断开连接,默认15s
1.4 日志记录
日志的配置
ErrorLog file-path|syslag[:facility] # 指定当服务器遇到错误时记录错误的日志文件
LogLevel用于调整记录在错误日志中的信息的详细程度
emerg,alert,crit,error,warn,notice,info,debug
CustomLog file|pipe format|nickname [env=[!]environment-variable] # 用来对服务器的请求进行日志记录
错误日志:ErrorLog指令控制
示例:[Fri Mar 12 23:04:10 2010][error][client 127.0.0.1] script 'E:/www/test.php' not found or unable to stat
参数说明:
[Fri Mar 12 23:04:10 2010]:错误发生的时间
[error]:错误级别
[client 127.0.0.1]:导致错误的ip地址
script 'E:/www/test.php' not found or unable to stat:错误原因
访问日志
存放文件和记录的格式指令:CustomLog
定义日志内容格式指令:LogFormat
通用日志格式
设置
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog "" common
产生结果
127.0.0.1 - - [12/Mar/2010:23:08:09 +0800] "GET /test.php HTTP/1.1" 404 206
参数解释:
127.0.0.1:发送请求到服务器的客户端ip地址
第一个'-':由客户端identd进程判断的RFC1413身份,-表示此处信息无效
第二个'-':http认证系统得到的访问该网页客户端标识,401代表客户端未通过认证,-代表不需要认证
[12/Mar/2010:23:08:09 +0800]:服务器完成请求处理的时间 +0800代表时区
"GET /test.php HTTP/1.1":客户端发出的请求行
404:服务器返回给客户端的状态码
206:返回给客户端不包含响应头的字节数
组合日志格式
设置
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{user-agent}i\" " combined
CustomLog "" combined
产生结果
123.206.210.160 - - [28/Oct/2018:04:01:27 +0800] "GET /help.php HTTP/1.1" 404 206 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:28.0) Gecko/20100101 Firefox/31.0"
参数解释:
多出来的-:referer请求头,-代表内容为空
"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:28.0) Gecko/20100101 Firefox/31.0":user-agent请求头,客户端提供的浏览器识别信息
1.5 虚拟主机
通过<VirtualHost>区块指令来识别不同的身份(虚拟主机)
基于主机名的虚拟主机
NameVirtualHost *:80 # 指定主机的IP地址和端口号
<VirtualHost *:80>
DocumentRoot "/var/www/html"
ServerName www.example.com
ServerAlias www.example.com
ServerAlias 114.115.159.177
ErrorLog "logs/localhost-error_log"
</VirtualHost>
基于IP地址的虚拟主机
NameVirtualHost 192.168.1.1 # 指定主机的IP地址和端口号
<VirtualHost 192.168.1.1> # 注意要与外边的一致
DocumentRoot "/var/www/html"
ServerName www.example.com
ServerAlias www.example.com
ServerAlias 114.115.159.177
ErrorLog "logs/localhost-error_log"
</VirtualHost>
1.6 URL重写
mod_rewrite模块:基于正则表达式分析器的重写引擎来实现重写url请求
指令分为服务器级和目录级
服务器级作用域为服务下的所有网站,在httpd.conf中配置
目录级只对.htaccess文件所在目录有效,在.htaccess中配置
工作步骤:
接收一个具有一定规则的url请求
按照设定的规则进行匹配,成功则生成匹配结果
通过匹配结果进行下一步操作
开启重写功能
httpd.conf文件中LoadModule rewrite_module modules/mod_rewrite.so去掉注释
常用指令
RewriteEngine On|Off:开启|关闭重写引擎
RewriteBase url_path:设置重写根目录
RewriteCond test CondPattern [flags]:定义重写规则的条件,满足该条件进行重写
RewriteRule Pattern Substitution [flags]:定义重写规则的条件,满足该条件进行重写
RewriteLogLevel level:重写引擎日志的详细程度的级别,默认为0(不记录),9代表记录所有操作(level很大会降低服务器速度)
1.7 实战案例
防图片盗链
通过http referer进行限制,设置默认图片
apache伪静态
通过程序生成静态化页面|rewrite模块来实现
用户访问权限设置
创建用户
---
htpasswd -c 目录/htaccess user1
---
httpd.conf开启如下三个模块
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_file_module modules/mod_authn_file.so
LoadModule auth_user_module modules/mod_authz_user.so
/conf/extra/文件中
<Directory "C:/apache2.2/htdocs/shop/"> # 注意要与外边的一致
Options Indexes MultiViews
AllowOverride None
Order allow,deny
Allow from all
</Directory>
<Directory "C:/apache2.2/htdocs/shop/">
AuthType Basic [None | Basic | Digest | Form,后三种为不同的加密方式] #指定认证类型模型
AuthName 请输入用户名和密码 # 验证登录框的提示信息
AuthUserFile /usr/file/password # 指定验证信息文件的存放目录
Require user user1 # 指定允许访问的用户,多个用户之间用空格隔开
</Directory>
第2章 PHP与MYSQL开发环境的搭建
2.1 在windows上安装iis
2.2 PHP的安装和配置
在windows下的安装和配置
在linux下的安装和配置
apache安装和配置
安装包拷贝到"/usr/local"下
---
cp httpd-2.2.17.tar.gz /usr/local/
---
切换目录为"/usr/local",创建httpd目录
---
cd /usr/local
mkdir httpd
---
解压安装包,解压后进入目录
---
tar zxvf httpd-2.2.17.tar.gz
cd httpd-2.2.17
---
配置项检测,生成makefile文件,为make做准备
---
./configure --prefix=/usr/local/httpd --enable-so
---
编译
---
make
---
安装
---
make install
---
apache启动:/usr/local/httpd/bin/apachetcl start
apache停止:/usr/local/httpd/bin/apachetcl stop
安装libxml---xml c语言版的解析器
与apache安装相同
PHP安装预配置
安装同Apache安装
配置项检测出的异同:
---
./configure --prefix=/usr/local/php --with-apxs2=/usr/local/httpd/bin/apxs --with-libxml-dir=/usr/local/libxml2 --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config --with-pdo-mysql=/usr/local/mysql
---
安装完成后修改配置文件
---
gedit /usr/local/httpd/conf/httpd.conf
---
在末尾添加如下两行
-----
AddDefaultCharset UTF-8
AddTypr application/x-httpd-php.php
-----
修改目录的用户权限
---
chown -R /usr/local/httpd/htdocs/
chmod -R 755 /usr/local/httpd/htdocs/
---
测试
-----
<?php
phpinfo();
?>
-----
拷贝PHP.ini文件
---
cp /usr/local/php-5.2.14/php/ini-recommended /usr/local/php/lib/php.ini
---
2.3 MySQL的安装预配置
windows下的安装和配置
linux下的安装语篇日志
创建mysql账号,并加入组群
---
/usr/sbin/groupadd mysql
/usr/sbin/useradd -g mysql mysql
---
拷贝安装包
解压
创建到跟那个解压的文件夹的链接,并命名为mysql
---
ln -s mysqll-5.1.53-linux-i686-glibc23 mysql
---
进入目录并安装
---
cd mysql
./scripts/mysql_install_db --user=mysql
---
拷贝mysql配置文件到系统目录,并重命名为my.cnf
---
cp ./support-files/my-medium.cnf /ext/my.cnf
---
启动mysql:/usr/local/mysql/bin/mysqld_safe --user=mysql&
停止mysql:/usr/local/mysql/bin/mysqldadmin -u root -p shutdown
登入:/usr/local/mysql/bin/mysql -u root -p
2.4 php与mysql连接
PHP.ini文件去掉注释
extension=php_mysql.dll
extension=php_mysqli.dll
extension=php_pdo_mysql.dll
关系型数据库;mysql sqlserver,oracle
数据库抽象层:metabase/pear:db/pdo/adodb