第一篇php常见笔试题

1.表单中get与post提交方法的区别?

答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息.

2.session与cookie的区别?

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

②cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗

考虑到安全应当使用session

③session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能

考虑到减轻服务器性能方面,应当使用COOKIE

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

3.数据库中的事务是什么?

答:事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作 完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。

4.用PHP打印出前一天的时间格式是2006-5-10 22:21:21(2分)

//strtotime成功则返回时间戳,否则返回FALSE

echo date("Y-m-d H:i:s",strtotime("now")), "\n";

echo date("Y-m-d H:i:s",strtotime("10 September 2000")), "\n";

echo date("Y-m-d H:i:s",strtotime("+1 day")), "\n";

echo date("Y-m-d H:i:s",strtotime("+1 week")), "\n";

echo date("Y-m-d H:i:s",strtotime("+1 week 2 days 4 hours 2 seconds")), "\n";

echo date("Y-m-d H:i:s",strtotime("next Thursday")), "\n";

echo date("Y-m-d H:i:s",strtotime("last Monday")), "\n";

echo date("Y-m-d H:i:s",strtotime("-1 day")), "\n";

2016-09-21 21:42:40

2000-09-10 00:00:00

2016-09-22 21:42:40

2016-09-28 21:42:40

2016-10-01 01:42:42

2016-09-22 00:00:00

2016-09-19 00:00:00

2016-09-20 21:42:40

5.能够使HTML和PHP分离开使用的模板(1分)

答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate

6.使用哪些工具进行版本控制?

Git、svn、vss、cvs

7.反转字符串,如何实现字符串翻转?(3分) revease  strrev

strrev("hello world!")

8.优化MYSQL数据库的方法。

①、选取最适用的字段属性,尽可能减少定义字段长度,尽量把字段设置NOT NULL,例如’省份,性别’,最好设置为ENUM

②、使用连接(JOIN)来代替子查询:

a.删除没有任何订单客户:DELETE FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)

b.提取所有没有订单客户:SELECT FROM customerinfo WHERE customerid NOT in(SELECT customerid FROM orderinfo)

c.提高b的速度优化:

SELECT FROM customerinfo LEFT JOIN orderid customerinfo.customerid=orderinfo.customerid

WHERE orderinfo.customerid IS NULL

③、使用联合(UNION)来代替手动创建的临时表

a.创建临时表:SELECT name FROM `nametest` UNION SELECT username FROM `nametest2`

④、事务处理:

a.保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败

mysql_query(“BEGIN”);

mysql_query(“INSERT INTO customerinfo (name) 8i VALUES (‘$name1′)”;

mysql_query(“SELECT * FROM `orderinfo` where customerid=”.$id”);

mysql_query(“COMMIT”);

⑤、锁定表,优化事务处理:

a.我们用一个SELECT语句取出初始数据,通过一些计算,用UPDATE语句将新值更新到表中。

包含有WRITE(write)关键字的LOCK TABLE语句可以保证在UNLOCK TABLES命令被执行之前,

不会有其它的访问来对inventory进行插入、更新或者删除的操作

mysql_query(“LOCK TABLE customerinfo READ, orderinfo WRITE”);

mysql_query(“SELECT customerid FROM `customerinfo` where id=”.$id);

mysql_query(“UPDATE `orderinfo` SET ordertitle=’$title’where customerid=”.$id);

mysql_query(“UNLOCK TABLES”);

⑥、使用外键,优化锁定表

a.把customerinfo里的customerid映射到orderinfo里的customerid,

任何一条没有合法的customerid的记录不会写到orderinfo里

CREATE TABLE customerinfo

(

customerid INT NOT NULL,

PRIMARY KEY(customerid)

)TYPE = INNODB;

CREATE TABLE orderinfo

(

orderid INT NOT NULL,

customerid INT NOT NULL,

PRIMARY KEY(customerid,orderid),

FOREIGN KEY (customerid) REFERENCES customerinfo

(customerid) ON DELETE CASCADE

)TYPE = INNODB;

注意:’ON DELETE CASCADE’,该参数保证当customerinfo表中的一条记录删除的话同时也会删除order

表中的该用户的所有记录,注意使用外键要定义事务安全类型为INNODB;

⑦、建立索引:

a.格式:

(普通索引)->

创建:CREATE INDEX ON tablename (索引字段)

修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段)

