PHP. 01. C/S架构、B/S架构、服务器类型、服务器软件、HTTP协议/服务器、数据库、服务器web开发、PHP简介/常见语法、PHPheader()、 PHP_POST/GET数据获取和错误处理
C/S架构
Client/Server 指客户端,服务器 架构的意思
优点:性能性高:可将一部分的计算工作放在客户端上,服务器只需处理出局即可
洁面炫酷,可使用更多系统提供的效果
缺点:更新软件需版本同步
不同设备访问:必须安装了客户端才能登陆
B/S架构
Browser /Server 指浏览器, 服务器。是WEB兴起后的一种结构
优点:更新简洁,对用户来说只需刷新浏览器即可
多设备同步:只要能够使用浏览器即可登录
缺点:性能较低:当时随着硬件性能的提升,这个差距在缩小
浏览器兼容:移动设备兼容性较好,当时低版本的浏览器显示问题一直存在
服务器类型
虽然之前我们学习的都是
HTML
相关的内容,但是我们能够从网络上获取的内容绝对不止网页,比如下载视频,听歌,玩游戏,在线聊天
服务器分类
- 按类型分:
- 文件服务器、数据库服务器、邮件服务器、Web 服务器等;
按软件分:
- Apache服务器、Nginx 服务器、IIS服务器、Tomcat服务器、Node服务器等。
按操作系统分:
- Linux服务器、Windows服务器等;
- 按类型分:
服务器软件
提供了某种服务的计算器,我们称之为服务器
,那么这些赋予计算器各种服务
功能的软件主要有哪一些呢?
常见的服务器软件有:
- 文件服务器:Server-U、FileZilla、VsFTP等;
- 数据库服务器:Oracle、MySQL、PostgreSQL、MSSQL等;
- 邮件服务器:Postfix、Sendmail等;
- HTTP 服务器:Apache、Nginx、IIS、Tomcat、NodeJS等; 这里我们主要介绍
HTTP服务器
HTTP协议:
当我们在浏览器中输入了www.baidu.com
类似这样的地址,点击确认时.只要我们的设备在网络上,就能够返回对应的百度首页回来.
* 浏览器发出请求->互联网上的服务器
* 服务器获取请求->请求的浏览器
参照之前的HTML标准格式
,浏览器找服务器要数据这个操作也需要彼此之间有一定的共识
,而这种共识
就叫做HTTP协议
HTTP服务器
直译过来就是
网站服务器
,主要为用户提供各种文档资源(文本,图片,音频等)
一般安装有,IIS
,apache
等软件
- 服务端开发 身为
21世纪
的网站,早就不局限于请求
,响应
这种最基础的方式了. 试想一下:
* 你每次访问百度首页看到的内容是否一样
* 你登陆了淘宝没登录淘宝看到的页面是否一样,为什么会产生这种变化呢?
这是因为当我们的请求
到达服务器时,会根据我们请求的内容
进行一些逻辑处理,返回不同的页面给用户,这部分的开发叫做服务端开发
,可以开发的语言有:PHP
,Asp
,Jsp
,Ruby
,Erland
等等
数据库(DBA数据库管理员)
试想一下,如果一个网站的注册用户有
1千万
个那么应该使用什么格式,什么方式来保存这些数据
呢?
保存的格式: 这个很简单:比如 用户名,密码,性别,出生,爱好,头像 等等 这样的数据排列方式,每一个用户就是一行
常规保存方式:
- .txt文件:因为内容是文本,所以直接使用文本文件保存肯定可以,但是当一个文本文件很大很大时,打开是异常缓慢的
- .excel文件:可以用来进行数据的统计,分析等操作,但是当很多个人需要访问同一个
.excel文件时
,性能也很差 - 当然也可能想到一些其他的保存方式,但如果出现被删除,被胡乱修改所带来的后果都是灾难性的
数据库:
- 按照数据结构来组织,存储和管理数据的仓库,软件开发行业一般指的是数据库软件,常见的有:
Oracle
、MySQL
、MSSQL
等 - 特点:
- 数据共享:多用户同时访问数据的稳定性
- 故障恢复:数据库软件提供了一套的方法,可以用来发现错误并且修复错误
- 减少数据冗余:由于大家都可以使用同一套数据,没有必要重复创建了
- 按照数据结构来组织,存储和管理数据的仓库,软件开发行业一般指的是数据库软件,常见的有:
- DBA数据库管理员:
- 从事
管理和维护数据库管理系统(DBMS)
的相关工作人员的统称,他的工作目的是:保证数据库的稳定性,安全性,完整性和高性能.
- 从事
HTTP服务器搭建
WAMP: 在windows
平台下如果想要一步到位安装好这些软件,可以使用wamp
,其中w的意思为windows
指的是windows操作系统
MAMp:在mac平台搭建的软件。具体的安装可以百度
服务端web开发
在讲解什么是服务端开发之前,让我们先思考几个问题
- 网站访问:
当我们做好了
.html
的网站,如何让别人(朋友,用户)可以访问到呢?- 使用
U盘拷贝
,QQ发送文件
等直接将文件共享的方式?---不灵活
- 将网站放在服务器上,让用户通过网址访问?---
绝大多数网站的做法
- 使用
网站内容更新:
如果用户每次访问我们的网站看到的内容都是一样的,在最初的新鲜劲过去以后估计就再也不想访问我们的网站了
o(╯□╰)o
,那么如何去更新网站的内容呢?- 当有内容,图片,或者界面需要更新是,直接修改
.html
文件?---费时费力
- 通过某种手段,当有新的消息,
自动
的完成网站的更新?---动态网站
- 当有内容,图片,或者界面需要更新是,直接修改
如何实现网站动态化
网站的本质,其实就是一堆按照某种规则排列的字符串而已,如果我们可以通过某种方式,让电脑
动态
生成这些字符串,是不是就实现了网站的动态化?- 想要让电脑干事情,可以通过
编程语言
来实现. 编程语言
的编写位置为服务器
,因为用户是问服务器要网站的- 在
服务器
,通过编程语言
让用户访问的网站动态化
叫做:服务端web开发
- 想要让电脑干事情,可以通过
可选开发方式: 虽然基本上所有可以返回
字符串
的编程语言都能够实现这个功能,目前市场主流开发语言有:Java
,PHP
,ASP.Net
,Ruby
,Python
,Erlang
等.虽然可以选择的开发语言有很多种,但是本质都是一样的:当用户访问网站了,根据`某些逻辑`,生成对应的`HTML,CSS,JS`代码给用户
PHP简介
PHP在众多的编程语言中,是比较容易上手,结合我们搭建的
WAMP/MAMP
环境就能够开始学习了
- PHP代码执行方式:
服务端web编程
写好的代码,需要通过浏览器访问服务器
,在服务器端
执行,然后返回给用户结果,如果直接使用浏览器打开,就会解析为文本
PHP常见语法
注,这里只列举常用的
PHP
语法,更为详细的语法教程可以查阅w3cschool_PHP教程
文件定义,注释: PHP文件以
.php
结尾,代码的编写位置在<?php 写在这里?>
.注释的写法跟js
一致<?php
//这是单行注释
/*
这是多行注释
*/
?>
PHP变量规则:
- 变量以
$
符号开头,其后是变量的名称 - 变量名称必须以字母或下划线开头
- 变量名称不能以数字开头
- 变量名称只能包含字母数字字符和下划线(
A-z
、0-9
以及_
) - 变量名称对大小写敏感
- 变量以
// 变量以`$`符号开头,其后是变量的名称
// 变量名称必须以字母或下划线开头
$a;
$b;
$a1;
$_abc;
// 变量名称不能以数字开头
// 变量名称只能包含字母数字字符和下划线(`A-z`、`0-9` 以及` _`)
// 下面这些是错误的变量定义
$1;
$哈哈;
$^&*;
//变量名称对大小写敏感(`$y` 与`$Y` 是两个不同的变量)
// 下面定义的两个变量是不同的,大写,小写x
$x;
$X;
- 数据类型
PHP
支持的数据类型包括:字符串,整数,浮点数,布尔,数组,对象,NULLL(注:由于对象中可以使用函数,故对象的语法在下文中会提及)- 定义字符串时需要注意:
- 单引号:
``
内部的内容只是作为字符串 - 双引号:
""
如果内部是PHP
的变量,那么会将该变量的值解析
- 单引号:
- 字符串连接:不同于
JavaScript
,PHP
中使用.
进行连接
- 定义字符串时需要注意:
// 字符串
$str = '123';
// 字符串连接
$str2 = '123'.'哈哈哈';
// 字符串
// 整数
$numA = 1; //正数
$numB = -2;//负数
// 浮点数
$x = 1.1;
// 布尔
$a = true;
$b = false;
// 数组
$arr = array('123',123)
运算符
PHP
中的运算符跟JavaScript
中的基本一致,用法也基本一致- 算数运算符:
+
,-
,/
,*
,%
- 赋值运算符:
x = y
,x += y
,x -= y
注:这里列举的并不完全,更为详细的PHP
运算符教程请查阅w3cschool_PHP运算符
- 算数运算符:
<?php
$x=10;
$y=6;
echo ($x + $y); // 输出 16
echo ($x - $y); // 输出 4
echo ($x * $y); // 输出 60
echo ($x / $y); // 输出 1.6666666666667
echo ($x % $y); // 输出 4
?>
- 函数:
PHP
虽然系统内建了一些函数,但是这不影响我们定义自己的. 函数的作用就是在代码中可以重复使用的语法块
,页面加载的时候不会执行,只有在被调用
的时候才会执行
// 基础语法
function functionName() {
这里写代码
}
// 无参数 无返回值的函数
function sayhi(){
echo "Hello World";
}
// 有参数 无返回值的函数
function sayName($name){
echo $name.'你好哦';
}
// 调用
sayName('小狐狸');
// 有参数,参数有默认值的函数
function sayFood($food='西兰花'){
echo $food.'好好吃';
}
// 调用
sayFood('西葫芦');// 如果传入参数,就使用传入的参数
sayFood();// 如果不传入参数,直接使用默认值
// 有参数,有返回值的函数
function sum($a,$b){
return $a+$b
}
sum(1,2);// 返回值为1+2 = 3
- 对象 PHP中允许使用对象这种,自定义数据类型. 使用时必须先声明,实例化之后才能够使用
// 定义最基础的类
class Fox{
public $name = 'itcast';
public $age = 10;
}
$fox = new $fox;
// 对象属性取值
$name = $fox->name;
// 对象属性赋值
$fox->name = '小狐狸';
// 带构造函数的对象
class fox{
// 私有属性,外部无法访问
var $name = '小狐狸';
// 定义方法 用来获取属性
function Name(){
return $this->name;
}
// 构造函数,可以传入参数
function fox($name){
$this->name = $name
}
}
// 定义了构造函数 需要使用构造函数初始化对象
$fox = new fox('小狐狸');
// 调用对象方法,获取对象名
$foxName = $fox->Name();
- 内容输出:
echo
:PHP
语句直接使用即可,输出字符串print_r()
:函数
输出复杂数据类型,比如数组,对象var_dump()
:函数
输出详细信息,如对象、数组
$arr =array(1,2,'123');
echo'123';
// 结果为 123
print_r($arr);
// 结果为 Array ( [0] => 1 [1] => 2 [2] => 123 )
var_dump($arr);
/* 结果为
array
0 => int 1
1 => int 2
2 => string '123' (length=3)
*/
- 循环语句: 这里只列举了
foreach
,for
循环
// for 循环
for ($x=0; $x<=10; $x++) {
echo "数字是:$x <br>";
}
// foreach 循环
$colors = array("red","green","blue","yellow");
// 参数1为循环的对象,参数2会将对象的值挨个取出,直到最后
// 如果循环的是对象的话,输出的是对象属性的值
foreach ($colors as $value) {
echo "$value <br>";
}
输出结果为
/*
red
green
blue
yellow
*/
header()
函数 用来向客户端(浏览器)发送报头,如果出现中文无法显示,可以尝试在PHP
代码顶部添加 如下代码
header("content-type:text/html; charset=utf-8");
# php中header()
浏览器访问
http服务器
,接收到响应时,会根据响应报文头
的内容进行一些具体的操作,在php
中,我们能够使用header
来设置这些内容
设置文本编码
- 设置编码格式为:utf-8
header('content-type:text/html; charset= utf-8');
- 设置编码格式为:utf-8
设置页面跳转
- 设置跳转到百度首页
header('location:http://www.baidu.com');
- 设置页面间隔刷新
header('refresh:3; url=http://www.xiaomi.com');
- 设置页面间隔刷新
PHP_GET数据获取
在
PHP
中,如果想要获取通过get
方法提交的数据,可以通过$_GET
对象来获取(虽然参数在地址栏
中可以查看)
HTML代码: 下面就是一个简单的表单代码,将数据提交到
01.php
,使用get
的方式
<form action="01.php" method="get" >
<label for="">姓名:
<input type="text" name= "userName"></label>
<br/>
<label for="">邮箱:
<input type="text" name= "userEmail"></label>
<br/>
<input type="submit" name="">
</form>
PHP代码:
<?php
echo "<h1>GET_PAGE</h1>";
echo 'userName:'.$_GET['userName'] ;
echo '<br/>';
echo 'userEmail:'.$_GET['userEmail']; ?>
PHP_POST数据获取
在
PHP
中,如果想要获取通过post
方法提交的数据,可以通过$_POST
对象来获取
HTML代码: 将数据提交到
02.php
,使用post
的方式(注意:代码中的method
改为post
)- 此时地址栏将不显示账号和邮箱
POST&GET错误处理
当我们直接访问
POST
&GET
页面时由于并没有传递任何数据,会因为$_GET
或$_POST
不存在对应的key而报错.
- 处理方式1:
- 使用
array_key_exists(key, 数组)
函数来进行判断 - 参数1: 要检测的key
字符串
- 参数2: 检验的数组
- 使用
if(array_key_exists('name', $_GET)){
//如果有数据 再去读取
}else{
// 反之 可以执行一些 其他的逻辑
}
PHP. 01. C/S架构、B/S架构、服务器类型、服务器软件、HTTP协议/服务器、数据库、服务器web开发、PHP简介/常见语法、PHPheader()、 PHP_POST/GET数据获取和错误处理的更多相关文章
- Web开发中B/S架构和C/S架构的区别
在web开发中有两种基本架构,即C/S架构和B/S架构那么这两种架构有什么区别呢?那么就一起来看看吧. C/S架构图: B/S架构图: C/S架构是 浏览/服务器端的交互,是早期的一种分布式架构,在该 ...
- python网络编程01 /C/S架构|B/S架构、网络通信原理、五层协议、七层协议简述、端口映射技术
python网络编程01 /C/S架构|B/S架构.网络通信原理.五层协议.七层协议简述.端口映射技术 目录 python网络编程01 /C/S架构|B/S架构.网络通信原理.五层协议.七层协议简述. ...
- 分布式架构高可用架构篇_07_MySQL主从复制的配置(CentOS-6.7+MySQL-5.6)
参考: 龙果学院http://www.roncoo.com/share.html?hamc=hLPG8QsaaWVOl2Z76wpJHp3JBbZZF%2Bywm5vEfPp9LbLkAjAnB%2B ...
- Web项目的三层架构和MVC架构异同
http://www.cnblogs.com/zhhh/archive/2011/06/10/2077519.html 又看到有人在问三层架构和MVC的关系,感觉这种问题有点教条化了.因为它们都在逻辑 ...
- JAVA架构师眼中的高并发架构,分布式架构 应用服务器集群
前言 高并发经常会发生在有大活跃用户量,用户高聚集的业务场景中,如:秒杀活动,定时领取红包等. 为了让业务可以流畅的运行并且给用户一个好的交互体验,我们需要根据业务场景预估达到的并发量等因素,来设计适 ...
- DDD CQRS架构和传统架构的优缺点比较
明天就是大年三十了,今天在家有空,想集中整理一下CQRS架构的特点以及相比传统架构的优缺点分析.先提前祝大家猴年新春快乐.万事如意.身体健康! 最近几年,在DDD的领域,我们经常会看到CQRS架构的概 ...
- Atittit.研发公司的组织架构与部门架构总结
Atittit.研发公司的组织架构与部门架构总结 1. archi组织架构与 部门规划2 1.1. 最高五大组织机构2 1.2. 宗教事务部2 1.3. 制度与重大会议委员会2 1.4. 纠纷处理部: ...
- 常看常遇见之一——BS架构VS CS架构
常看常遇见之一——BS架构VS CS架构 1.BS架构 即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构.在这种结构下,用户 ...
- web开发架构设计
2015-07-31 13:10:38 一, web服务器 .负载均衡 .不做对URL的rewrite逻辑判断, 全部转发到代码服务器的单一入口文件, 由代码去全权处理 二, 代码服务器(常跟web服 ...
随机推荐
- javaweb浏览器随机输出一张验证码图片
一.在web.xml中的配置如下: <?xml version="1.0" encoding="UTF-8"?><web-app xmlns: ...
- 性能测试分享:Jmeter的api监控工具解决方案
性能测试分享:Jmeter的api监控工具解决方案 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询q ...
- Java并发编程:Java线程池
转载自:http://www.cnblogs.com/dolphin0520/p/3932921.html 在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题 ...
- mysql 分析3使用分析sql 性能 show profiles ;
show variables like '%profiling%'; 查看状态 查看时间去哪了``` set profiling=1;// 打开 show profiles; 查看执行过的 ...
- css浮动布局
上次我们一起对盒子模型进行了一定的了解,今天我们就对css浮动布局做一下研究.首先我们来了解一下网页基本布局的三种形式. 首先我们来了解一下什么是网页布局: 网页的布局方式其实就是指浏览器是如何对网页 ...
- mac jmeter 的使用
1.下载 mac下载地址:http://jmeter.apache.org/download_jmeter.cgi,下载apache-jmeter-3.1.tgz 2.下载完毕后解压,得到安装包 3. ...
- Linux常用命令List
参考<linux命令行大全> 一.文件命令 cd - 切换为之前目录 wc -l -w file cmd --help apropos keyword apropos cpu > t ...
- html静态页面实现微信分享思路
微信分享网页的时候,希望分享出来的链接是标题+描述+缩略图,微信开发代码示例里已提供了方法,但只适用于动态页面.由于dedecms是生成了静态文件,其实我想使用ajax获取jssdk参数也能也能实现微 ...
- Apriori算法介绍(Python实现)
导读: 随着大数据概念的火热,啤酒与尿布的故事广为人知.我们如何发现买啤酒的人往往也会买尿布这一规律?数据挖掘中的用于挖掘频繁项集和关联规则的Apriori算法可以告诉我们.本文首先对Apriori算 ...
- java多线程基本概述(五)——线程通信
线程之间的通信可以通过共享内存变量的方式进行相互通信,也可以使用api提供的wait(),notify()实现线程之间的通信.wait()方法是Object类的方法,改方法用来将当前的线程置入&quo ...