php常见知识

PHPHypertext Preprocessor

 

一、getpost的区别

1. get是从服务器上获取数据,post是向服务器传送数据。
2. get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址。用户看不到这个过程。
3. 对于get方式,服务器端Request.QueryString获取变量的值,对于post方式,服务器端Request.Form获取提交的数据。
4. get传送的数据量较小,不能大于2KBpost传送的数据量较大,一般被默认为不受限制。但理论上,IIS4中最大量为80KBIIS5中为100KB
5. get安全性非常低,post安全性较高。但是执行效率却比Post方法好。

 

二、sessioncookie的区别

1cookie数据存放在客户的浏览器上,session数据放在服务器上。

2cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
   考虑到安全应当使用session

3session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
   考虑到减轻服务器性能方面,应当使用COOKIE

4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20cookie

5、所以个人建议:
   将登陆信息等重要信息存放为SESSION
   其他信息如果需要保留,可以放在COOKIE

 

三、数据库中的事务是什么

事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:
原子性
事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。

一致性
事务在完成时,必须使所有的数据都保持一致状态。在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。
    事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。

隔离性
由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,
       要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。这称为可串行性,因为它能够重新装载起始数据,
       并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
持久性
事务完成之后,它对于系统的影响是永久性的。该修改即使出现系统故障也将一直保持。

 

begin 开始一个事务

rollback事务回滚

commit事务确认

注:rollbackcommit不能并列使用,当同时使用时,只有前面一个生效

 

MYSQL默认是自动提交的

可以通过set autocommit=0 来设置 禁止自动提交

可以通过set autocommit=1 来设置 开启自动提交

 

四、PHP打印 日期

 

<?php
echo date('Y-m-d H:i:s', strtotime('-1day')); //前一天
echo '<br>';
echo date('Y-m-d H:i:s', strtotime('-1week'));//前一周
echo '<br>';
echo date('Y-m-d H:i:s');//现在时间
echo '<br>';
echo date('Y-m-d H:i:s', strtotime('next Monday'));//下一个星期一
echo '<br>';
echo date('Y-m-d H:i:s', strtotime('last Monday'));//上一个星期一

echo “现在的时间是:” .date(h:i:sa);  //a - 小写的上午和午后(am pm

?>

/*  时间差  */

<?php
$startdate = strtotime("2012-01-01");
$enddate = strtotime("2012-02-14");
$days = round(($enddate-$startdate) / 86400)+1;
echo $days;
?>

 

五、echo(),print(),print_r()的区别

echo
可以一次输出多个值,多个值之间用逗号分隔。echo是语言结构(language construct),而并不是真正的函数,因此不能作为表达式的一部分使用。

print()
函数print()打印一个值(它的参数),如果字符串成功显示则返回true,否则返回false

printf()
printf()源于C语言中的printf()。该函数输出格式化的字符串。

print_r()var_dump()
print_r()可以把字符串和数字简单地打印出来,而数组则以括起来的键和值得列表形式显示,并以Array开头

 

六、如何 实现网站静态化

 

方法一:使用现成的插件,比如:ISAPI_RewriteIIS RewriteApache
HTTP服务器的mod_rewrite等,它们都是基于正则表达式解析器开发的重写引擎。它们的使用方法查看它们自带的帮助即可。

方法二:自己写的代码实现动态网页静态化,方法也有好几种:

1、创建FSO对象,利用此对象将所需的内容动态创建到文件中生成HTML页面;
2、利用模板技术,将模板中特殊代码的值替换为从表单或是数据库字段中接受过来的值 生成HTML文件;
3、使用Server.Transfer转换技术,


方法三:使用HttpWebRequest请求客户端的方式,获取返回资源,生成静态页面。一般这样只需要获取网页内容即可,其它资源可放置在服务器上,自动加载。(注:此方法缺点明显,需要大量更改匹配URL,建议慎用)

方法四:在asp中有IhttpModule接口。Ihttpmodule可以简单理解为一个可以在执行像.aspx,或者mvccontrol/action前,添加我们自定义的操作的东西。

 

七、大流量的网站如何解决访问量的问题

 

分类:服务器负载

确认服务器硬件是否足够支持当前的流量。

优化数据库访问。

禁止外部的盗链

控制大文件的下载

使用不同主机分流主要流量

使用流量分析统计软件。

 

八、PHP获取客户端和服务器IP

客户端 $_SERVER[REMOTE_ADDR]
服务器 $_SERVER[SERVER_ADDR]

 

九、includerequire的区别

includerequire都能把另外一个文件包含到当前文件中

include引入文件的时候,如果碰到错误,会给出提示,并继续运行下边的代码。

require引入文件的时候,如果碰到错误,会给出提示,并停止运行下边的代码。

 

十、如何修改session的生存时间

一:在php.ini 中设置session.gc_maxlifetime = 1440 //默认时间

二:代码实现
$lifeTime = 24 * 3600;  // 保存一天
session_set_cookie_params($lifeTime);
session_start();

 

十一、php根据URL获得网页内容

$html = file_get_contents('http://www.baidu.com/');  

 

