- PHP的意思?
答:PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页
- 双引号和单引号的区别?
(1)双引号解释变量,单引号不解释变量
(2)双引号里插入单引号,其中单引号里如果有变量的话,变量解释
(3)双引号的变量名后面必须要有一个非数字、字母、下划线的特殊字符,或者用{}讲变量括起来,否则会将变量名后面的部分当做一个整体,引起语法错误
(4)双引号解释转义字符,单引号不解释转义字符,但是解释'\和\
(5)能使单引号字符尽量使用单引号,单引号的效率比双引号要高(因为双引号要先遍历一遍,判断里面有没有变量,然后再进行操作,而单引号则不需要判断)
- 常用的超全局变量(8个)?
$_GET ----->get传送方式
$_POST ----->post传送方式
$_REQUEST ----->可以接收到get和post两种方式的值
$GLOBALS ----->所有的变量都放在里面
$_FILE ----->上传文件使用
$_SERVER ----->系统环境变量
$_SESSION ----->会话控制的时候会用到
$_COOKIE ----->会话控制的时候会用到
- 表单中 get 与 post 提交方法的区别?
答: get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息. Get传值一般在2KB以内,post传值大小可以在php.ini中进行设置
Get安全性非低,post安全性较高,执行效率却比Post高
- AJAX的优势是什么?属性有哪些?
答:ajax是异步传输技术,可以通过javascript实现,也可以通过JQuery框架实现,实现局部刷新,减轻了服务器的压力,也提高了用户体验;
属性: async, type, url, data, dataType, success,
- SESSION与COOKIE的区别?
答: session : 储存用户访问的全局唯一变量,存储在服务器上的php指定的目录中的(session_dir)的位置 进行的存放
cookie : 用来存储连续訪問一个頁面时所使用,是存储在客户端,对于Cookie来说是存储在用户WIN的Temp目录中的。
安全性:session安全性比cookie高; 两者都可通过时间来设置时间长短
- 现在编程中经常采取MVC三层结构,请问MVC分别指哪三层,有什么优点?
答: MVC三层分别指:业务模型(model)、视图(view)、控制器(controller),由控制器层调用模型处理数据,然后将数据映射到视图层进行显示,
优点是:①可以实现代码的重用性,避免产生代码冗余;②M和V的实现代码分离,从而使同一个程序可以使用不同的表现形式
- 安全对一套程序来说至关重要,请说说在开发中应该注意哪些安全机制?
答: ①防远啊程提交;②防SQL注入,对特殊代码进行过滤;③防止注册机灌水,使用验证码;
- 您是否用过模板引擎? 如果有您用的模板引擎的名字是?
答: 用过, smarty
- 简述如何得到当前执行脚本路径,包括所得到参数?
答:$script_name = basename(__file__);
print_r($script_name);
- 对json数据格式的理解?
答: JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,json数据格式固定,可以被多种语言用作数据的传递
PHP中处理json格式的函数为json_decode( string $json [, bool $assoc ] ) ,接受一个 JSON格式的字符串并且把它转换为PHP变量,参数json待解码的json string格式的字符串。assoc当该参数为TRUE时,将返回array而非object;
Json_encode:将PHP变量转换成json格式
- print、echo、print_r有什么区别?
答: echo 是PHP语句; print 和 print_r 是函数;语句没有返回值,函数可以有返回值(即便没有用)
echo 输出一个或者多个字符串
print( ) 只能打印出简单类型变量的值(如int,string)
print_r() 可以打印出复杂类型变量的值(如数组,对象)
- 处理 '数组'的常用函数?(重点看函数的‘参数’和‘返回值’)?
答: ① array()创建数组;② count()返回数组中元素的数目;③ array_push()将一个或多个元素插入数组的末尾;④ array_column()返回输入数组中某个单一列的值;⑤ array_combine() 通过合并两个数组来创建一个新数组;⑥ array_reverse() 以相反的顺序返回数组;⑦ array_unique() 删除数组中的重复值;⑧ in_array()检查数组中是否存在指定的值
- PHP处理'字符串'的常用函数?(重点看函数的‘参数’和‘返回值)?
答:①trim()移除字符串两侧的空白字符和其他字符;②substr_replace()把字符串的一部分替换为另一个字符串;③substr_count()计算子串在字符串中出现的次数;④substr()返回字符串的一部分;⑤strtolower()把字符串转换为小写字母;⑥strtoupper()把字符串转换为大写字母;⑦ strtr()转换字符串中特定的字符;⑧strrchr()查找字符串在另一个字符串中最后一次出现;⑨ strstr()查找字符串在另一字符串中的第一次出现(对大小写敏感);strrev()反转字符串;strlen()返回字符串的长度;str_replace()替换字符串中的一些字符(对大小写敏感);print()输出一个或多个字符串;explode()把字符串打散为数组;is_string()检测变量是否是字符串;strip_tags()从一个字符串中去除HTML标签;mb_substr()用来截中文与英文的函数
- PHP处理时间的常用函数?(重点看函数的‘参数’和‘返回值’)?
答:date_default_timezone_get() 返回默认时区。
date_default_timezone_set() 设置默认时区。
date() 格式化本地时间/日期。
getdate() 返回日期/时间信息。
gettimeofday()返回当前时间信息。
microtime() 返回当前时间的微秒数。
mktime() 返回一个日期的 Unix时间戳。
strtotime() 将任何英文文本的日期或时间描述解析为 Unix时间戳。
time() 返回当前时间的 Unix时间戳。
- 有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?
答:方法1:(对于PHP5及更高版本):
$readcontents = fopen("http://www.phpres.com/index.html",
$contents = stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;
方法2:
echo file_get_contents("http://www.phpres.com/index.html");
- 用PHP打印出 前一天的时间格式 是2018-10-21 21:21:21?
答: echo date('Y-m-d H:i:s', strtotime('-1 days'));
- 用PHP写出显示客户端 IP(要求取得一个int)与服务器 IP 的代码?
答:打印客户端IP: echo $_SERVER[‘REMOTE_ADDR’];
或者: getenv('REMOTE_ADDR'); ip2long进行转换
打印服务器IP: echo gethostbyname("www.bolaiwu.com")
- PHP中的PEAR是什么?
答:PEAR也就是为PHP扩展与应用库(PHP Extension and Application Repository),它是一个PHP扩展及应用的一个代码仓库。
- 如何在PHP中定义常量?
答:PHP中使用Define () 来定义常量。
define (“Newconstant”, 30);
- 语句 include 和 require的区别是什么? 为避免多次包含同一文件,可用(?)语句代替它们?
答:require是无条件包含,也就是如果一个流程里加入require,无论条件成立与否都会先执行require,当文件不存在或者语法错误的时候,会报fatal error (致命错误),并且会终止程序执行;
include有返回值,而require没有(可能因为如此require的速度比include快),如果被包含的文件不存在的化,会报warning的错误,但是程序会继续执行下去;
加once后,系统会进行判断,如果已经包含,则不会再包含第二次;
- 说明php中传值与传引用的区别,并说明传值什么时候传引用?
答: 变量默认总是传值赋值,那也就是说,当将一个表达式的值赋予一个变量时,整个表达式的值被赋值到目标变量,这意味着:当一个变量的赋予另外一个变量时,改变其中一个变量的值,将不会影响到另外一个变量;
php也提供了另外一种方式给变量赋值:引用赋值。这意味着新的变量简单的__引用__(换言之,成为了其别名或者指向)__了原始变量__。改动的新的变量将影响到原始变量,反之亦然。使用引用赋值,简单地将一个&符号加到将要赋值的变量前(源变量)
对象默认是传引用
对于较大是的数据,传引用比较好,这样可以节省内存的开销
- herder() 函数跳转页面?
答: header("Location: http://www.baidu.com");
- 在PHP中 error_reporting 这个函数有什么作用?
答: 设置错误级别与错误信息回报
- php中的 _LINE_ 与 _FILE_ 分别代表什么意思?
答: 这两个常量。分别是当前文件的行数 和 文件名(含路径)。
- 请写一个函数验证电子邮件的格式是否正确?
答:function checkEmail($email)
{
$pregEmail = "/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/i";
return preg_match($pregEmail,$email);
}
- 正则表达式能同时匹配电话和手机?
答: /^(\+86)?1\d{10}|\d{3}-\d{8}|\d{4}-\d{7,8}$/
- 如何把手机号用****代替?
答:{$vo['tel']|substr_replace=###,'****',3,4}
- foo()和@foo()之间有什么区别?
答: @foo()控制错误输出
- 在HTTP ,状态码401的含义是?;如果返回“找不到文件”的提示,则可用 header 函数,其语句为?
答:状态401代表未被受权,header("Location:www.xxx.php");
- 在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?
答:heredoc的语法是用"<<<"加上自己定义成对的标签,在标签范围內的文字视为一个字符串
例子:
$str = <<<SHOW
my name is Jiang Qihui!
SHOW;
- MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化?
a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。
b. 选择合适的表字段数据类型和存储引擎,适当的添加索引。
c. mysql库主从读写分离。
d. 找规律分表,减少单表中的数据量提高查询速度。
e. 添加缓存机制,比如memcached,apc等。
f. 不经常改动的页面,生成静态页面。
g. 书写高效率的SQL。比如 SELECT * FROM TABEL 改为 SELECT field_1, field_2, field_3 FROM TABLE.
- 对于大流量的网站,您采用什么样的方法来解决访问量问题?
答: 确认服务器硬件是否足够支持当前的流量, 数据库读写分离, 优化数据表,
程序功能规则, 禁止外部的盗链,控制大文件的下载, 使用不同主机分流主要流量
- php中要获取今天下午6点的时间戳怎么获取?
答: 函数的参数: mktime(时,分,秒,月,日,年) ;
$time=mktime(18,0,0,date('m'),date('d'),date('Y'));
- 如何实现字符串翻转?
答:echo strrev($a);
- 检测一个变量是否有设置的函数是? 是否为空的函数是?
答: isset($str); empty($str);
- 取得查询结果集总数的函数是?
答: mysql_num_rows($result);
- $arr = array('james', 'tom', 'symfony'); 请打印出第一个元素的值?
答: echo $array[0];
- 请写出PHP5权限控制修饰符?构造函数和析构函数?
答: public (公共的,没有访问限制), private (私用的,在类的内部才可以访问),
protected (保护的,该类内部和继承类中可以访问);
__construct (构造函数), __destruct(析构函数);
- 在PHP中,当前脚本的名称(不包括路径和查询字符串)记录在哪个预定义变量中?
而链接到当前页面的URL记录在哪个预定义变量中?
答: $_SERVER['PHP_SELF']; $_SERVER["HTTP_REFERER"];
- 链表查询为什么不能用索引?
答: 1、两表关联使用的条件字段中字段的长度是否是一致的
2、两表关联使用的条件字段中字段的编码是否是一致的
- Redis 和 Memcache的区别?
答:1、存储方式:
memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小;
redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化;
2、数据支持类型:
redis在数据支持上要比memecache多的多。
3、使用底层模型不同:
新版本的redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。
4、运行环境不同:
redis目前官方只支持LINUX 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上
- 什么是面向对象?主要特征是什么?几大原则是什么?
答: 面向对象是程序的一种设计模式,它利于提高程序的重用性,使程序机构更加清晰。
主要特征是:封装、继承、多态。如果是4个方面则加上:抽象
五大基本原则:单一职责原则;开放封闭原则;替换原则; 依赖原则; 接口分离原则
- 堆和栈的区别?
答:栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;
堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小。
- Mysql 的存储引擎,myisam 和 innodb 的区别?
答: myisam 是非事务的存储引擎;适合用于频繁查询的应用;表锁,不会出现死锁;适合小数据,小并发
innodb 是支持事务的存储引擎;合于插入和更新操作比较多的应用;设计合理的话是行锁(最大区别就在锁的级别上);适合大数据,大并发
MySQL主要的索引类型
普通索引:是最基本的索引,它没有任何限制;
唯一索引:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一;
主键索引:是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值;
组合索引:指多个字段上创建的索引,只有在查询条件中使用了创建索引时的第一个字段,索引才会被使用。使用组合索引时遵循最左前缀集合;
全文索引:主要用来查找文本中的关键字,而不是直接与索引中的值相比较,mysql中MyISAM支持全文索引而InnoDB不支持;
索引的作用?和它的优点缺点是什么?
答:索引就一种特殊的查询表,数据库的搜索引擎可以利用它加速对数据的检索。它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。索引可以是唯一的,创建索引允许指定单个列或者是多个列。缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小。
- 数据表类型有哪些?
答:MyISAM、InnoDB、HEAP、BOB,ARCHIVE,CSV等。
MyISAM:成熟、稳定、易于管理,快速读取。一些功能不支持(事务等),表级锁。
InnoDB:支持事务、外键等特性、数据行锁定。空间占用大,不支持全文索引等。
- 说说对SQL语句优化有哪些方法?(选择几条)
(1)Where子句中:where表之间的连接必须写在其他Where条件之前,那些可以过滤掉最大数量记录的条件必须写在Where子句的末尾.HAVING最后。
(2)用EXISTS替代IN、用NOT EXISTS替代NOT IN。
(3) 避免在索引列上使用计算
(4)避免在索引列上使用IS NULL和IS NOT NULL
(5)对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
(6)应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描
(7)应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描
- 如何优化Mysql数据库?
(1) SELECT查询必须指明字段名;
(2) 查询一条数据的时候,使用 LIMIT 1;
(3) 为搜索的WHERE字段建立索引;
(4) 尽可能的使用 NOT NULL;
(5) 选择合适的存储引擎;
(6) 尽量不要使用%前缀的LIKE模糊查询;
(7) 使用连接(JOIN)来代替子查询(Sub-Queries)
(8) 建议开启查询缓存;
(9) 使用UNION代替临时表;
(10) 选取最适用的字段属性;
union、union all的区别对重复结果的处理:
UNION在进行表链接后会筛选掉重复的记录,Union All不会去除重复记录;对排序的处理:Union将会按照字段的顺序进行排序;UNION ALL只是简单的将两个结果合并后就返回;从效率上说,UNION ALL 要比UNION快很多
varchar(100)和varchar(200)的区别答:
varchar(100)最多存放100个字符,varchar(200)最多存放200个字符,varchar(100)和(200)存储hello所占空间一样,但后者在排序时会消耗更多内存,因为order by col采用fixed_length计算col长度(memory引擎也一样)
varchar(20)和int(20)中的20含义一样吗答:
不一样,前者表示最多存放20个字符,后者表示最多显示20个字符,但是存储空间还是占4字节存储,存储范围不变;
什么是存储过程?用什么来调用?
答:存储过程是一个预编译的SQL 语句,优点是允许模块化的设计,就是说只需创建一次,以后在该程序中就可以调用多次。如果某次操作需要执行多次SQL ,使用存储过程比单纯SQL 语句执行要快。可以用一个命令对象来调用存储过程。
什么是触发器?触发器的作用?
答:触发器是一中特殊的存储过程,主要是通过事件来触发而被执行的。它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。可以联级运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。
- 数据库中的事务是什么? 特性有哪些?
答:事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。
如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。
如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。
ACID 四大特性:
(1)原子性:即不可分割性,事务要么全部被执行,要么就全部不被执行。
(2)一致性或可串性。事务的执行使得数据库从一种正确状态转换成另一种正确状态
(3)隔离性。在事务正确提交之前,不允许把该事务对数据的任何改变提供给任何其他事务,
(4)持久性。事务正确提交后,其结果将永久保存在数据库中,即使在事务提交后有了其他故障,事务的处理结果也会得到保存。
- PHP7 新特性有哪些?
PHP 7+ 版本极大地改进了性能,在一些WordPress基准测试当中,性能可以达到PHP 5.6的3倍。
- PHP 7 NULL 合并运算符(??)是用于执行isset()检测的三元运算的快捷方式,简化三元运算: $abc = $_GET['abc'] ?? 'abc';
- PHP 7 新增加了 intdiv() 函数,接收两个参数,返回值为第一个参数除于第二个参数的值并取整。例如:var_dump(intdiv(10,3));var_dump(intdiv(-10,3));
注意:(1)ceil向上取整;(2)floor向下取整;
- 天空船比较符 (组合比较符 <=> ): echo 1<=>1; //返回0; echo 1<=>2; //返回-1; echo 2<=>1; //返回1
- 平方的计算: echo 3**2; //9
- 在 PHP 5.6 中仅能通过 const 定义常量数组,PHP 7 可以通过 define() 来定义。
<?php
define('wzl',['wang','zi','long']);
var_dump(wzl);
(6)统一语法变量:
例1:
$wzl = 'wangzilong';
$foo = array(
'bar'=>array('baz'=>'wzl'),
);
echo $$foo['bar']['baz'];//会报错
例2:
$foo = 'wzl';
$wzl = array(
'bar'=>array('baz'=>'wzl'),
);
echo $$foo['bar']['baz'];//不会报错
- 请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char有什么区别?
答: int是数字类型; char固定长度字符串; varchar实际长度字符串; datetime日期时间型; text文本字符串
char的场地固定为创建表设置的长度; varchar为可变长度的字符
- 写一个函数,能够遍历一个文件夹下的所有文件和子文件夹?
答: function my_scandir($dir)
{
$files = array();
if ( $handle = opendir($dir) ) {
while ( ($file = readdir($handle)) !== false ) {
if ( $file != ".." && $file != "." ) {
if ( is_dir($dir . "/" . $file) ) {
$files[$file] = scandir($dir . "/" . $file);
}
else {
$files[] = $file;
}
}
}
closedir($handle);
return $files;
}
}
- 常见的端口号有哪些?
答: TCP 21端口:FTP 文件传输服务
TCP 22端口: ssh 安全 Shell(SSH)服务
TCP 23端口: TELNET 终端仿真服务
TCP 25端口: SMTP 简单邮件传输服务
UDP 53端口: DNS 域名解析服务
TCP 80端口: HTTP 超文本传输服务
TCP 110端口:POP3 “邮局协议版本3”使用的端口
TCP 443端口:HTTPS 加密的超文本传输服务
- TP5 和 TP3.2的区别?
答:(1)目录结构;
(2)控制器版本对比;
TP3.2控制器命名必须以Controller.class.php结尾,而TP5是以.php结尾;
TP3.2控制器模版输出使用$this->display()方法,而TP5中如果继承基础控制器使用
$this->fetch()方法,没有继承使用view()助手函数即可;
(3)系统常量的废弃;
对于TP3.2,TP5废弃了很多的常量,如果开发这有需求可以自定义,有些常量的功能可以通过request() 获取,其中废弃的常量有:
- REQUEST_METHOD
- IS_GET
- IS_POST
- IS_PUT
- IS_DELETE
- IS_AJAX
- __EXT__
(4)模型;
新版的模型查询增加了静态方法; TP5支持think命令创建控制器模型,而TP3.2不支持;
- 写出 SQL语句的格式 : 插入 ,更新 ,删除 ?
表名User
Name Tel Content Date
张三 13333663364 大专 2018-10-11
张三 13612312331 本科 2018-10-15
张四 13541005777 中专 2018-10-15
(a) 有一新记录(小王 13254748547 高中毕业 2018-05-06)请用SQL语句新增至表中
答: mysql_query("INSERT INTO `user` (name,tel,content,date) VALUES ('小王','13254748547','高中毕业','2018-07-06')")
(b) 请用sql语句把张三的时间更新成为当前系统时间
答: $nowDate = date("Ymd");
mysql_query("UPDATE `user` SET date='".$nowDate."' WHERE name='张三'");
(c) 请写出删除名为张四的全部记录
答: mysql_query("DELETE FROM `user` WHERE name='张四'");
56 . tp5.0和tp5.1的区别有哪些?
目录结构:
tp5.1 不存在config.php文件 , 所有的配置文件被拆分开。
环境变量:
tp5.1取消了所有系统变量,原来的系统路径变量 改为是有Env类获取 ,(必须引入 thing\facade\Env);例如:echo Env::get('app_path')
tp5.0 和tp5.1的不同 and Db类和模型的正确使用姿势
57. 数字转IP函数inet_ntoa()
58.
CA认证
电子商务认证授权机构(CA, Certificate Authority),也称为电子商务认证中心,是负责发放和管理数字证书的权威机构,并作为电子商务交易中受信任的第三方,承担公钥体系中公钥的合法性检验的责任
Heartbleed
Heartbleed漏洞,这项严重缺陷(CVE-2014-0160)的产生是由于未能在memcpy()调用受害用户输入内容作为长度参数之前正确进行边界检查。攻击者可以追踪OpenSSL所分配的64KB缓存、将超出必要范围的字节信息复制到缓存当中再返回缓存内容,这样一来受害者的内存内容就会以每次64KB的速度进行泄露。
SEO
SEO(Search Engine Optimization):汉译为搜索引擎优化。是一种方式:利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名。目的是:为网站提供生态式的自我营销解决方案,让其在行业内占据领先地位,获得品牌收益;SEO包含站外SEO和站内SEO两方面;为了从搜索引擎中获得更多的免费流量,从网站结构、内容建设方案、用户互动传播、页面等角度进行合理规划,还会使搜索引擎中显示的网站相关信息对用户来说更具有吸引力。
HTTP与HTTPS的区别
超文本传协议HTTP协议被用于Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取Web浏览器和网站服务器之间的传输报文,就可以直接读取其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号,密码支付信息。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器的之间的通信加密。
一、HTTP和HTTPS的基本概念
HTTP:是互联网上应用最为广泛的一种网络协议 ,是一个客户端和服务器端请求和应答的标准(TCP),用于从WWW服务器传输超文本到本地浏览器的传输协议,它可以使浏览器更加高效,使网络传输减少。
HTTPS:是以安全为目标的HTTP通道,简单讲就是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详情内容就需要SSL。
HTTPS协议的主要作用可以分为两种:一种是建立一个信息安全通道,来保证数据传输的安全;另一种就是确认网站的真实性。
二、HTTP与HTTPS有什么区别?
HTTP协议传输的数据都是未加密的,也就是明文的,因此使用HTTP协议传输隐私信息非常不安全,为了保证这些隐私数据能加密传输,于是网景公司设计了SSL(Secure Sockets Layer)协议用于对HTTP协议传输的数据进行加密,从而就诞生了HTTPS。
简单来说,HTTP协议是有SSL+HTTP协议构建的可进行加密传输,身份认证的网络协议,要比HTTP协议安全。
HTTPS和HTTP的区别主要如下
1. HTTPS协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2. HTTP是超文本传输协议,信息是明文传输,HTTPS则是具有安全性的SSL加密传输协议。
3. HTTP的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输,身份认证的网络协议,比HTTP协议安全。
三、HTTPS的工作原理
我们都知道HTTPS能够加密信息,以免敏感信息被第三方获取,所以很多银行网站或者电子邮箱等等安全级别较高的服务都会采用HTTPS协议。
1、客户端发起HTTPS请求
这个没什么好说的,就是用户在浏览器里输入一个https网址,然后连接到server的443端口。
2、服务端的配置
采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有一年的免费服务)。
这套证书其实就是一对公钥盒私钥,如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,全世界只有你一个人有这一把钥匙,你可以把锁头给别人,别人可以用这把锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只要你才能看到被这把锁锁起来的东西。
3、传送证书
这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。
4、客户端解析证书
这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。
如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。
5、传送加密信息
这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的同学就可以通过这个随机值进行加密解密了。
6、服务端解密信息
服务端用私钥解密后,得到了客户端传过来的的随机值(私钥),然后把内容通过该值进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。
7、传输加密后的信息
这部分信息是服务端用私钥加密后的信息,可以在客户端被还原。
8、客户端解密信息
客户端用之前生产的私钥解密服务段传过来的信息,于是获取了解密后的内容,整个过程第三方即使监听到了数据,也束手无策。
myisam与innodb select count(*)哪个更快,为什么答:myisam更快,因为myisam内部维护了一个计数器,可以直接调取。
PHP命名空间(Namespace)的使用详解
命名空间一个最明确的目的就是解决重名问题,PHP中不允许两个函数或者类出现相同的名字,否则会产生一个致命的错误。这种情况下只要避免命名重复就可以解决,最常见的一种做法是约定一个前缀。
char 与 varchar 区别
MySQL中的字符串有两个常用的类型:char和varchar,二者各有优势,下面我们来详细分析一下。
转载加补充
在建立数据库表结构的时候,为了给一个String类型的数据定义一个数据库的数据库类型,一般参考的都是char或者varchar,这两种选择有时候让人很纠结,今天想总结一下它们两者的区别,明确一下两者的区别。
首先明确的是,char的长度是不可变的,而varchar的长度是可变的,也就是说,定义一个char[10]和varchar[10],如果存进去的是‘csdn’,那么char所占的长度依然为10,除了字符‘csdn’外,后面跟六个空格,而varchar就立马把长度变为4了,取数据的时候,char类型的要用trim()去掉多余的空格,而varchar是不需要的。
尽管如此,char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。
再者,char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节。
两者的存储数据都非unicode的字符数据。
一般用 char 类型的 存放 固定的数据 如 身份证号(18) 电话号 性别 。。。。
用varchar 存放可变的数据 这个就太多了 。。。。