简单的php面试题,PHP经典面试题汇总(二)

十一·如何进行防止SQL注入?

1·表单尽量用post提交,核心用户验证都用post,表单判断使用get,因为get比post快

2·使用$_SERVER[HTTP_REFERER]判断提交表单的源头是否是本机域名$path = $_SERVER['HTTP_REFERER'];

$arr = parse_url($path);

$arr2= $arr['host'];

echo "

";

print_r($arr2);

3·php.ini开启addslashes,防止用户输入信息有单引号或者双引号对sql语句带来的破坏性,开启之后会在单双引号之前加反斜杠\’\”

4·密码需要设置md5或Sha1加密

5·服务器本身的安全(web + mysql)

十二·防止盗链?

1·服务器上防止盗链:

Apache 和Nginx做rewrite基于源来做判断阻止盗链

Apache设置防盗链方法:(.htaccess文件)RewriteEngine on

RewriteCond %{HTTP_REFERER} !^$ [NC]

RewriteCond %{HTTP_REFERER} !linuxidc.cn [NC]

RewriteCond %{HTTP_REFERER} !google.com [NC]

RewriteCond %{HTTP_REFERER} !baidu.com [NC]

RewriteRule .(jpg|gif|png|bmp|swf|jpeg) /image/replace.gif [R,NC,L]

RewriteRule ^(.*)$ http://image.linuxidc.cn/image/$1 [L]

不是以上网站访问来源就直接转向:RewriteRule .(jpg|gif|png|bmp|swf|jpeg) /image/replace.gif [R,NC,L]

Nginx设置防盗链方法:(/usr/local/nginx/conf/nginx.conf文件)location ~ .*\.(jpg|gif|png|bmp|swf|jpeg)$

{

expires 30d;

valid_referers none blocked *.linuxidc.cn *.google.com *.baidu.com;

if ($invalid_referer) {

rewrite ^/ ;

return 404;

}

}

2·代码防止盗链:

$_SERVER[‘HTTP_REFERER’]

十三·用php写出一个安全的用户登录系统需要注意哪些方面?

1·验证码

2·U盾

3·动态口令卡

4·限制登录次数

5·使用数字键盘

6·密码不能粘贴

7·网址使用ssl,服务器证书https

8·注册验证必须要使用php验证

9·以post提交给后端php程序

十四·使用过哪些php框架,试着描述其优劣点?

Thinkphp:

ThinkPHP(FCS)是一个轻量级的中型框架,是从Java的Struts结构移植过来的中文PHP开发框架。它使用面向对象的开发结构和MVC模式,并且模拟实现了Struts的标签库,各方面都比较人性化,熟悉J2EE的开发人员相对比较容易上手,适合php框架初学者。 ThinkPHP的宗旨是简化开发、提高效率、易于扩展,其在对数据库的支持方面已经包括MySQL、MSSQL、Sqlite、PgSQL、 Oracle,以及PDO的支持。ThinkPHP有着丰富的文档和示例,框架的兼容性较强,但是其功能有限,因此更适合用于中小项目的开发。

优点:

1.易于上手,有丰富的中文文档;

2.框架的兼容性较强,PHP4和PHP5完全兼容、完全支持UTF8等。

3. 适合用于中小项目的开发

缺点

1.对Ajax的支持不是很好;

2.目录结构混乱,需要花时间整理;

3.上手容易,但是深入学习较难。

Yii:

Yii 是一个基于组件的高性能php框架,用于开发大型Web应用。Yii采用严格的OOP编写,并有着完善的库引用以及全面的教程。从 MVC,DAO/ActiveRecord,widgets,caching,等级式RBAC,Web服务,到主题化,I18N和L10N,Yii提供了 今日Web 2.0应用开发所需要的几乎一切功能。事实上,Yii是最有效率的PHP框架之一。

优点

1·纯OOP

2·用于大规模Web应用

3·模型使用方便

4·开发速度快,运行速度也快。性能优异且功能丰富

5·使用命令行工具。

缺点:

1·对Model层的指导和考虑较少

2·文档实例较少

3·英文太多

4·要求PHP技术精通,OOP编程要熟练!

5·View并不是理想view,理想中的view可能只是html代码,不会涉及PHP代码。

Lavarel:

优点

Laravel 的设计思想是很先进的,非常适合应用各种开发模式TDD, DDD 和BDD,作为一个框

架,它准备好了一切,composer 是个php 的未来,没有composer,PHP 肯定要走向没落。

laravel 最大的特点和优秀之处就是集合了php 比较新的特性,以及各种各样的设计模式,

Ioc 容器,依赖注入等。

缺点