十二、在HTTP 1.0中,状态码的含义

100 发出请求

101 切换协议

200 交易成功

201 已 创建

202 已 接受

203 非权威性信息

204 无内存

205 重置内容

206 部分内容

207 多状态

301 永久移除

302 临时移除

400 错误请求

401访问被拒绝

403禁止访问

404 没有发现文件

500 内部服务器错误

501 页眉值指定了未实现的配置

502 无效响应

503 服务器不可用

504 网关超时

505 服务器不支持

 

十三、冒泡排序

 

 

十四、PHP版本差别

 

PHP5.2 以前:autoload, PDO 和 MySQLi, 类型约束  、JSON 支持
PHP5.3:弃用的功能,匿名函数,新增魔术方法,命名空间,后期静态绑定Heredoc 和 Nowdoc, const, 三元运算符,Phar
PHP5.4:Short Open Tag, 数组简写形式,Traits, 内置 Web 服务器,细节修改
PHP5.5:yield, list() 用于 foreach, 细节修改
PHP5.6: 常量增强,可变函数参数,命名空间增强

 

十五、ob系列函数

1ob_start() //打开缓冲区,所有输出的信息不直接发送到浏览器,而是保存在缓冲区里面

2ob_clean() //删除内部缓冲区的内容,不关闭缓冲区(不输出)

3ob_end_clean() //删除内部缓冲区的内容,关闭缓冲区(不输出)

4ob_get_clean() //返回内部缓冲区的内容,关闭缓冲区。【相当于执行ob_get_contents() and ob_end_clean()

5ob_flush() //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,不关闭缓冲区。

6ob_end_flush() //发送内部缓冲区的内容到浏览器,删除缓冲区的内容,关闭缓冲区

7ob_get_flush() //返回内部缓冲区的内容,并关闭缓冲区的内容

8ob_get_contents()//返回缓冲区的内容,不输出

9ob_get_length() //返回内部缓冲区的长度,如果缓冲区未被激活,该函数返回false

 

十六、验证email

/^([0-9A-Za-z\\-_\\.]+)@([0-9a-z]+\\.[a-z]{2,3}(\\.[a-z]{2})?)$/i

^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$

十七、redis 与 memcache

1.Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别

memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小

redis有部份存在硬盘上,这样能保证数据的持久性。

灾难恢复--memcache挂掉后,数据不可恢复; redis数据丢失后可以通过aof恢复

2.Redis不仅仅支持简单的k/v类型的数据,同时还提供listsethash等数据结构的存储。
3.Redis支持数据的备份,即master-slave模式的数据备份。
4.Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以再次加载进行使用。

 

十八、PHP 全局变量- 超全局变量

$GLOBALS

$_SERVER

$_REQUEST

$_POST

$_GET

$_FILES

$_ENV

$_COOKIE

$_SESSION

 

十九、魔术方法

1__construct()
实例化对象时被调用,当__construct和以类名为函数名的函数同时存在时,__construct将被调用,另一个不被调用。

2__destruct()

当删除一个对象或对象操作终止时被调用。

3__call()
对象调用某个方法,若方法存在,则直接调用;若不存在,则会去调用__call函数。

4__get()
读取一个对象的属性时,若属性存在,则直接返回属性值;若不存在,则会调用__get函数。

5__set()
设置一个对象的属性时,若属性存在,则直接赋值;若不存在,则会调用__set函数。

6__toString()

打印一个对象的时被调用。如echo $obj;print $obj;

7__clone()

克隆对象时被调用。如:$t=new Test();$t1=clone $t;

8__sleep()

serialize之前被调用。若对象比较大,想删减一点东东再序列化,可考虑一下此函数。

9__wakeup()

unserialize时被调用,做些对象的初始化工作。

10__isset()
检测一个对象的属性是否存在时被调用。如:isset($c->name)

11__unset()
unset一个对象的属性时被调用。如:unset($c->name)

12__set_state()
调用var_export时,被调用。用__set_state的返回值做为var_export的返回值。

13__autoload()
实例化一个对象时,如果对应的类不存在,则该方法被调用。

魔术常量:

1__LINE__
返回文件中的当前行号。

2__FILE__
返回文件的完整路径和文件名。如果用在包含文件中,则返回包含文件名。自 PHP 4.0.2 起,__FILE__总是包含一个绝对路径,而在此之前的版本有时会包含一个相对路径。

3__FUNCTION__
返回函数名称(PHP 4.3.0新加)。自 PHP 5起本常量返回该函数被定义时的名字(区分大小写)。在 PHP 4中该值总是小写字母的。

4__CLASS__
返回类的名称(PHP 4.3.0新加)。自 PHP 5起本常量返回该类被定义时的名字(区分大小写)。在 PHP 4中该值总是小写字母的。

5__METHOD__
返回类的方法名(PHP 5.0.0新加)。返回该方法被定义时的名字(区分大小写)。

 

十、JQuery

$.ajax({

   type: "POST",

   url: "some.php",

   data: "name=John&location=Boston",

   success: function(msg){

     alert( "Data Saved: " + msg );

   }

});

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值