-
Notifications
You must be signed in to change notification settings - Fork 5
/
php面试.txt
2643 lines (2643 loc) · 102 KB
/
php面试.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
- 1 -
1. 什么事面向对象?主要特征是什么?
面向对象是程序的一种设计方式,它利于提高
程序的重用性,使程序结构更加清晰。主要特征:
封装、继承、多态。
2. SESSION 与 COOKIE 的区别是什么,请从协
议,产生的原因与作用说明?
1、http 无状态协议,不能区分用户是否是从
同一个网站上来的,同一个用户请求不同的页面不
能看做是同一个用户。
2、SESSION 存储在服务器端,COOKIE 保存
在客户端。Session 比较安全,cookie 用某些手段可
以修改,不安全。Session 依赖于 cookie 进行传递。
禁用 cookie 后,session 不能正常使用。Session 的
缺点:保存在服务器端,每次读取都从服务器进行
读取,对服务器有资源消耗。Session 保存在服务器
端的文件或数据库中,默认保存在文件中,文件路
径由 php 配置文件的 session.save_path 指定。Session 文件是公有的。
3. HTTP 状态中 302、403、 500 代码含义?
一二三四五原则: 一. 消息系列 二 成功系列
三. 重定向系列 四. 请求错误系列 五. 服
务器端错误系列
302:临时转移成功,请求的内容已转移到新位
置 403:禁止访问 500:服务器内部错误 401 代表未
授权。
4. Linux 下建立压缩包,解压缩包的命令
Tar.gz: 打包: tar czf file.tar.gz file.txt
解压: tar xzf file.tar.gz Bz2: 打包: bzip2 [-k] 文件
解压: bunzip2 [-k] 文件
Gzip(只对文件,不保留原文件)
打包: gzip file1.txt
解压: gunzip file1.txt.gz Zip: -r 对目录
打包: zip file1.zip file1.txt
解压: unzip file1.zip
5. 请写出数据类型(int char varchar datetime text)
的意思;请问 varchar 和 char 有什么区别?
Int 整数 char 定长字符 Varchar 变长字符
Datetime 日期时间型 Text 文本型 Varchar 与
char 的区别 char 是固定长度的字符类型,分配多
少空间,就占用多长空间。 Varchar 是可变长度的
字符类型,内容有多大就占用多大的空间,能有效
节省空间。 由于 varchar 类型是可变的,所以在数
据长度改变的时,服务器要进行额外的操作,所以
效率比 char 类型低。
6. MyISAM 和 InnoDB 的基本区别?索引结构
如何实现?
MyISAM 类型不支持事务,表锁,易产生碎
片,要经常优化,读写速度较快,而 InnoDB 类型
支持事务,行锁,有崩溃恢复能力。读写速度比
MyISAM 慢。
创建索引:alert table tablename add index (`字
段名`)
7. 不使用 cookie 向客户端发送一个 cookie. 理解:session_start()开启时,生成一个常
量 SID,当 COOKIE 开启时,这个常量为空,当
COOKIE 关闭时,这个常量中存储了 PHPSESSID
的值。通过在 URL 后加一个 SID 参数来传递
SESSIONID 的值,从而使客户端页面可以使用
SESSION 里面的值。 当客户端开启 COOKIE 和服
务器端开启 SESSION 时。 浏览器第一次请求,服
务器会向浏览器端发送一个 COOKIE 里面存储
SESSIONID. 当浏览器第二次请求时,会把已存在
8. isset() 和 empty() 区别
Isset 判断变量是否存在,可以传入多个变量,
若其中一个变量不存在则返回假,empty 判断变量
是否为空为假,只可传一个变量,如果为空为假则
返回真。
9. 如何在页面之间传递变量(至少两种方式) ?
GET,POST,COOKIE,SESSION,隐藏表单
1. 写出匹配 URL 的正则表达式. ‘/^(https?|ftps?):\/\/(www)\.([^\.\/]+)\.(com|cn|org)(\/[\ w-\.\/\?\%\&\=]*)?/i’ 2. 请写出常见的排序算法,并用 PHP 实现冒泡排
序,将数组$a = array()按照从小到大的方式进行排
序。
常见的排序算法: 冒泡排序法、快速排序法、简单
选择排序法、堆排序法、直接插入排序法、希尔排
序法、合并排序法。
冒泡排序法的基本思想是:对待排序记录关键字从
后往前(逆序)进行多遍扫描,当发现相邻两个关
键字的次序与排序要求的规则不符时,就将这两个
记录进行交换。这样,关键字较小的记录将逐渐从
后面向前面移动,就象气泡在水中向上浮一样,所
以该算法也称为气泡排序法。
// 冒泡排序法
Function mysort($arr){
For($i=0; $i<count($arr); $i++){
For($j=0; $j<count($arr)-1-$i; $j++){
If($arr[$j] > $arr[$j+1]){
$tmp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$tmp;
}
}
}
Return $arr;
}
$arr=array(3,2,1);
print_r(mysort($arr));
3. 请说明 PHP 中传值与传引用的区别。什么时候
传值什么时候传引用?
按值传递:函数范围内对值的任何改变在函数
外部都会被忽略
按引用传递:函数范围内对值的任何改变在函
数外部也能反映出这些修改
优缺点:按值传递时,php 必须复制值。特别
是对于大型的字符串和对象来说,这将会是一个代
价很大的操作。按引用传递则不需要复制值,对于
性能提高很有好处。
在 PHP 中 error_reporting 这个函数有什么作用?
设置 PHP 的报错级别并返回当前级别。
请用正则表达式(Regular Expression)写一个函
数验证电子邮件的格式是否正确。
if(isset($_POST['action']) && $_POST['action']==’
submitted’){
$email=$_POST['email'];
if(!preg_match“( /^[0-9a-zA-Z-]+@[0-9a-zA-Z-]
+(\.[0-9a-zA-Z-]+){1,3}$/”,$email)){
echo “电子邮件检测失败”;
}else{
echo “电子邮件检测成功”;
}
}
- 2 -
使用 PHP 描述快速排序算法,对象可以是一个数
组?
原理:快速排序使用分治策略来把待排序数据序列
分为两个子序列,具体步骤为:
(1)从数列中挑出一个元素,称该元素为“基准”。
(2)扫描一遍数列,将所有比“基准”小的元素
排在基准前面,所有比“基准”大的元素排在基准
后面。
(3)通过递归,将各子序列划分为更小的序列,
直到把小于基准值元素的子数列和大于基准值元
素的子数列排序。
//快速排序(数组排序)
function QuickSort($arr){
$num = count($arr);
$l=$r=0;
for($i=1;$i<$num;$i++){
if($arr[$i] < $arr[0]){
$left[] = $arr[$i];
$l++;
}else{
$right[] = $arr[$i];
$r++;
}
}
if($l > 1){
$left = QuickSort($left);
}
$new_arr = $left;
$new_arr[] = $arr[0];
if($r > 1){
$right = QuickSort($right);
}
for($i=0;$i<$r;$i++){
$new_arr[] = $right[$i];
}
return $new_arr;
}
使用 PHP 描述顺序查找和二分查找(也叫做折半
查找)算法,顺序查找必须考虑效率,对象可以是
一个有序数组
//二分查找(数组里查找某个元素)
function bin_sch($array, $low, $high, $k){
if ($low <= $high){
$mid = intval(($low+$high)/2);
if ($array[$mid] == $k){
return $mid;
}elseif ($k < $array[$mid]){
return bin_sch($array, $low, $mid-1, $k);
}else{
return bin_sch($array, $mid+1, $high, $k);
}
}
return -1;
}
//顺序查找(数组里查找某个元素)
function seq_sch($array, $n, $k){
$array[$n] = $k;
for($i=0; $i<$n; $i++){
if($array[$i]==$k){
break;
}
}
if ($i<$n){
return $i;
}else{
return -1;
}
}
写一个二维数组排序算法函数,能够具有通用性,
可以调用 php 内置函数(array_multisort())
//二维数组排序, $arr 是数据,$keys 是排序的健
值,$order 是排序规则,1是升序,0是降序
function array_sort($arr, $keys, $order=0) {
if (!is_array($arr)) {
return false;
}
$keysvalue = array();
foreach($arr as $key => $val) {
$keysvalue[$key] = $val[$keys];
}
if($order == 0){
asort($keysvalue);
}else {
arsort($keysvalue);
}
reset($keysvalue);
foreach($keysvalue as $key => $vals) {
$keysort[$key] = $key;
}
$new_array = array();
foreach($keysort as $key => $val) {
$new_array[$key] = $arr[$val];
}
return $new_array;
}
请以空格作为间隔,拆分字符串’Apple Orange
Banana Strawberry’,组成数组$fruit,
* 数组中所有元素都用小写字母,并按照字母先后
次序排序
class sort {
private $str;
public function __construct($str) {
$this->str=strtolower($str);
}
private function explodes() {
if(empty($this->str)) return array();
$arr=explode(" ",$this->str);
return is_array($arr)?$arr:array($arr);
}
public function sort() {
$explode=$this->explodes();
sort($explode);
return $explode;
}
}
$str='Apple Orange Banana Strawberry';
$sortob=new sort($str);
var_dump($sortob->sort());
对于用户输入一串字符串$string,要求$string 中
只能包含大于0的数字和英文逗号,请用正则 表达
式验证,对于不符合要求的$string 返回出错信息
class regx {
public static function check($str) {
if(preg_match("/^([1-9,])+$/",$str)) {
return true;
}
return false;
}
}
$str="12345,6";
if(regx::check($str)) {
- 3 -
echo "suc";
} else {
echo "fail";
}
请写一段程序,在服务器创建一个文件 fruit.dat, 将试题3中得到的数组写入到改文件中,然后写一
段程序从文件中读取并还原数组@author
zhuwenqiong
class sort {
private $str;
public function __construct($str) {
$this->str=strtolower($str);
}
private function explodes(){
if(empty($this->str)) return array();
$arr=explode(" ",$this->str);
return is_array($arr)?$arr:array($arr);
}
public function sort() {
$explode=$this->explodes();
sort($explode);
return $explode;
}
}
class file {
private $sort=null;
private $filepath;
public function __construct($arrobj,$path) {
$this->sort=$arrobj;
$this->filepath=$path;
}
private function
getresource($filename,$mode) {
return
fopen($this->filepath.$filename,$mode);
}
private function closeresource($resource) {
fclose($resource);
}
public function savefile($filename) {
$arr=$this->sort->sort();
$fopen=$this->getresource($filename,"a+");
if(!$fopen){
echo "文件打开失败!";
exit;
}
var_dump($arr);
foreach($arr as $key=>$value) {
fwrite($fopen,$value."\n");
}
$this->closeresource($fopen);
}
public function readfile($filename) {
$this->savefile($filename);
$fopen=$this->getresource($filename,"r");
if(!$fopen){
echo "文件打开失败!";exit;
}
$arr=array();
while(!feof($fopen)) {
$get=fgets($fopen);
if(!empty($get))
$arr[]=str_replace("\n","",$get);
}
$this->closeresource($fopen);
return $arr;
}
}
$file=new file(new sort('Apple Orange Banana
Strawberry'),"E:\\");
$arr=$file->readfile("fruit.dat");
var_dump($arr);
单例模式,创建 mysqli 数据库链接的单例对象
class Db {
private static $instance;
public $handle;
Private function
__construct($host,$username,$password,$dbna
me) {
$this->handle=NULL;
$this->getcon($host,$username,$password, $dbname);
}
public static function getBb() {
self::$instance=new Db();
return self::$instance;
}
private function
getcon($host,$username,$password,$dbname) {
if($this->handle!=NULL){
return true;
}
$this->handle=mysqli_connect($host,$user
name,$password,$dbname);
}
}windows 平台, Apache Http Server 启动失败, 排错
思路是什么?
检查 apache 使用的80端口是否被占用,如果
被占用,先停止占用80端口的服务,然后启动
apache 服务器
PHP session 扩展默认将 session 数据储存在哪里?
D
A) SQLite Database B) MySQL Database C) Shared Memory
D) File System
E) Session Server 如果你想要自动加载类,下面哪种函数声明是正确
的 C
A) function autoload($class_name)
B) function __autoload($class_name, $file)
C) function __autoload($class_name)
D) function _autoload($class_name)
E) function autoload($class_name, $file)
PHP 程序使用 utf-8编码, 以下程序输出结果是什
么? B
<?php
$str = ’hello 你好世界’; echo strlen($str);
?>A) 9 B) 13(gbk) C) 18 D) 17(utf8)
你所知道的 php 数组相关的函数?
array()----创建数组
array_combine()----通过合并两个数组来创建一个
新数组
- 4 -
range()----创建并返回一个包含指定范围的元素的
数组
compact()----建立一个数组
array_chunk()----将一个数组分割成多个
array_merge()----把两个或多个数组合并成一个数
组
array_slice()----在数组中根据条件取出一段值
array_diff()----返回两个数组的差集数组
array_intersect()----计算数组的交集
array_search()----在数组中搜索给定的值
array_splice()----移除数组的一部分且替代它
array_key_exists()----判断某个数组中是否存在指定
的 key
shuffle()----把数组中的元素按随机顺序重新排列
array_flip()----交换数组中的键和值
array_reverse()----将原数组中的元素顺序翻转,创
建新的数组并返回
array_unique()----移除数组中重复的值
php 读取文件内容的几种方法和函数?
打开文件,然后读取。Fopen() fread()
打开读取一次完成 file_get_contents()
以下程序,变量 str 什么值的情况下输入111?
if( ! $str ) { echo 111; }
在$str 值为:0,’0′,false,null,”" 你所知道的 PHP 的一些技术(smarty 等)?
Smarty,jquery,ajax,memcache,div+css,js,mysqli,pdo,s vn,thinkphp,brophp,yii
你所熟悉的 PHP 论坛系统 有哪些?
Discuz 你所熟悉的 PHP 商城系统 有哪些?
Ecshop
你所熟悉的 PHP 开发框架 有哪些?
Brophp,thinkphp
说说你对缓存技术的了解?
1、缓存技术是将动态内容缓存到文件中,在一定
时间内访问动态页面直接调用缓存文件,而不必重
新访问数据库。
2、使用 memcache 可以做缓存。
你所知道的设计模式有哪些?
工厂模式、策略模式、单元素模式、观察者模式、
命令链模式
说说你对代码管理的了解? 常使用那些代码版本
控制软件?
通常一个项目是由一个团队去开发,每个人将自己
写好的代码提交到版本服务器,由项目负责人按照
版本进行管理,方便版本的控制,提高开发效率,
保证需要时可以回到旧版本。
常用的版本控制器:SVN
说说你对 SVN 的了解?优缺点?
SVN 是一种版本控制器,程序员开发的代码递交到
版本服务器进行集中管理。
SVN 的优点:代码进行集中管理,版本控制容易,
操作比较简单,权限控制方便。
缺点:不能随意修改服务器项目文件夹。
怎么找到 PHP.ini 的路径?
一般都在 php 的安装目录下,或者 window 系统的
windows 目录下。
PHP 加速模式/扩展? PHP 调试模式/工具?
Zend Optimizer 加速扩展
调试工具:xdebug
你常用到的 mysql 命令?
Show databases Show tables
Insert into 表名() values()
Update 表名 set 字段=值 where ... Delete from 表名 where ... Select * from 表名 where 条件 order by ... Desc/asc limit ... Group by ... Having ... 进入 mysql 管理命令行的命令?
Mysql -uroot -p 回车 密码
show databases; 这个命令的作用?
显示当前 mysql 服务器中有哪些数据库
show create database mysql; 这个命令的作用?
显示创建数据库的 sql 语句
show create table user; 这个命令的作用?
显示创建表的 sql 语句
desc user; 这个命令的作用?
查询 user 表的结构
explain select * from user; 这个命令的作用?
获取 select 相关信息
show processlist; 这个命令的作用?
显示哪些线程正在运行
SHOW VARIABLES; 这个命令的作用?
显示系统变量和值
SHOW VARIABLES like ’%conn%’; 这个命令的
作用?
显示系统变量名包含 conn 的值
LEFT JOIN 写一个 SQL 语句?
SELECT A.id,A.class FROM A LEFT JOIN B ON
A.cid=B.id
in, not ni, exist, not exist 的作用和区别?
in 在什么中
Not in 不在什么中
Exists 存在
Not exists 不存在
怎么找到数据库的配置文件路径?
在数据库安装目录下,my.ini
简述 Linux 下安装 PHP 的过程?
安装软件之前先安装编译工具 gcc、gcc-c++
拷贝源码包,解包解压缩
Cd /lamp/php 进入 php 目录
./configure –prefix=/usr/local/php
–with-config-file-path=/usr/local/php/etc 指定安装目
录和配置文件目录
Make 编译
Make install 安装
简述 Linux 下安装 Mysql 的过程?
Groupadd mysql 添加一个用户组 mysql
Useradd -g mysql mysql 添加一个 mysql 用户指定
分组为 mysql
Cd /lamp/mysql 进入 mysql 目录
- 5 -
./configure –prefix=/usr/local/mysql/ –with-extra-charsets=all
Make Make all
简述 Linux 下安装 apache 的过程?
Cd /lamp/httpd 进去 apache 软件目录
./configure –prefix=/usr/local/apache2/ –sysconfdir=/etc/httpd/ –with-included-apr Make Make all
HTML/CSS/DIV/Javascritp:
1. 设计一个页面(4个 div 第一个 div 宽960px 居
中;第2-4个 div 3等分960px;) <style>Body{ Text-align:center; Margin:0; Padding:0; }
#box{ Width:960px; Margin:0 auto; }
.small{ Width:320px; Float:left; } </style>
<div id=’box’>
<div class=’small’></div>
<div class=’small’></div>
<div class=’small’></div>
</div> 用 javascript 取得一个 input 的值?取得一个 input
的属性?
document.getElementById(‘name’).value;
document.getElementById(‘name’).type;
用 Jquery 取得一个 input 的值?取得一个 input 的
属性?
$(“input[name='aa']“).val();
$(“input[name='aa']“).attr(‘type’);
请您写一段 ajax 提交的 js 代码,或者写出 ajax 提
交的过程逻辑。
var xmlhttp;
if(window.XMLHttpRquest){ xmlhttp=new XMLHttpRequest();
}else if(window.ActiveXObject){ xmlhttp=new
ActiveXObject(‘Microsoft.XMLHTTP’);
}xmlhttp.open(‘GET’,’1.php?aa=name’,true); xmlhttp.onreadystatechange=function(){
if(xmlhttp.readyState==4){
if(xmlhttp.status==200){ var text=xmlhttp.responseText;
}
}
}xmlhttp.send(null);
简述 Cookie 的设置及获取过程
设置 COOKIE 的值:
Setcookie(名称,值,保存时间,有效域);
获取值:$_COOKIE['名称'];
面向对象中接口和抽象类的区别及应用场景?
1、有抽象方法的类叫做抽象类,抽象类中不一定
只有抽象方法,抽象方法必须使用 abstract 关键字
定义。
2、接口中全部是抽象方法,方法不用使用 abstract
定义。
3、当多个同类的类要设计一个上层,通常设计为
抽象类,当多个异构的类要设计一个上层,通常设
计为接口。
用面向对象来实现 A 对象继承 B 和 C 对象
Interface B{ ... }
Interface C{ ... }
Class A implements B,C{ ... }
写出 Smarty 模板引擎中你最常用的关键词
Assign Display Foreach
Section Loop Item
$smarty Now Const get
如下 user 表结构
名称 类型 说明
Uid Int unsigned 主键
Name Varchar(20)
Age Tinyint unsigned
需求:
l 增加一个字段性别 sex,写出修改语句
Alert table user add sex enum(’0′,’1′);
查询出年龄介于20岁到30岁之间的用户
Select * from user where age>20 and age<30
如果是一个 Web 频繁访问的查询,上题的查询如
何优化?
可对 where 后面的字段 age 建立索引,也可
对语句建立存储过程。
echo(),print(),print_r()的区别?
Echo,print 是 PHP 语句, print_r 是函数, Print()只能打印出简单类型变量的值(如
int,string),有返回值。
print_r()可以打印出复杂类型变量的值(如数组, 对象) echo 输出一个或者多个字符串,无返回值
什么是模板技术、能够使 HTML 和 PHP 分离开使
用的模板?
模板技术就是使程序的逻辑代码和界面分开的技
术。
能够使 HTML 和 PHP 分开的模板有:Smarty、
Template、PHPlib Template、FastTemplate 对于大流量的网站,您采用什么样的方法来解决访
问量问题?
优化程序,优化数据库,如果程序和数据库已经最
优化,使用以下解决方法:
1、确定当前服务器设备是否满足流量需求。
2、使用 Memcache 缓存技术,把动态内容缓存到
文件中,动态网页直接调用这些文件,而不必再访
问数据库。
3、禁止外部盗链,图片和文件外部盗链会给服务
器带来大量的负载压力,可以通过 refer 来禁止外部
盗链,或者使用 apache 来配置禁止盗链。
4、控制大文件的下载,大文件的下载对于非 SCSI
硬盘来说会占用大量的资源,导致服务器的响应能
力下降。
5、使用不同的主机分流主要流量,使服务器均衡
负载。
6、使用流量统计软件统计分析网站流量,可以知
道哪些地方耗费了大量的流量,哪些页面需要再进
行优化。
mysql_fetch_row() 和 mysql_fetch_array 之间有
什么区别?
Mysql_fetch_row()是从结果集中取出一行作为枚
举数组,mysql_fetch_array()是从结果集中取出一
行作为索引数组或关联数组或两种方式都有。
- 6 -
实现中文字串截取无乱码的方法
Mb_substr();
用 PHP 写出显示客户端 IP 与服务器 IP 的代码
获取客户端 IP:$_SERVER(“REMOTE_ADDR”);
获取服务器端 IP:$_SERVER["SERVER_ADDR"];
有一个网页地址, 比如 PHP 开发资源网主页: http://www.phpres.com/index.html,如何得到它
的内容?
获取网页内容:
$url=”http://www.phpres.com/index.html“;
$str=file_get_contents($url);
或 $ch=curl_init();
curl_setopt($ch,CURLOPT_URL,’’);
curl_setopt($ch,CURLOPT_HEADER,0);
curl_exec($ch);
curl_close($ch);
请写一个函数验证电子邮件的格式是否正确
function checkemail($email){
echo
preg_match(‘/^[0-9a-zA-Z-]+@[0-9a-zA-Z-]+\.[0-9
a-zA-Z]+$/’,$email)?’email 格式正确‘:’email 格式
不正确‘;
}
简述如何得到当前执行脚本路径,包括所得到参数
用
$_SERVER['SCRIPT_FILENAME'].$_SERVER[' REQUEST_URI'];取得当前页面的完整路径和参
数。
取得参数:$_SERVER['QUERY_STRING'];
JS 表单弹出对话框函数是?获得输入焦点函数是?
Alert(); focus();
写一个函数,算出两个文件的相对路径
如 $a = ’/a/b/c/d/e.php’;
$b = ’/a/b/12/34/c.php’;
计算出 $b 相对于 $a 的相对路径应该是
http://www.cnblogs.com/c/d 将()添上
$a=”http://www.cnblogs.com/a/b/c/d/e.php”;
$b=”http://www.cnblogs.com/a/b/12/34/c.php”
;
$ainfo=parse_url($a);
$binfo=parse_url($b);
$apath=ltrim($ainfo['path'],'/');
$bpath=ltrim($binfo['path'],'/');
$arr=explode('/',$apath);
$brr=explode('/',$bpath);
$flag=false;
for($i=0;$i<count($arr);$i++){
if($arr[$i]!==$brr[$i]){
$ab[$i]='..';
if(!$flag){
for($j=$i;$j<count($brr);$j++){
$bb[]=$brr[$j];
}
$flag=true;
}
}
}
$cha=array_merge($ab,$bb);
$cha=implode('/',$cha);
print_r($cha);
写一个函数,能够遍历一个文件夹下的所有文件和
子文件夹。
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;
}
}
数据库索引有几类,分别是什么?什么时候该用索
引?
普通索引、主键索引、唯一索引
并非所有的数据库都以相同的方式使用索引,作为
通用规则,只有当经常查询列中的数据时才需要在
表上创建索引。
写几个魔术方法并说明作用?
__call()当调用不存在的方法时会自动调用的方法
__autoload()在实例化一个尚未被定义的类是会自
动调用次方法来加载类文件
__set()当给未定义的变量赋值时会自动调用的方
法
__get()当获取未定义变量的值时会自动调用的方
法
__construct()构造方法,实例化类时自动调用的方
法
__destroy()销毁对象时自动调用的方法
__unset()当对一个未定义变量调用 unset()时自动
调用的方法
__isset()当对一个未定义变量调用 isset()方法时自
动调用的方法
__clone()克隆一个对象
__tostring()当输出一个对象时自动调用的方法
$_REQUEST、$_POST、$_GET、$_COOKIE、
$_SESSION、$_FILES 的意思是什么?
它们都是 PHP 预定义变量
$_REQUEST 用来获取 post 或 get 方式提交的值
$_POST 用来获取 post 方式提交的值
$_GET 用来获取 get 方式提交的值
$_COOKIE 用来获取 cookie 存储的值
$_SESSION 用来获取 session 存储的值
$_FILES 用来获取上传文件表单的值
数组中下标最好是什么类型的,为什么?
数组的下标最好是数字类型的,数字类型的处理速
度快。
++i 和 i++哪一个效率高,为什么?
++i 效率比 i++的效率更高,因为++i 少了一个返回
i 的过程。
magic_quotes_gpc()、magic_quotes_runtime()
的意思是什么?
Magic_quotes_gpc()是 php 配置文件中的,如果设
置为 on 则会自动 POST,GET,COOKIE 中的字符串
进行转义,在‘之前加\
Magic_quotes_runtime()是 php 中的函数,如果参
- 7 -
数为 true 则会数据库中取出来的单引号、双引号、
反斜线自动加上反斜杠进行转义。
框架中什么是单一入口和多入口,单一入口的优缺
点?
1、多入口就是通过访问不同的文件来完成用户请
求。
单一入口指 web 程序所有的请求都指向一个脚本
文件的。
2、单一入口更容易控制权限,方便对 http 请求可
以进行安全性检查。
缺点:URL 看起来不那么美观,特别是对搜索引擎
来说不友好。
你对 Memcach 的理解,优点有哪些?
Memcache 是一种缓存技术,在一定的时间内将动
态网页经过解析之后保存到文件,下次访问时动态
网页就直接调用这个文件,而不必在重新访问数据
库。使用 memcache 做缓存的好处是:提高网站的
访问速度,减轻高并发时服务器的压力。
Memcache 的优点:稳定、配置简单、多机分布式
存储、速度快。
对关系型数据库而言,索引是相当重要的概念,请
回答有关索引几个问题:
a) 索引的目的是什么?
1、快速访问数据表中的特定信息,提高检索速度
2、创建唯一性索引,保证数据库表中每一行数据
的唯一性
3、加速表和表之间的连接
4、使用分组和排序子句进行数据检索时,可以显
著减少查询中分组和排序的时间
b) 索引对数据库系统的负面影响是什么?
负面影响:创建索引和维护索引需要耗费时间,这
个时间随着数据量的增加而增加;索引需要占用物
理空间,不光是表需要占用数据空间,每个索引也
需要占用物理空间;当对表进行增、删、改的时候
索引也要动态维护,这样就降低了数据的维护速
度。
c) 为数据表建立索引的原则有哪些?
1、在最频繁使用的、用以缩小查询范围的字段上
建立索引
2、在平频繁使用的、需要排序的字段上建立索引
d) 什么情况下不宜建立索引?
1、对于查询中很少涉及的列或者重复值比较多的
列,不宜建立索引
2、对于一些特殊的数据类型,不宜建立索引,比
如文本字段(text),值范围较少的知道等。
web 应用中,数据库的读取频率远高于写入频率, 如何优化 MySQL 而应对此种情景?
使用 memcache 缓存技术,将动态数据缓存到文
件,访问动态页面时直接调用缓存文件,而不必重
新访问数据库,这样就减少了查询数据库的次数。
如果网站的访问量很大,可以把数据库读写服务器
分开,使用多台服务器去处理数据库查询,使用较
少的服务器去处理数据库的写入和修改。
include 与 require 的区别?
1.include()在执行文件时每次都要进行读取和评估
require()文件只处理一次(实际上文件内容
替换了 require()语句)
2.require()通常放在 PHP 脚本程序的最前面
include()的使用和 require()一样,一般放在
流程控制的处理区段中,PHP 脚本文件读到
include()语句时,才将它包含的文件读进来,这种方
式,可以把程序执行时的流程简单化
3,require()和 include()语句是语言结构,不是
真正的函数,可以像 PHP 的其他语言结构一样
4,include_once()和 require_once()语句也是
在脚本执行期间包括并运行指定文件,与
include()require()唯一的区别是如果文件中的代码
已经被包括了,则不会再次包括. 5,require()包含文件失败,停止执行,给出错误
(致命的)
include()常用于动态包含. 通常是自动加载的文件,即使加载出错, 整个程序还是继续执行
一个页面声明,另一个页面调用
包函文件失败,继续向下执行,返回一条
警告
PHP 字符串中单引号与双引号的区别?
单引号不能解释变量,而双引号可以解释变量。
单引号不能转义字符,在双引号中可以转义字符。
php 中,模板引擎的目的是什么? 你用过哪些模板
引擎?
使用模板引擎的目的是使程序的逻辑代码和
html 界面代码分离开,是程序的结构更清晰。
使用过的模板引擎:Smarty、ThinkPHP 的
ThinkTemplate
指出以下代码片段中的 SQL 注入漏洞以及解决方
法(magic_quotes_gpc = off)
mysql_query(“select id,title from content where
catid=’{$_GET[catid]}’ and title
like ’%$_GET[keywords]%’”, $link);
注入漏洞主要存在用户提交的数据上,这里的注入
漏洞主要是$_GET[catid]和$_GET[keyword]
解决注入漏洞:
$_GET[catid]=intval($_GET[catid]);
$sql=”select id,title from content where
catid=’{$_GET[catid]}’ and title
like ’%$_GET[keywords]%”;
$sql=addslashes($sql);
Mysql_query($sql);
分别指出 php.ini 中 magic_quotes_gpc, magic_quotes_runtime 两项参数的作用. Magic_quotes_gpc 的作用是在 POST、GET、
COOKIE 数据上使用 addslashes()自动转义。
Magic_quotes_runtime 参数的作用是设置状态,当
状态为0时则关闭自动转义,设置为1则自动转义,
将数据库中取出来的单引号、双引号、反斜线这些
字符加上反斜杠转义。
写出以下 php 代码的运行结果: <?php
function foo($i) {
$i++;
echo $i ;
}
function bar(&$i) {
}
$i = 10 ;
echo $i++ , ++$i; 输出:10,12
foo($i); 输出:13
bar($i); 输出:无输出
如何快速下载一个远程 http 服务器上的图片文件
到本地?
$file=”";
$fp=fopen($file,’rb’);
$img=fread($fp,10000);
$dir=”./”;
$local=fopen($dir.’/’.basename($file),’w');
Fwrite($local,$img);
- 8 -
什么是时间戳? 如何取得当前时间戳?
时间戳是从1970年1月1日 00:00:00到指定日期的
秒数。
获取当前时间戳:time()
了解 XSS 攻击吗? 如何防止 ?
XSS 是跨站脚本攻击,首先是利用跨站脚本漏洞以
一个特权模式去执行攻击者构造的脚本,然后利用
不安全的 Activex 控件执行恶意的行为。
使用 htmlspecialchars()函数对提交的内容进行过
滤,使字符串里面的特殊符号实体化。
SQL 注入漏洞产生的原因 ? 如何防止?
SQL 注入产生的原因:程序开发过程中不注意规范
书写 sql 语句和对特殊字符进行过滤,导致客户端
可以通过全局变量 POST 和 GET 提交一些 sql 语
句正常执行。
防止 SQL 注入:
1、开启配置文件中的 magic_quotes_gpc 和
magic_quotes_runtime 设置
2、执行 sql 语句时使用 addslashes 进行 sql 语句
转换
3、Sql 语句书写尽量不要省略小引号和单引号
4、过滤掉 sql 语句中的一些关键字:update、insert、
delete、select、* 5、提高数据库表和字段的命名技巧,对一些重要
的字段根据程序的特点命名,取不易被猜到的。
6、Php 配置文件中设置 register_globals 为 off,
关闭全局变量注册
7、控制错误信息,不要再浏览器上输出错误信息,
将错误信息写到日志文件中。
一个字节占多少 bit ? 一个 IPv4地址占几个字节? 一个 IPv6地址呢? 一个字节占8bit,一个 IPV4占用4字节,一个 IPV6
占用16字节。
142.M ADSL 宽带连接, 理想情况下, 最大下载速
度是多少 KB/s ?
256KB/s
143.请写出一个正则表达式,用于匹配一个 HTML
文件中<img />标记中的图片地址
$url=”<img src=’11.jpg’/>”;
/<img[\s]*src=['|\"](.*)['|\"][\s]*\/>/
145.Fatal error: Call to undefined method
ge_user() in /website/index.php on line 39
调用了未定义的方法 ge_user(),检查程序中
有没有定义此方法
146.Fatal error: Class ’client’ not found in
/website/index.php on line 173
类 client 没有找到,检查文件中有没有 client
类,或者有没有包含 client 类文件
Warning: Cannot modify header information - headers already sent by (output started at
/website/index.php:1) in /website/index.php
on line 3
提示文件前面有输出,检查是否有输出,或者
编码
148.Warning:session_start():
open(/website/tmp/sess_47e067121facf03378
5f9a1cb16d243b, O_RDWR) failed: No such
file or directory (2) in /website/index.php on
line 10
没有找到文件或目录,检查文件是否存在
149.Parse error: syntax error, unexpected
T_STRING in /website/index.php on line 18
18行语法错误,检查语法
150.Warning:fopen(welcome.txt)
[function.fopen]: failed to open stream: No
such file or directory in /website/index.php on
line 2
没有找到 welcome.txt 文件,检查文件是否存
在
1、抓取远程图片到本地,你会用什么函数?
fsockopen, A
3、用 PHP 打印出前一天的时间,打印格式是2007
年5月10日22:21:21
Echo date(‘Y-m-d H:i:s’,strtotime(‘-1
day’));
4、javascript 能否定义二维数组,如果不能你如
何解决?
javascript 不支持二维数组定义,可以用 arr[0] = new array()来解决
5、假设 a.html 和 b.html 在同一个文件夹下面,
用 javascript 实现当打开 a.html 五秒钟后,自动
跳转到 b.html。
<script>
function go2b(){
window.location = “b.html”;
window.close();
}
setTimeout( “go2b()”,5000 ); //5秒钟后自动执
行 go2b() </script>
//正在浏览当前页面用户的 IP 地址:127.0.0.1
echo $_SERVER["REMOTE_ADDR"].”<br />”;
//查询(query)的字符串(URL 中第一个问号 ?
之后的内容):id=1&bi=2
echo $_SERVER["QUERY_STRING"].”<br />”;
//当前运行脚本所在的文档根目
录:d:inetpubwwwroot
echo $_SERVER["DOCUMENT_ROOT"].”<br
/>”;
7、在 HTTP 1.0中,状态码 401 的含义是未授权
____;如果返回“找不到文件”的提示,则可用
header 函数,其语句为 header(“HTTP/1.0 404
Not Found”);
401表示未授权;header(“HTTP/1.0 404 Not
Found”);
9、把 John 新增到 users 阵列?
$users[] =‘john’; array_push($users‘, john’);
在PHP中error_reporting这个函数有什么作用?
error_reporting() 设置 PHP 的报错级别并返回当
前级别。
13、如何修改 SESSION 的生存时间(1分). 方法1:将 php.ini 中的 session.gc_maxlifetime 设置
为9999重启 apache
方法2:$savePath = “./session_save_dir/”;
$lifeTime = 小时 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
- 9 -
session_start();
方法3:
setcookie() and
session_set_cookie_params($lifeTime);
14、有一个网页地址, 比如 PHP 开发资源网主页:
http://www.phpres.com/index.html,如何得到它
的内容?($1分)
方法1(对于 PHP5及更高版本):
$readcontents =
fopen(“http://www.phpres.com/index.html”, “rb”);
$contents =
stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;
方法2:
echo
file_get_contents(“http://www.phpres.com/index. html”);
16、写一个函数,尽可能高效的,从一个标准 url
里取出文件的扩展名
例如:
http://www.sina.com.cn/abc/de/fg.php?id=1
需要取出 php 或 .php
答案1:
function getExt($url){
$arr = parse_url($url);
$file = basename($arr['path']);
$ext = explode(“.”,$file);
return $ext[1];
}
答案2:
function getExt($url) {
$url = basename($url);
$pos1 = strpos($url,”.”);
$pos2 = strpos($url,”?”);
if(strstr($url,”?”)){
Return substr($url,$pos1 + 1,$pos2 –
$pos1 – 1);
} else {
return substr($url,$pos1);
}
}
17、使用五种以上方式获取一个文件的扩展名
要求:dir/upload.image.jpg,找出 .jpg 或
者 jpg ,
必须使用 PHP 自带的处理函数进行处理,方法不
能明显重复,可以封装成函数
get_ext1($file_name), get_ext2($file_name)
function get_ext1($file_name){
return strrchr($file_name, ‘.’);
}
function get_ext2($file_name){
return substr($file_name,strrpos($file_name, ‘.’));
}
function get_ext3($file_name){
return array_pop(explode(‘.’, $file_name));
}
function get_ext4($file_name){
$p = pathinfo($file_name);
return $p['extension'];
}
function get_ext5($file_name){
return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), ‘.’)));
}
18、<?php
$str1 = null;
$str2 = false;
echo $str1==$str2 ? ‘相等’ : ‘不相等’;
$str3 = ”;
$str4 = 0;
echo $str3==$str4 ? ‘相等’ : ‘不相等’;