一.Apache基础
1.网站几个的基本概念
- 静态网站:
不支持数据交互的网站,单纯的静态文件(HTML,CSS,Js组合),后缀一般html,htm.
- 动态网站:
支持数据交互的网站,动态网站中是可以操作静态网页的.
-
实现动态网站的技术
实现技术 网站后缀 ASP asp PHP php .NET aspx JAVA jsp
- 网络请求过程:
客户端给服务器发送一个请求:(HTTP请求),服务器会把静态资源(HTML代码,图片,js,css)发送到客户端(HTTP response),客户端通过浏览器解析返回的代码,呈现页面给用户.
- 端口和端口号:
端口号范围0-65535, 1024一下的端口号一般都留给系统. 80端口一般留给web服务用, 21端口留给FTP, 25端口留给邮件服务器用.
- 查询当前电脑打开的端口:
win: netstat -ano
mac: lsof -i
- BS和CS架构
B: Browser 浏览器
S: Server 服务器
C: Client 客户端
BS架构:通过浏览器去访问服务器
CS架构:通过客户端软件去访问服务器
- 前台和后台
前台: 给浏览者看到的
后台: 给管理者操作的,后台是用来操作前台的数据的.
站点:把和网站有关的素材都放到一个文件夹,此文件夹就叫站点.
- Apache
语言的运行需要环境,Apache为PHP运行提供环境,(IIS)
亦可以为PHP提供环境,IIS是微软开发的为ASP和aspx提供环境的.
自定义安装Apache需要设置安装路径.
还可以设置配置.
一般操作有:start,stop,restart.
目录结构:
bin: apache的命令文件夹
conf: 配置文件
htdocs: 虚拟目录
httpd.conf, apache 重要的配置文件
PHP:自定义安装要配置apache配置文件的目录
- 常见的数据库
Access(MS,微软),MySql(甲骨文),SQL Server(MS),Oracle(甲骨文)
- lamp/wamp 更改虚拟目录(htdocs)
在Apache的配置文件中配置PHP虚拟目录的位置.
在httpd.conf配置文件中查找DocumentRoot,进行修改.指定新目录后还要设置目录的访问权限
.在Directory,找到对应的文件夹,将权限设置为allow from all.
- 虚拟目录和站点的区别
站点:单纯的一个文件夹
虚拟目录:文件夹 + 权限
- 更改首页
在Apache的配置文件查找DirectoryIndex,添加相应的文件为默认首页
更改监听端口号:
Listen port
可以监听多个端口号
listen 80
listen 90
- DNS 解析
Domain Name System 域名解析系统,将域名解析成 ip地址.互联网上唯一标示一台计算机的是ip地址.不方便记忆,所以用域名对应一个ip地址.
客户端输入域名,首先会请求最近的DNS服务器,将域名解析成ip地址.最近的DNS解析服务器是本机.在 /etc/hosts文件下,所以可以设置虚拟域名
- 虚拟主机
一个Apache支持多个网站,从浏览者角度看,每个网站都是一个独立的主机,称为虚拟主机.
开启虚拟主机的配置:
1.在Apache配置文件夹下 conf/extra/httpd-vhosts.conf 开启.
2.打开虚拟主机配置文件
<VirtualHost*:80>
DocumentRoot "/usr/php" //主机地址
ServerName www.hahaha.com //绑定的域名
<Directory "/usr/php">
Allow from all //设置权限
</Directory>
</VirtualHost>
- 虚拟主机 = 站点 + 站点的权限+域名+端口号
二.PHP基础知识整理
PHP: Hypertext Preprocessor 超文本预处理器,是一种通用的开源脚本语言,PHP运行在服务器端.
- PHP4种定界符
1.标准风格
<?php
//statement
?>
2.短标记风格:默认不支持,要在PHP配置文件中php.ini开启支持短标记,short_open_tag = On
<?
//statement
?>
3.asp风格,asp_taps = On
<%
//statement
%>
4.script风格
<script language="php">
//statement
</script>
PHP 语句以分号结尾;关键字不区分大小写,变量名区分大小写.
变量命名: 变量是计算机内存中的一段空间.PHP的变量名必须以$开头,$不是变量名的组成部分,仅表示PHP变量名从此处开始.除了$符号,字母,下划线开头,后面紧跟字母数字下划线.
//赋值
$a = 10;
$b = $a;
$c = &$a; //传地址
$a++;
echo $b; //10
echo $c; //11
- 销毁变量
通过unset()来销毁变量,销毁的是变量名.值是由PHP垃圾回收机制销毁的.
<?php
$a = 10;
$b = &$a;
unset($a);
echo $b; // 10
?>
- 常量
当一个值在脚本执行周期内不发生变化,可以将值声明为常量.用关键字 define()定义,常量名不能有$开头
<?php
define("name","xiaoQQ");
echo name;
?>
默认情况下常量名是区分大小写的,可以设置define的第三个参数来设置是否区分大小写的:TRUE不区分,FALSE区分大小写.常量不能重复定义
//多人合作时要判断
<?php
define("name","hahaha");
if(!define("name")){
define("name");
}
?>
考虑和const定义常量的区别.
使用const使得代码简单易读,const本身就是一个语言结构,而define是一个函数。另外const在编译时要比define快很多。
(1).const用于类成员变量的定义,一经定义,不可修改。define不可用于类成员变量的定义,可用于全局常量。
(2).const可在类中使用,define不能。
(3).const不能在条件语句中定义常量。
- PHP执行的原理
客户端向服务器发送一个请求,如果请求的是一个HTML页面,服务器直接将HTML页面发送到客户端给浏览器解析.如果请求的是PHP页面,服务器则会运行PHP页面然后生成标准的HTML代码发送到客户端.
- PHP的数据类型
1.基本类型
整型integer: -231~231-1
浮点型float(double)
布尔类型boolean:TRUE,FALSE.
字符串类型string
2.复合类型
array数组:
object对象:
3.特殊类型
resource资源:PHP的外部数据
NULL无类型,空值
- 字符串
单引号字符串是真正的字符串,双引号字符串要将变量给替换.单引号不需要运算,执行效率相对高点.
变量如果在字符串的签名或者中介,要用{}包含
否则会报错:未定义变量
<?php
$name = "xiaoming";
echo "{$name} is my name";
//or
echo "${name} is my name";
?>
- 数组:计算机内存中的一段连续空间,通过下标来区分数组.
数组分成:
索引数组:通过元素的位置做下标,默认从零开始,每次增长1,可以更改数组的起始下标
关联数组: 字符串做下标
<?php
//索引数组
$names = array("tom","ted","color","rose");
echo $names[0],'<br>';
//关联数组(字典)
$emp = array("name"=>"xiaoming","gender"=>"male","age"=>23);
echo $emp["name"],'<br>';
$arr1 = array(1=>'a','b','c'); //修改起始下标
//Array([1]=>a [2]=>b [3]=>c)
$arr2 = array('a',2=>'b','c',5=>'d');
//Array([0]=>a [2]=>b [3]=>c [5]=>d); //每次增长1
$arr3 = array(1=>'a',1=>'b',1=>'c','d');
//Array([1]=>c [2]=>d); //会替换
?>
- 输出语句 echo和print,print_r,var_dump
echo :只能输出数字,字符串,对于布尔类型,TRUE输出1,FALSE输出0,可以一次输出多个参数,没有返回值
print :和echo很类似,一次只能输出一个参数,输出成功返回1,失败返回0
print_r :用来输出数组,输出的内容包括 key 和value,不包括数据类型
var_dump :如果输出普通变量,输出的变量的值和变量的类型.如果输出的是数组,包括值,键,值的数据和类型
PHP注释 //单行注释 ,/**/ 多行注释
运算符
一元运算符: 负号, ++(递增1),--(递减1)
二元运算: + , - , * ,/
- 号在js,java中可以做数字的相加,也可以做字符串相连接,在PHP中,只能做数字运算
<?php
echo '10' + '20'; //30
echo '10aa' + '20bb'; //30
echo 'aa' + 'bb'; //0
?>
- 比较运算符
, >=, <, <=, ==, !=, ===, !==
== 只比较值, === 比较值和数据类型
<?php
$a = 10;
$b = 'b';
if($a == $b){
echo 'equal';
}else {
echo 'not equal';
}
//equal
echo "<br>";
if($a === $b){
echo "全等";
}else {
echo "不全等";
}
//不全等
echo "<br>";
$a = "abc";
$b = 0;
if($a == $b){
echo "equal";
}else {
echo "not equal";
}
//equal
?>
逻辑运算符: &&(与) ||(或者) !(非)
字符串拼接: .点号
赋值运算符: =, +=, *=, /=, %=, .=
三目运算符: 表达式?值1:值2
<?php
$sum = 20;
echo $um%2==0?'偶数':'奇数'; //偶数
?>
- 判断语句
单分支: if(){}
双分支:if(){} else {}
多分支: if(){} elseif(){} ... else{}
is_numeric()判断是否是数字或者数字字符串;
is_int() 判断是否是整型
把数字字符串转换为数字 $num+=0;
- 循环语句
for(初始值;条件;增量){};
while(条件){};
do{}while(条件);
foreach :用来遍历数组
<?php
$stu = array("tom","berry","haha","hi");
foreach($stu as $value){
echo $value;
}
foreach($stu as $key=>$value){
echo $value;
}
$names = array("name"=>"xiaoming","gender"=>"male","age"=>23);
foreach($names as $k=>$v){
echo "{$v}=>{$v}<br>"
}
?>
函数
预定义函数: php已经定义的函数,如is_numeric(),var_dump(),is_int();
自定义函数
<?php
function functionName(parameters){
//function body
[return];
}
?>
- 解决页面乱码
1.加meta标签 <meta charset="utf-8">
2.php设置header: header('Content-Type:text/html;charset=utf-8');
- 访问全局变量
<?php
$num1 = 10;
function fun(){
$num2 = 20;
echo $GLOBALS["num1"]+$num2222222;
}
?>
三.数据库
数据库的发展: 文件系统(使用磁盘文件来存储数据)=>第一代数据库(出现了网状模型,层次模型的数据库)=>第二代数据库(关系型数据库和结构化查询语言)=>新一代数据库("关系-对象"型数据库);
层次模型是一种导航结构,
优点:分类管理,如果查询同一类的数据是很方便的。
缺点:如果查询很多不是同一类的数据,效率就很低了
层次结构可以造成数据无效,比如张经理管理了一个员工叫张三,李经理也管理了一个叫张三,我们无法区分张三是一个人还是两个人。
网状模型解决了层次模型数据无效的问题,但是没有解决导航问题,深层率查询,效率很低.
关系模型中,每个表都是独立的,通过公共字段来建立关系。优点:表是独立的,需要什么数据就到那个表中查询。
缺点:多表查询的时候效率低下。
关系:两个表的公共字段叫关系
- SQL语句
Structured Query Language 结构化查询语言,是用来操作关系型数据库的.常用的关系型数据有:
Access,MySQL,Sql Server,Oracls.
标准的SQL是所有关系型数据库都支持的操作语句,标准的SQL也叫作SQL-92.但是每个数据库在标准的基础上又扩展了自己的东西.所有,一个数据库的拓展语句在在其他数据库不能运行.
- 连接数据库
需要的参数: Host (-h),username (-u), password (-p),port(默认3306) (-P)
mysql -u root -h localhost -p
退出数据库:exit,quit,\q
数据库操作:数据库的本质是一个文件.操作数据库的软件叫做数据库管理系统.
/**
* 创建数据库
* 如果创建的数据库已经存在,会报错.所以一般要进行判 断.
* 同时,如果数据库名是关键字或者纯数字,需要加上反引 号,最好的办法是任何时候都加反引号
*/
Create database db_name [charset=字符编码]
Create database if not exists db_name [charset=字符编码]
/**
*/
2. 查询数据库
show database;
3.显示数据库的创建语句
show create database create db_name;
4. 更改数据库
alter database db_name [option];
//eg:alter database haha charset=gbk;
5. 删除数据库:如果数据库不存在会报错
drop database if exists db_name;
6. 选择数据库
use db_name;
- 数据库表的操作
几个概念:
行row:也叫记录,一行就是一条记录
列(column) : 一列就是一个字段,字段也叫属性,一个表中包含多个字段
1.创建表:(primary key)主键不能重复,不能为空,一个表只能有一个主键,主键可以由多个字段组成.
create table table_name(
field1 data_type [null | not null][default][auto_increment][primary key],
field2 data_type,
...,
);
2. 查看所有表
show tables;
3.显示创建表的SQL语句
show create table table_name [\G];
4.显示表结构
describe [desc] table_name;
5.删除表
drop tabel table_name1,table_name2,...;
数据类型:
int,decimal(总位数,小数位数) 存小数 decimal(10,3), char(1):定长, varchar(10):可变长度, text:大段文字
- 数据操作
1.插入数据:插入字段可以和数据库中字段顺序不一致,但是值和插入的字段顺序必须一致. 如果插入字段省略掉,插入的值和数据库表的字段的顺序和个数都要一致.
insert into table_name (field1,field2) values (value1,value2);
//自动增长的插入
insert into student values (null,"name","female","shenzhen",22);
//默认值的插入
insert into student values (null,"name","female",default,33);
2.数据的修改
update table_name set field1=value1,field2=value2 [where 条件];
//eg:
update student set gender="male" where name="xiaoming";
update student set gender = "female";
3.删除数据
delete from table_name [whre 条件];
delete from student where name = "haha";
delete from student; //所有的数据都删除了
4 .查询数据
select 列名 from 表 [where 条件] [order by 排序字段 asc|desc] [limit [起始位置默认0],或者的记录数量];
升序:asc
降序:desc
默认升序
select name,gender from student;
select * from; //获取所有
select * from student order by score desc;
select * from student limit 3;
select * from student limit 2,10;
select * from student order by score desc limit 3;
//取出第一位
select * from stu order by score desc limit 0,1
- 运算符
比较运算符: > , >=, <, <=, = , <>(不等于)
逻辑运算符: and, or, not
聚合运算:
Sum(), Avg(), Min(), Count(), Max().
select max(score) from student;
select min(score) from student;
select sum(score) from student;
select avg(score) from student;
select count(*) from student;
select count(*) from student where gender="male";
4.PHP与MySQL
- php开启MySQL拓展,PHP本身是一个框架,它的功能是由PHP拓展而来的,要通过PHP连接数据库,必须开启PHP连接MySQL的功能,就是PHP的MySQL拓展. 在php.ini中,把extension=php_mysql.dll 开启,重启服务器.
1.php连接数据库
$connect = mysql_connect("localhost",'root','password') or die("数据库连接失败");
/**
通过@符号屏蔽信息
$connect = @mysql_connect("localhost",'root','password') or die("数据库连接失败");
*/
2. 终止执行:exit(),和die();
die()停止执行,把生成的代码发送到客户端.
3. 选择数据库
方法1: 执行 use db_name
mysql_query("use database_name") or die("数据选择失败");
方法二:
mysql_select_db("database_name") or die ("数据库选择失败");
4. 设置字符编码
mysql_query("set names utf8");
5.查询数据库 : 返回一个资源类型的数据
$results = mysql_query("select * from products"); //resource type
mysql_fetch_row: 取出结果集中数据
开始匹配,指针指向第一个记录.取出资源中的当前记录,匹配成索引数组,指针指向下一条记录.
5.1.
while($rows = mysql_fetch_row($results)){
echo $rows[0];
echo "<br>";
echo $rows[1];
echo "<br>";
echo $rows[2];
echo "<br>";
echo $rows[3];
echo "<br>";
}
这种方法读取数据缺点:数据库字段发生变化,会影响数组的索引编码.
5.2: mysql_fetch_assoc : 形成关联数组
数组的键和数据表的字段名相关联
while($rows = mysql_fetch_assoc($results)){
echo $rows["name"];
echo "<br>";
echo $rows["gender"];
echo "<br>";
echo $rows["age"];
echo "<br>";
echo $rows["id"];
echo "<br>";
}
5.3: mysql_fetch_object: 匹配成对象,通过->访问
while($obj=mysql_fetch_object($results)){
echo $rows->name;
echo "<br>";
echo $rows->gender;
echo "<br>";
echo $rows->age;
echo "<br>";
echo $rows->id;
echo "<br>";
}
6. 释放资源 mysql_free_result($results);
7. 关闭连接 mysql_close($connect);
页面执行完毕后,所有变量全部销毁,可以不用手动释放资源.
数据的导入与导出,用phpMyAdmin工具