创表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段))

(唯一索引)->

创建:CREATE UNIQUE ON tablename (索引字段)

修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段)

创表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段))

(主键)->

它是唯一索引,一般在创建表是建立,格式为:

CREATA TABLE tablename ([...],PRIMARY KEY[索引字段])

⑧、优化查询语句

a.最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作

例子1:

SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢)

SELECT * FROM order WHERE orderDate<"2008-01-01";(快)

例子2:

SELECT * FROM order WHERE addtime/7<24;(慢)

SELECT * FROM order WHERE addtime<24*7;(快)

例子3:

SELECT * FROM order WHERE title like "%good%";

SELECT * FROM order WHERE title>=”good”and name<"good";

9.对于大流量的网站,您采用什么样的方法来解决访问量问题?(4分)

答:确认服务器硬件是否足够支持当前的流量,数据库读写分离,优化数据表,程序功能规则,禁止外部的盗链,控制大文件的下载,使用不同主机分流主要流量。

10.用PHP写出显示客户端IP与服务器IP的代码

echo "客户端::".getenv('REMOTE_ADDR')." or ".$_SERVER['REMOTE_ADDR'];

echo "服务端::".gethostbyname("www.baidu.com");

11.如何用最简单的方法打印$str =“abcde”每个字母;可以用substr()

答:for($i=0;$i

Echo substr($str,$i,1);//或$string{$i}或$string[$i]

}

备注:都是向前的,第三个参数若为空则说明第二个参数指定下标后剩余的都要完

echosubstr('abcdef',1);// bcdef

echosubstr('abcdef',1,3);// bcd

echosubstr('abcdef',0,4);// abcd

echosubstr('abcdef',0,8);// abcdef

echosubstr('abcdef', -1,1);// f

// Accessing single characters in a string

// can also be achived using "curly braces"

$string='abcdef';

echo$string{0};// a

echo$string{3};// d

echo$string{strlen($string)-1};// f

$rest=substr("abcdef", -1);// returns "f"

$rest=substr("abcdef", -2);// returns "ef"

$rest=substr("abcdef", -3,1);// returns "d"

12.语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们? (2分)

Require是无条件包含、无返回值(快的原因?),无论条件成立与否都会先执行require,但若其文件不存在或有语法错误则会报出fatal error致命性错误。

Include是有条件包含、有返回值,若文件不存在或语法错误会给出warning警告,但脚本仍继续执行

13.如何修改SESSION的生存时间(1分).

答:方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache

14.如何修改SESSION的生存时间?

方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache

方法2:$savePath =“./session_save_dir/”;

$lifeTime =小时*秒;

session_save_path($savePath);

session_set_cookie_params($lifeTime);

session_start();

方法3:setcookie() and session_set_cookie_params($lifeTime);

15.有一个网页地址,比如PHP开发资源网主页:http://www.phpres.com/index.html,如何得到它的内容?

$readcontents = fopen("http://www.phpres.com/index.html", "rb");

$contents = stream_get_contents($readcontents);

fclose($readcontents);

echo $contents;

16.在HTTP 1.0中,状态码401的含义是(?);如果返回“找不到文件”的提示,则可用header函数,其语句为(?);(2分)

答:状态401代表未被授权,header(“Location:www.xxx.php”);

17.在PHP中error_reporting这个函数有什么作用? (1分)

设置错误级别与错误信息回报

18.PECL和PEAR是什么?

PEAR: PHP Extension and Application Repository(PHP扩展和应用仓库)补充的是上层功能

将PHP程序开发过程中常用的功能编写成类库,涵盖了页面呈现、数据库访问、文件操作、数据结构、缓存操作、网络协议、WebService等许多方面,用户可以通过下载这些类库并适当的作一些定制以实现自己需要的功能

PECL: PHP Extension Community Language(PHP扩展库)补充的是底层功能

PECL可以看作PEAR的一个组成部分,提供了与PEAR类似的功能。不同的是PEAR的所有扩展都是用纯粹的PHP代码编写的,用户在下载到PEAR扩展以后可以直接使用将扩展的代码包含到自己的PHP文件中使用。而PECL是使用C语言开发的,通常用于补充一些用PHP难以完成的底层功能,往往需要重新编译或者在配置文件中设置后才能在用户自己的代码中使用