基于组件式的框架,所以比较臃肿

CodeIgniter:

优点:

推崇“简单就是美”这一原则。没有花哨的设计模式、没有华丽的对象结构,一切都是那么简单。几行代码就能开始运行,再加几行代码就可以进行输出。可谓是“大道至简”的典范。 配置简单,全部的配置使用PHP脚本来配置,执行效率高;具有基本的路由功能,能够进行一定程度的路 由;具有初步的Layout功能,能够制作一定程度的界面外观;数据库层封装的不错,具有基本的MVC功能. 快速简洁,代码不多,执行性能高,框架简单,容易上手,学习成本低,文档详细;自带了很多简单好用的library,框架适合小型应用.

缺点:

本身的实现不太理想。内部结构过于混乱,虽然简单易用,但缺乏扩展能力。 把Model层简单的理解为数据库操作. 框架略显简单,只能够满足小型应用,略微不太能够满足中型应用需要.

评价:

总体来说,拿CodeIgniter来完成简单快速的应用还是值得,同时能够构造一定程度的layout,便于模板的复用,数据操作层来说封装的不 错,并且CodeIgniter没有使用很多太复杂的设计模式,执行性能和代码可读性上都不错。至于附加的library 也还不错,简洁高效。

十五·用过哪些版本控制工具?

svn subversion 版本控制

github 版本控制

十六·进制转换?

对照表:

1 1 1 1 1 1 1 1(二进制)

128 64 32 16 8 4 2 1(十进制)

例如:

(二进制转换为十进制) 101010111 = 1×2^8 + 1×2^6 + 1×2^4 + 1×2^2 + 1×2^1 + 1×2^0 = 256+64+16+4+2+1 = 343

(十六进制转换为十进制) 3A5B=3×16^3 + Ax16^2 + 5×16^1 + Bx16^0 = 3×4096 + 10×256 + 80 + 11×1 = 12288+2560+80+11=14939

(十六进制转换为二进制) 41=0100 0001

16进制的1位数代表2进制的4位数

(二进制转换为十六进制) 11010110 = B6

四个数为一组(1101)= 1×2^3 + 1×2^2 + 1×2^0 = 13=B,(0110)= 1×2^2 + 1×2^1 = B6

(十进制转换为二进制) 13=1101

余数=被除数-除数*商

13/2(商6 余数1),

6/2(商3 余数0),

3/2(商1 余数1),

1/2(商0 余数1)

规律:不断除以2,保留余数,商为0时不再除以2,将所有余数倒序排列。

(十进制转换为十六进制) 138=8A

138/16(商8 余数10 A),

8/16(商0 余数8)

规律:不断除以16,保留余数,商为0时不再除以16,将所有余数倒序排列。$int = 1+2+"23+4" = 26;

ascii码转换:

chr(65) == A;

ord(A) == 65;

$a = array(1=>5,5=>8,22,2=>'8',81);

$a[7]  == 81  //前一个最大下标加2

$a[6]  == 81 //前一个最大下标加1

$a[3] 不存在,空

$a[bar] = 'hello';

$a[bar] 和 $a['bar'] 结果一样hello;

位运算:echo 1>>0; // 001 ==>1

echo 2>>1; // 010 ==> 001 => 1 二进制向右移动1位,结果转十进制

echo 3<<2; // 011 ==> 01100 => 1x2^3+1x2^2=12 二进制向左移动2位,结果转十进制

echo 可以打印多个参数,print不可以

十七·下面能正确输出yellow的结果有哪些:$fruits = array('apple' =>'red','banana' =>'yellow');

echo "A banana is {$fruits[banana]}";

echo "A banana is {$fruits['banana']}";

echo "A banana is $fruits[banana]";

heredoc:

$str=<<

this is string

str;

echo $str;

以上等同于$str=”this is string”;

十八·什么是面向对象,主要特征是什么?

也就是我们常说的OOP,以对象为中心的程序设计思维或者方式,好处是有两个成员组成,成员属性和成员方法,提高代码重用性,避免代码冗余度

三大特征:封装,继承,多态

十九·session和cookie的区别是什么,请从协议,产生的原因与作用说明?

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

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

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

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

将登陆信息等重要信息存放为SESSION, 其他信息如果需要保留,可以放在COOKIE中

二十·HTTP状态中的200,302,304,403,404,500代码含义?

200:成功访问,并返回数据

302:重定向

304:缓存未过期

403:服务器拒绝访问,Apache权限拒绝访问

404:访问的页面不存在

500:服务器内部错误

linux压缩:tar czf text.tar.gz test.php

linux解压:tar xzf test.tar.gz

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值