19.简述如何得到当前执行脚本路径,包括所得到参数。(2分)

答:$script_name = basename(__file__); print_r($script_name);

20.foo()和@foo()之间有什么区别?(1分)

答:@foo()控制错误输出

21.mysql_fetch_row()和mysql_fetch_array之间有什么区别? (1分)

mysql_fetch_row是从结果集取出1行数组,作为枚举

mysql_fetch_array是从结果集取出一行数组作为关联数组,或数字数组,两者兼得

22.写出发贴数最多的十个人名字的SQL,利用下表:members(id,username,posts,pass,email)

DESC是descend降序意思asc是ascend升序。

答:SELECT * FROM `members` ORDER BY posts DESC limit 0,10;

注:MySQL数据库limit分页、排序-SQL语句示例

select * from persons limit  A,  B;

解释:A,查询起点 ,若为limit B则默认A为0

B,你需要的行数

23.请说明php中传值与传引用的区别。什么时候传值什么时候传引用?

24.请说明php中传值与传引用的区别。什么时候传值什么时候传引用?(2分)

答:按值传递:函数范围内对值的任何改变在函数外部都会被忽略

按引用传递:函数范围内对值的任何改变在函数外部也能反映出这些修改

优缺点:按值传递时,php必须复制值。特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。

按引用传递则不需要复制值,对于性能提高很有好处。

25.在PHP中error_reporting这个函数有什么作用?

设置错误级别与错误信息回报

26.请写一个函数验证电子邮件的格式是否正确(2分)

dy@sina.com

8047@qq.com

yahu@.com.cn

dy@163.com

dy_35

答: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);

}

27.

28、如何使用下面的类,并解释下面什么意思?(3)

class test{

function Get_test($num){

$num=md5(md5($num)."En");

return $num;

}

}

答:$testnum = "123";

$object = new test();

$encrypt = $object->Get_test($testnum);

echo $encrypt;

类test里面包含Get_test方法,实例化类调用方法多字符串加密

29、写出SQL语句的格式:插入 ,更新 ,删除(4分)

表名User

Name Tel Content Date

张三13333663366大专毕业2006-10-11

张三13612312331本科毕业2006-10-15

张四021-55665566中专毕业2006-10-15

(a)有一新记录(小王13254748547高中毕业2007-05-06)请用SQL语句新增至表中

mysql_query("INSERT INTO `user` (name,tel,content,date) VALUES

('小王','13254748547','高中毕业','2007-05-06')")

(b)请用sql语句把张三的时间更新成为当前系统时间

$nowDate = date("Ymd");

mysql_query("UPDATE `user` SET date='".$nowDate."' WHERE name='张山'");

(c)请写出删除名为张四的全部记录

mysql_query("DELETE FROM `user` WHERE name='张四'");

30、请写出数据类型(int char varchar datetime text)的意思;请问varchar和char有什么区别(2分)

答:int是数字类型,char固定长度字符串,varchar实际长度字符串,datetime日期时间型,text文本字符串

char的场地固定为创建表设置的长度,varchar为可变长度的字符

31、写出以下程序的输出结果(1分)

$b=201;

$c=40;

$a=$b>$c?4:5;

echo $a;

?>

答:4

32.不使用第三个变量交换两个变量的值:?

33.GD库是做什么用的? (1分)

答:gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。

在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。

34.下面哪个选项没有将john添加到users数组中? (1分)

(a) $users[] = 'john’;

(b) array_add($users,’john’);

(c) array_push($users,'john’);

(d) $users ||= 'john’; [ a , c ]

注:array_push()将array当成一个栈,并将传入的变量压入array的末尾。array的长度将根据入栈变量的数目增加。

35.写一个函数,尽可能高效的,从一个标准url里取出文件的扩展名

例如: http://www.sina.com.cn/abc/de/fg.php?id=1需要取出php或.php

36.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 198,082评论 5 464
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,231评论 2 375
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 145,047评论 0 327
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,977评论 1 268
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,893评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,976评论 3 388
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,605评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,888评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,906评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,732评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,513评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,980评论 3 301
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,132评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,447评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,027评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,232评论 2 339

推荐阅读更多精彩内容