PHP面试100题汇总
1 PHP面试100题汇总 2 1,Http 和Https的区别 3 4 第一:http是超文本传输协议,信息是明文传输,https是具有安全性的ssl加密传输协议 5 6 第二:http和https使用的是完全不同的连接方式,端口也不一样,前者80 或者443 7 8 第三:http连接很简单,是无状态的。https协议是由ssl+http协议构建的可进行加密传输,身份认证的网络协议。 9 10 2.什么方法来加快页面的加载速度 11 12 1,用到服务器资源时在打开,不用时,立即关闭服务器资源。 13 14 2,数据库添加索引 15 16 3,页面可生成静态 17 18 4,图片等大文件单独放在一个服务器 19 20 5,能不查询数据库的尽量不去数据取数据,可以放在缓存中。 21 22 3.表单中 get与post提交方法的区别? 23 24 答:get是发送请求HTTP协议通过url参数传递进行接收,而post是实体数据,可以通过表单提交大量信息. 25 4.echo ,print,print_r 的区别: 26 27 echo 是php语句,无返回值。 28 29 print,print_r是函数,有返回值。 30 print() 只能打印出简单类型变量的值(如int,string) 31 32 print_r() 可以打印出复杂类型变量的值(如数组,对象) 33 echo 输出一个或者多个字符串 34 35 5.session与cookie区别 36 37 session与cookie相同:跨页面、不跨用户 38 39 session与cookie不相同: 40 41 1、session可以存储任意类型的数据,但cookie只能存储字符串 42 43 2、cookie产生在服务器端、存储在客户端 44 45 session产生在服务器端、存储在服务器端 46 47 6.魔术常量 48 49 答案: 50 51 __LINE__文件中的当前行号。 52 53 __FILE__文件的完整路径和文件名。 54 55 __FUNCTION__函数名称 56 57 __CLASS__类的名称 58 59 __METHOD__类的方法名 60 61 62 63 7.数据库中的事务是什么? 64 答:事务(transaction)是作为一个单元的一组有序的数据库操作。如果组中的所有操作都成功,则认为事务成功,即使只有一个操作失败,事务也不成功。如果所有操作完成,事务则提交,其修改将作用于所有其他数据库进程。如果一个操作失败,则事务将回滚,该事务所有操作的影响都将取消。 65 66 8.1优化MYSQL数据库的方法。 67 1、选择合适的字段的数据类型 68 69 1)能用数字不用字符串 70 71 2)char、varchar、text 能用varchar不用char 72 73 3)给字段加not null 避免在表中出现NULL关键字(default 值) 74 75 2、选择合适的字段充当主键 76 77 1)建议每张表必须有主键 78 79 2)用数字类型的字段充当主键 80 81 拆分表 82 拆分字段,将文章的标题与内容分开 83 84 2)拆分记录,将今年的记录与往年的记录分开 85 86 给字段合理添加索引 87 88 a.格式: 89 90 (普通索引)-> 91 92 创建:CREATE INDEX <索引名> ON tablename (索引字段) 93 94 修改:ALTER TABLE tablename ADD INDEX [索引名] (索引字段) 95 96 创表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引字段)) 97 98 (唯一索引)-> 99 100 创建:CREATE UNIQUE <索引名> ON tablename (索引字段) 101 102 修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引字段) 103 104 创表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引字段)) 105 106 (主键)-> 107 108 它是唯一索引,一般在创建表是建立,格式为: 109 110 CREATA TABLE tablename ([...],PRIMARY KEY[索引字段]) 111 112 5、事务处理: 113 114 a.保证数据完整性,例如添加和修改同时,两者成立则都执行,一者失败都失败 115 116 mysql_query("BEGIN"); 117 118 mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')"; 119 120 mysql_query("SELECT * FROM `orderinfo` where customerid=".$id"); 121 122 mysql_query("COMMIT"); 123 124 6、锁定表,优化事务处理: 125 126 a.我们用一个 SELECT 语句取出初始数据,通过一些计算,用 UPDATE 语句将新值更新到表中。 127 128 包含有 WRITE 关键字的 LOCK TABLE 语句可以保证在 UNLOCK TABLES 命令被执行之前, 129 130 不会有其它的访问来对 inventory 进行插入、更新或者删除的操作 131 132 mysql_query("LOCK TABLE customerinfo READ, orderinfo WRITE"); 133 134 mysql_query("SELECT customerid FROM `customerinfo` where id=".$id); 135 136 mysql_query("UPDATE `orderinfo` SET ordertitle='$title' where 137 138 customerid=".$id); 139 140 mysql_query("UNLOCK TABLES"); 141 142 7、使用外键,优化锁定表 143 144 a.把customerinfo里的customerid映射到orderinfo里的customerid, 145 146 任何一条没有合法的customerid的记录不会写到orderinfo里 147 148 CREATE TABLE customerinfo( 149 150 customerid INT NOT NULL, 151 152 PRIMARY KEY(customerid) 153 154 )TYPE = INNODB; 155 156 CREATE TABLE orderinfo( 157 158 orderid INT NOT NULL, 159 160 customerid INT NOT NULL, 161 162 PRIMARY KEY(customerid,orderid), 163 164 FOREIGN KEY (customerid) REFERENCES customerinfo 165 166 (customerid) ON DELETE CASCADE 167 168 )TYPE = INNODB; 169 170 注意:'ON DELETE CASCADE',该参数保证当customerinfo表中的一条记录删除的话同时也会删除order 171 172 表中的该用户的所有记录,注意使用外键要定义事务安全类型为INNODB; 173 174 8、优化查询语句 175 176 a用内连接代替子查询代替子查询,用sphinx代替like模糊查询 177 178 179 180 b最好在相同字段进行比较操作,在建立好的索引字段上尽量减少函数操作 181 182 例子1: 183 184 SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢) 185 186 SELECT * FROM order WHERE orderDate<"2008-01-01";(快) 187 188 例子2: 189 190 SELECT * FROM order WHERE addtime/7<24;(慢) 191 192 SELECT * FROM order WHERE addtime<24*7;(快) 193 194 例子3: 195 196 SELECT * FROM order WHERE title like "%good%"; 197 198 SELECT * FROM order WHERE title>="good" and name<"good"; 199 200 缓存,静态化 201 选择合适存储引擎用Innodb增删改,用myisam查询 202 主从数据库 203 负载均衡 204 最好拿数字类型的字段充当where条件 205 最好拿相同类型的字段进行比对(避免发生数据类型的转换) 206 不要在具有索引的字段上添加数据库函数(索引失效) 207 208 8.2请简述项目中优化sql语句执行效率的方法,从哪些方面,sql语句性能如何分析? 209 210 答:(1)选择最有效率的表名顺序 211 212 (2)WHERE子句中的连接顺序 213 214 (3)SELECT子句中避免使用‘*’ 215 216 (4)用Where子句替换HAVING子句 217 218 (5)通过内部函数提高SQL效率 219 220 (6)避免在索引列上使用计算。 221 222 (7)提高GROUP BY 语句的效率, 可以通过将不需要的记录在GROUP BY 之前过滤掉。 223 9.对于大流量网站,采用什么方法解决访问量问题? 224 225 1,确认服务器的硬件是否足够支持当前的流量 226 227 2,优化数据库的访问 228 229 3,禁止外部的盗链 230 231 4,控制大文件的下载 232 233 5,使用不同主机分流主要流量 234 235 6,使用流量分析统计软件 236 237 10.一个函数,能够遍历一个文件夹下的所有文件和子文件夹(20分) 238 239 function dir_recurse($dir) { 240 241 $i = 1; 242 243 if($handle = opendir($dir)) { 244 245 while(false !== ($file = readdir($handle))) { 246 247 if($file != "."&& $file != ".." ) { 248 249 if(is_dir($dir."/".$file) == true) { 250 251 $fullpath = $dir."/".$file; 252 253 dir_recurse($fullpath); 254 255 echo "$fullpath\n"; 256 257 $i++; 258 259 }else { 260 261 $fullpath = $dir."/".$file; 262 263 echo "$fullpath\n"; 264 265 266 267 $i++; 268 269 } 270 271 } 272 273 } 274 275 closedir($handle); 276 277 } 278 279 } 280 281 10.2写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。 282 283 function my_scandir($dir){ 284 285 $files = array(); 286 287 if ( $handle = opendir($dir) ) { 288 289 while ( ($file = readdir($handle)) !== false ) { 290 291 if ( $file != ".."&& $file != "." ) { 292 293 if ( is_dir($dir . "/" . $file) ) { 294 295 $files[$file] = scandir($dir . "/" . $file); 296 297 }else { 298 299 $files[] = $file; 300 301 } 302 303 } 304 305 } 306 307 closedir($handle); 308 309 return $files; 310 311 } 312 313 } 314 315 316 11、能够使HTML和PHP分离开使用的模板(1分) 317 答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate 318 12、使用哪些工具进行版本控制?(1分) 319 答:cvs,svn,vss; 320 321 13、如何实现字符串翻转?(3分) 322 323 英文: 324 325 strrev($a) 326 327 中文或其他文字: 328 329 中文:GB2312, 代码是使用GB2312编码 330 331 <?php 332 333 function reverse($str) 334 335 { 336 337 $ret = ""; 338 339 len=mb s trwidth( len=mbstrwidth(len = mb_strwidth(str,"GB2312"); 340 341 for(i=0; i=0;i=0; i< len; len;len; i++) 342 343 { 344 345 arr[]=mb s ubstr( arr[]=mbsubstr(arr[] = mb_substr(str, $i, 1, "GB2312"); 346 347 } 348 349 return implode("", array_reverse($arr)); 350 351 } 352 353 print_r(reverse("你好")); 354 355 356 357 14.PHP的意思(送1分) 358 359 PHP是一个基于服务端来创建动态网站的脚本语言,您可以用PHP和HTML生成网站主页 360 361 15.MYSQL取得当前时间的函数是?,格式化日期的函数是(2分) 362 363 答:now(),date() 364 365 16.用PHP写出显示客户端IP与服务器IP的代码1分) 366 367 答:打印客户端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv('REMOTE_ADDR'); 368 369 打印服务器IP:echo gethostbyname("www.bolaiwu.com") 370 371 17、语句include和require的区别是什么?为避免多次包含同一文件,可用(?)语句代替它们? 372 373 答:require->require是无条件包含也就是如果一个流程里加入require,无论条件成立与否 都会先执行require 374 375 include->include有返回值,而require没有(可能因为如此require的速度比include快) 376 377 注意:包含文件不存在或者语法错误的时候require是致命的,include不是 378 18.http请求返回状态码 379 380 400 请求无效 381 382 401 未授权 383 384 403 请求被禁止 385 386 404 请求资源不存在 387 388 405 请求资源被禁止 389 390 406 无法接受 391 392 407 要求代理身份验证 393 394 500 Internal Server Error 服务端源代码错误 395 396 600 源站没有返回响应头部,只返回实现内容 397 398 19,linux授权码: 399 400 600 属主有读写权限 401 402 644 属主有读写权限,属性组有读权限 403 404 700 属主有读写执行权限 405 406 755 属主有读写执行权限,属性组有读,执行权限 407 408 711 属主有读写执行权限,属性组有执行权限 409 410 666 所有用户都有文件的读写权限 411 412 777 所有用户都有文件的读写执行权限 413 414 20.有一个网页地址, 比如PHP开发资源网主页: http://www.phpres.com/index.html,如何得到它的内容?($1分) 415 416 答:方法1(对于PHP5及更高版本): 417 418 $readcontents = fopen("http://www.phpres.com/index.html", "rb"); 419 420 $contents = stream_get_contents($readcontents); 421 422 fclose($readcontents); 423 424 echo $contents; 425 426 方法2: 427 428 echo file_get_contents("http://www.phpres.com/index.html"); 429 430 21.在PHP中error_reporting这个函数有什么作用? (1分) 431 432 答:设置错误级别与错误信息回报 433 434 22.JS表单弹出对话框函数是?获得输入焦点函数是? (2分) 435 436 答:弹出对话框: alert(),prompt(),confirm() 437 438 获得输入焦点 focus() 439 440 23.foo()和@foo()之间有什么区别?(1分) 441 442 答:@foo()控制错误输出 443 444 24、mysql_fetch_row() 和mysql_fetch_array之间有什么区别? (1分) 445 446 答:mysql_fetch_row是从结果集取出1行数组,作为枚举 447 448 mysql_fetch_array是从结果集取出一行数组作为关联数组,或数字数组,两者兼得 449 450 25、GD库是做什么用的? (1分) 451 452 答:gd库提供了一系列用来处理图片的API,使用GD库可以处理图片,或者生成图片。 453 454 在网站上GD库通常用来生成缩略图或者用来对图片加水印或者对网站数据生成报表。 455 26.面向对象编程 456 457 有两个重要的概念:类和对象 458 459 类是具备某项功能的抽象模型,实际应用中,还需要对类进行实例化后使用。这样就引入了对象的概念。 460 461 对象是类进行实例化后的一个产物,是一个实体。 462 463 封装 :把客观的事物封装成一个抽象的类。 464 465 继承:子类继承父类,可以使用父类的属性和方法。可以实现接口,同时实现接口中的所有方法 466 467 多态:覆盖和重载 子类可以覆盖父类中的方法;一个类中可以同时拥有同一个函数名的方法,但是方法的参数不同,实现的结果也不同。 468 27.php框架 469 470 熟悉YII ,Thinkphp还有laravel ,symfony2,cakephp 471 28.mysql存储引擎 472 473 ISAM: 查询速度快、增删改慢,支持全文索引、不支持外键、不支持事务 474 475 MyISAM: ISAM升级版 476 477 Memory: 数据驻留在内存、速度快、数据管理不稳定、断电后数据全部丢失 478 479 InnoDB: 速度较慢、支持外键、支持事务、不支持全文索引 480 481 使用的存储引擎 482 483 MyISAM:内容管理系统(新闻、官网、电商、软件下载、房屋、招聘...) 可读不可改 大部分是浏览信息 484 485 InnoDB:技术型网站(bbs、blog、webo、oa...) 486 487 488 29.数据库操作流程 489 490 $link = mysql_connect("localhost","root","root"); 491 492 mysql_select_db("test",$link); 493 494 $sql ="select * from table"; 495 496 $result = mysql_query($sql); 497 498 while($row =mysql_fetch_****($result) ){ 499 500 $arr[]=$row; 501 502 } 503 504 $row = mysql_fetch_array($result) 意思:$row['name'] 和$row[1] 都可以取到值 505 506 $row = mysql_fetch_row($result)) 意思:$row[1] 只有用索引取值,偏移量从0开始。 507 508 $row = mysql_fetch_assoc($result)) 意思: $row['name'] 字段名作为索引取值 抽取一条记录转为 关联数组,失败返回false 509 30.php 加密函数 510 511 crypt($str[,$slat]) 可以完成单向加密功能 512 513 md5() 514 515 sha1() 返回一个40位的十六进制数, 516 517 加密扩展库 518 519 Mcrypt() 和Mash 520 521 31、字符串“to upper case” 分别用php,shell ,js实现将字符串中的字符全部转换成大写并输出。(5分) 522 523 Php实现: echo strtoupper(‘to upper case’) 524 525 Shell实现:echo "to upper case" | tr 'a-z' 'A-Z' 526 527 Js实现: 528 529 <script language="javascript"> 530 var stmp1 = " to upper case "; 531 alert(stmp1.toLocaleUpperCase());//转换成大写 532 alert(stmp1.toUpperCase())//转换成大写 533 </script> 534 535 32.防止SQL注入 536 537 1)一般使用 addslashes 函数 538 539 addslashes 函数在制定的预定义字符前添加反斜杠 540 541 对字段和密码MD5加密处理 542 预处理过滤处理 543 544 33、用PHP打印出前一天的时间,格式是2006-5-10 22:21:21 545 546 <?php 547 548 //echo date('Y-m-d H:i:s',time()-60*60*24 549 550 echo date("Y:m:d H:i:s",strtotime("-1 day")); 551 552 ?> 553 554 34.如何实现字符串翻转? 555 556 其实PHP本身就有字符串翻转的函数:strrev(),不妨试试echo strrev($str);不过 557 558 所有的这三种方法都不能解决中文字符串翻转的问题,会出错的。 559 560 代码 561 562 <?php 563 564 function reverse($var) 565 566 { 567 568 $res=""; 569 570 for($i=0,$j=strlen($var);$i<$j;$i++) 571 572 { 573 574 $res=$var[$i].$res; 575 576 } 577 578 return $res; 579 580 } 581 582 $tmpvar="wofang"; 583 584 $res=reverse($tmpvar); 585 586 echo $res; 587 588 ?> 589 590 35.实现中文字串截取无乱码的方法。 591 592 mb_substr() 593 594 36.以下哪一句不会把 John 新增到 users 阵列? 595 596 $users[] = 'john'; 597 598 成功把 John 新增到阵列 users。 599 600 array_add($users,’john’); 601 602 函式 array_add() 无定义。 603 604 array_push($users,‘john’); 605 606 成功把 John 新增到阵列 users。 607 608 $users ||= 'john'; 609 610 语法错误。 611 612 37.sort()、assort()、和 ksort() 有什么分别?它们分别在什么情况下使用? 613 614 sort() 615 616 根据阵列中元素的值,以英文字母顺序排序,索引键会由 0 到 n-1 重新编号。主 617 618 要是当阵列索引键的值无关疼痒时用来把 阵列排序。 619 620 assort() 621 622 PHP 没有 assort() 函式,所以可能是 asort() 的笔误。 623 624 asort() 625 626 与 sort() 一样把阵列的元素按英文字母顺序来排列,不同的是所有索引键都获得保留,特别适合替联想阵列排序。 627 628 ksort() 629 630 根据阵列中索引键的值,以英文字母顺序排序,特别适合用于希望把索引键排序的联想阵列。 631 632 38.以下的代码会产生什么?为什么? 633 634 $num =10; 635 636 function multiply(){ 637 638 $num =$num *10; 639 640 } 641 642 multiply(); 643 644 echo $num; 645 646 由于函式 multiply() 没有指定 $num 为全域变量(例如 global $num 或者 647 648 $_GLOBALS['num']),所以 $num 的值是 10。 649 650 39.些函式可以用来在现正执行的脚本中插入函式库? 651 652 对这道题目不同的理解会有不同的答案,我的第一个想法是插入 PHP 函式库不外乎 653 654 include()、include_once()、require ()、require_once(),但细心再想,“函式库”也应该包括 com 物件和 .net 函式库,所以我们的答案也要分别包括 655 656 com_load 和 dotnet_load,下次有人提起“函式库”的时候,别忘记这两个函式。 657 658 40.foo() 与 @foo() 有什么分别? 659 660 foo() 会执行这个函式,任何解译错误、语法错误、执行错误都会在页面上显示出来。 661 662 @foo() 在执行这个函式时,会隐藏所有上述的错误讯息。 663 664 很多应用程式都使用 @mysql_connect() 和 @mysql_query 来隐藏 mysql 的错误讯息,我认为这是很严重的失误,因为错误 不该被隐藏,你必须妥善处理它们,可能的话解决它们。 665 666 “===”是什么?试举一个“==”是真但“===”是假的例子。 667 668 “===”是给既可以送回布尔值“假”,也可以送回一个不是布尔值但却可以赋与“假”值的函式,strpos() 和 strrpos() 便是其中两个例子。 669 670 问题的第二部份有点困难,想一个“==”是假,但是“===”是真的例子却很容易, 671 672 673 674 相反的例子却很少。但我终于找到以下的 例子: 675 676 if (strpos("abc", "a") == true){ // 这部分永不会被执行,因为 "a" 的位 677 678 置是 0,换算成布尔值“假”}if (strpos("abc", "a") === true){ // 这部份 679 680 会被执行,因为“===”保证函式 strpos() 的送回值不会换算成布尔值.} 681 682 42、如何修改SESSION的生存时间(1分). 683 684 答:方法1:将php.ini中的session.gc_maxlifetime设置为9999重启apache 685 686 方法2:$savePath = "./session_save_dir/"; 687 688 $lifeTime = 小时 * 秒; 689 690 session_save_path($savePath); 691 692 session_set_cookie_params($lifeTime); 693 694 session_start(); 695 696 方法3:setcookie() and session_set_cookie_params($lifeTime); 697 698 43、在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?(1分) 699 700 答:heredoc的语法是用"<<<"加上自己定义成对的标签,在标签范围內的文字视为一 701 702 个字符串 703 704 例子: 705 706 $str = <<<SHOW 707 708 my name is Jiang Qihui! 709 710 SHOW; 711 712 在PHP中error_reporting这个函数有什么作用? (1分) 713 714 答:设置错误级别与错误信息回报 715 716 请写一个函数验证电子邮件的格式是否正确 (2分) 717 718 答:function checkEmail($email) 719 720 { 721 722 $pregEmail = "/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0- 723 724 725 726 9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/i"; 727 728 return preg_match($pregEmail,$email); 729 730 } 731 732 46、请写出数据类型(int char varchar datetime text)的意思; 请问varchar和char 733 734 有什么区别(2分) 735 736 答:int是数字类型,char固定长度字符串,varchar实际长度字符串,datetime日期时 737 738 间型,text文本字符串 739 740 char的场地固定为创建表设置的长度,varchar为可变长度的字符 741 742 47、检测一个变量是否有设置的函数是否?是否为空的函数是?(2分) 743 744 答:isset($str),empty($str); 745 746 48、取得查询结果集总数的函数是?(1分) 747 748 答:mysql_num_rows($result); 749 750 49 简述如何得到当前执行脚本路径,包括所得到参数。 751 752 <?php 753 754 echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?".$_SERVER 755 756 ['QUERY_STRING']; 757 758 //echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; 759 760 ?> 761 762 50 请举例说明在你的开发过程中用什么方法来加快页面的加载速度 763 764 要用到服务器资源时才打开 765 及时关闭服务器资源, 766 数据库添加索引, 767 页面可生成静态,图片等大文件单独服务器。 768 使用代码优化工具啦 769 770 51. 给定一个用逗号分隔一组值的字符串,以下哪个函数能在仅调用一次的情况下就 771 772 把每个独立的值放入一个新创建的数组? 773 774 A.strstr() 775 776 B.不可能只调用一次就完成 777 778 C.extract() 779 780 D.explode()√ 781 782 E.strtok() 783 784 785 786 52.如果用+操作符把一个字符串和一个整型数字相加,结果将怎样? 787 788 A.解释器输出一个类型错误 789 790 B.字符串将被转换成数字,再与整型数字相加 791 792 C.字符串将被丢弃,只保留整型数字√ 793 794 D.字符串和整型数字将连接成一个新字符串 795 796 E.整形数字将被丢弃,而保留字符串 797 798 53.以下脚本输出什么? 799 800 $s = '12345'; 801 802 $s[$s[1]] = '2'; 803 804 echo $s; 805 806 ?> 807 808 A.12345 809 810 B.12245√ 811 812 C.22345 813 814 D.11345 815 816 54.以下脚本输出什么? 817 818 $x = 'apple'; 819 820 echo substr_replace ($x, 'x', 1, 2); 821 822 ?> 823 824 A.x 825 826 B.axle√ 827 828 C.axxle 829 830 D.applex 831 832 E.xapple 833 834 55. 函数______能读取文本文件中的一行。读取二进制文件或者其他文件时,应当 835 836 用______函数。 837 838 A.fgets(), fseek() 839 840 B.fread(), fgets() 841 842 C.fputs(), fgets() 843 844 D.fgets(), fread()√ 845 846 E.fread(), fseek() 847 848 849 850 56.哪个函数能够往文本文件中写入一个字符串? 851 852 答案:fwrite()和fputs()两个函数在这里都可以,而后者其实是前者的别名。在 853 854 PHP中,写入二进制数据和写入字符串没有区别。 855 856 57.函数______能判断一个文件是否可写。 857 858 答案:is_writeable 859 860 58.以下哪个选项能将文件指针移到开头? 861 862 A.reset() 863 864 B.fseek(-1) 865 866 C.fseek(0, SEEK_END) 867 868 D.fseek(0, SEEK_SET)√ 869 870 E.fseek(0, SEEK_CUR) 871 872 59、include的功能和require一样,不同的是,require不能用在[ ] 873 874 A、判断语句或循环里, 875 876 B、连接语句里 877 878 C、声明语句里 879 880 D、文件的开头 881 882 E、文件的中间√ 883 884 50、下面建立与MySQL Server的连接语法正确的是:[ ] 885 886 A、$link=connect("host_name","user_name","password"); 887 888 B、$link=mysql_connect("host_name","user_name","password");√ 889 890 C、$link=mysqlconnect("host_name","user_name","password"); 891 892 D、$link=mysql_pconnect("host_name","user_name","password");√ 893 894 E、$link=pconnect("host_name","user_name","password"); 895 896 51.将字符串转换成小写 897 898 strtolower(): 该函数将传入的字符串参数所有的字符都转换成小写,并以小定形式 899 900 放回这个字符串 901 902 52.将字符转成大写 903 904 strtoupper(): 该函数的作用同strtolower函数相反,是将传入的字符参数的字符全 905 906 部转换成大写,并以大写的形式返回这个字符串.用法同strtolowe()一 样. 907 908 53.将字符串首字符转换成大写 909 910 ucfirst(): 该函数的作用是将字符串的第一个字符改成大写,该函数返回首字符大 911 912 写的字符串.用法同strtolowe()一样. 913 914 54.将字符串每个单词的首字符转换成大写 915 916 ucwords(): 该函数将传入的字符串的每个单词的首字符变成大写.如"hello 917 918 world",经过该函数处理后,将返回"Hello Word".用法同strtolowe()一样. 919 920 55、NoSQL:Not Only SQL 921 922 思想:网站产生的数据,一部分存储数据库、一部分存到NoSQL相关产品 923 924 NoSQL产品 925 926 1、Memcache:内存(速度快、数据量小)、数据的过期时间 927 928 2、MongoDB:文档数据库 929 930 3、Redis:内存(速度快、数据量小)、库、没有过期时间 931 932 什么样的数据,存储在什么位置? 933 934 MySQL:稳定的数据 935 936 NoSQL:活跃的数据 937 938 57缓存分类 939 940 1、缓存数据存储位置不同 941 942 1)文件缓存 943 944 2)内存缓存 945 946 2、缓存的数据量的不同 947 948 1)页面缓存 949 950 2)局部缓存 951 952 3)局部不缓存 953 954 4)数据缓存(变量缓存、动态缓存) 955 956 Memcache:内存缓存、变量缓存 957 958 58 .LINUX命令 959 960 查看当前目录下所有内容 ls 961 962 在当前目录下,新建一个文件夹 mkdir 文件夹名 963 964 删除指定的文件夹 rmdir 文件夹名 只能删除空目录 965 966 在当前目录下新建一个空白文件 touch 文件名 967 968 删除当前目录下的一个文件 unlink文件名 969 970 删除文件或文件夹 rm 971 972 复制文件 cp 973 974 移动文件或文件夹 mv 975 976 文件或文件夹重命名 mv 977 978 查看完整的工作目录 pwd 979 980 切换目录: cd cd/ 返回根目录 981 982 文件传输 ftp 983 984 查看文件内容 cat 文件名 985 986 查看文件编码 file 文件名 987 988 查找文件 find 路径 -name 文件名 989 990 修改文件或文件夹权限 991 992 权限种类:r 4(读)、w 2(写)、x 1(执行) 993 994 权限操作符:+(赋予权限)、-(收回权限) 995 996 用户种类:a(所有人)、u(文件拥有者)、g(组用户)、o(其他用户) 997 998 查看权限:ls -l 999 1000 -rw-r--r-- a.txt 1001 1002 drwxr-xr-x hello 1003 1004 第1位:是文件还是文件夹(-文件、d文件夹) 1005 1006 第234位:u用户的权限 1007 1008 第567位:g用户的权限 1009 1010 最后三位:o用户的权限 1011 1012 1)将最大权限赋予a.txt 1013 1014 chmod a+r+w+x a.txt 1015 1016 chmod 777 a.txt 1017 1018 2)设置a.txt权限,收回o用户的wx权限 1019 1020 chmod o-w-x a.txt 1021 1022 4)设置a.txt权限:u:rw g:r o:r 1023 1024 chmod 644 a.txt 1025 1026 5)设置hello文件夹权,给予最大权限(不影响子文件) 1027 1028 chmod 777 hello 1029 1030 6)设置hello文件夹权,给予最大权限(影响子文件) 1031 1032 chmod -R 777 hello 1033 1034 59、创建文件exer1,设置访问权限为rw-r--r--,现要增加所有用户的执行权限和同组用户的写权限,写出操作过程的命令(10分) 1035 1036 touch exer1 1037 1038 chmod 644 exer1 1039 1040 增加权限 1041 1042 chmod a+x exer1 1043 1044 chmod g+w exer1 1045 1046 或者 1047 1048 chmod 775 exer1 1049 1050 60易出现编码的地方 1051 1052 文件保存格式的编码 1053 <meta http-equiv=”content-type” content=”text/html;charset=utf-8”> 1054 Header(); 1055 Msq本身的编码(修改ini) 1056 Set names gbk; 1057 Mysql_query(“set names utf8”); 1058 Iconv()PHP的系统函数进行转码 1059 1060 61.PHP工作原理 1061 1062 一个网站运行时客户端有无数个,服务器通常只有一个(负载均衡) 1063 开发环境的安装2,PHP5.4,MYSQL5.3-------开源,可以跨平台 1064 配置文件:conf(Apache), php.ini my.ini 1065 PHP文档组成:HTML,css,js,jquery,PHP 1066 PHP语法风格:xml风格,短风格,ASP风格(已过时),脚本风格 1067 <?php ?>注意:位置任意,同一页面可以出现多次,不能嵌套,里面只能出现php代码,需要转字符串输出 1068 运行在服务器端 1069 注释:单行注释,多行注释 1070 1071 62数据类型: 1072 1073 标量类型:integer,Float,String,boolean 1074 复合类型:Array,Object 1075 特殊类型:Resource,Null 1076 伪类型:mixed,number,callback(回调函数) 1077 1078 63.PHP中被认为是false的值: 1079 1080 0, 0.0, null, 空数组, 空字符串, false 1081 1082 64.求两个日期的差数,例如2012-2-27 ~ 2013-05-6 的日期差数 1083 1084 <?php 1085 1086 function get_days($date1, $date2){ 1087 1088 $time1 = strtotime($date1); 1089 1090 $time2 = strtotime($date2); 1091 1092 return ($time2-$time1)/86400; 1093 1094 } 1095 1096 echo get_days("2013-05-6", "2012-2-27"); 1097 1098 ?> 1099 1100 65什么是MVC? 1101 1102 回答:MVC由Model(模型), View(视图)和Controller(控制器)组成,PHP MVC可以更高效地管理好3个不同层的PHP代码。 1103 1104 Model:数据信息存取层。 1105 1106 View:view层负责将应用的数据以特定的方式展现在界面上。 1107 1108 Controller:通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。 1109 1110 66.PHP中获取图像尺寸大小的方法是什么? 1111 1112 回答:getimagesize () 获取图片的尺寸 1113 1114 Imagesx () 获取图片的宽度 1115 1116 Imagesy () 获取图片的高度 1117 1118 67.如何在PHP中定义常量? 1119 1120 回答:PHP中使用Define () 来定义常量。 1121 1122 define (“Newconstant”, 30); 1123 68.如何不使用submit按钮来提交表单? 1124 1125 如果我们不想用submit按钮来提交表单,我们也可以用超链接来提交,我们可以这样写代码: 1126 1127 <a href=”javascript: document.myform.submit();”>Submit Me</a> 1128 69.简述论坛中无限分类的实现原理。 1129 1130 答:无限极分类,那么应该是考察递归函数吧! 1131 1132 第一步:建立测试数据库: 1133 1134 CREATE TABLE `category` ( `id` smallint(5) unsigned NOT NULL auto_increment, `fid` smallint(5) unsigned NOT NULL default '0', `value` varchar(50) NOT NULL default '', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; 1135 1136 1137 1138 第二步:插入测试数据: 1139 1140 INSERT INTO `category` ( `fid`, `value`) VALUES (0, 'PHP点点通博客PHPDDT.COM'), (1,'a'), (1,'b'), (2,'c'), (2,'d'), (4,'e') 1141 1142 第三步:递归输出分类: 1143 1144 70.试述isset()和empty()的区别 1145 1146 isset() 测试变量是否存在 empty() 测试变量是否为空 1147 1148 71.请用尽可能少的语句实现对输入Email地址进行验证的功能 1149 1150 eregi('^[_a-z0-9]+(/.[_a-z0-9-]+)*@[a-z0-9]+(/.[a-z0-9-]+)*$',$emailaddress) 1151 72.使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组 1152 1153 /冒泡排序(数组排序) 1154 1155 function bubble_sort($array) 1156 1157 { 1158 1159 $count = count($array); 1160 1161 if ($count <= 0) return false; 1162 1163 for($i=0; $i<$count; $i++){ 1164 1165 for($j=$count-1; $j>$i; $j–){ 1166 1167 if ($array[$j] < $array[$j-1]){ 1168 1169 $tmp = $array[$j]; 1170 1171 $array[$j] = $array[$j-1]; 1172 1173 $array[$j-1] = $tmp; 1174 1175 } 1176 1177 } 1178 1179 } 1180 1181 return $array; 1182 1183 } 1184 1185 //快速排序(数组排序) 1186 1187 function quick_sort($array) { 1188 1189 if (count($array) <= 1) return $array; 1190 1191 $key = $array[0]; 1192 1193 $left_arr = array(); 1194 1195 $right_arr = array(); 1196 1197 for ($i=1; $i<count($array); $i++){ 1198 1199 if ($array[$i] <= $key) 1200 1201 $left_arr[] = $array[$i]; 1202 1203 else 1204 1205 $right_arr[] = $array[$i]; 1206 1207 } 1208 1209 $left_arr = quick_sort($left_arr); 1210 1211 $right_arr = quick_sort($right_arr); 1212 1213 return array_merge($left_arr, array($key), $right_arr); 1214 1215 } 1216 1217 73、使用PHP描述顺序查找和二分查找(也叫做折半查找)算法,顺序查找必须考虑效率,对象可以是一个有序数组 1218 1219 //二分查找(数组里查找某个元素) 1220 1221 function bin_sch($array, $low, $high, $k){ 1222 1223 if ($low <= $high){ 1224 1225 $mid = intval(($low+$high)/2); 1226 1227 if ($array[$mid] == $k){ 1228 1229 return $mid; 1230 1231 }elseif ($k < $array[$mid]){ 1232 1233 return bin_sch($array, $low, $mid-1, $k); 1234 1235 }else{ 1236 1237 return bin_sch($array, $mid+1, $high, $k); 1238 1239 } 1240 1241 } 1242 1243 return -1; 1244 1245 } 1246 1247 //顺序查找(数组里查找某个元素) 1248 1249 function seq_sch($array, $n, $k){ 1250 1251 $array[$n] = $k; 1252 1253 for($i=0; $i<$n; $i++){ 1254 1255 if($array[$i]==$k){ 1256 1257 break; 1258 1259 } 1260 1261 } 1262 1263 if ($i<$n){ 1264 1265 return $i; 1266 1267 }else{ 1268 1269 return -1; 1270 1271 } 1272 1273 } 1274 1275 74.写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数 1276 1277 function array_sort($arr, $keys, $order=0) { 1278 1279 if (!is_array($arr)) { 1280 1281 return false; 1282 1283 } 1284 1285 $keysvalue = array(); 1286 1287 foreach($arr as $key => $val) { 1288 1289 $keysvalue[$key] = $val[$keys]; 1290 1291 } 1292 1293 if($order == 0){ 1294 1295 asort($keysvalue); 1296 1297 }else { 1298 1299 arsort($keysvalue); 1300 1301 } 1302 1303 reset($keysvalue); 1304 1305 foreach($keysvalue as $key => $vals) { 1306 1307 $keysort[$key] = $key; 1308 1309 } 1310 1311 $new_array = array(); 1312 1313 foreach($keysort as $key => $val) { 1314 1315 $new_array[$key] = $arr[$val]; 1316 1317 } 1318 1319 return $new_array; 1320 1321 } 1322 1323 75.utf-8转换成gbk的函数是? 1324 1325 iconv("gbk",""UTF-8,"我们"); mb_convert_encoding($str, "GBK", "UTF-8") 1326 1327 76.Php中分割字符串成数组的函数和连接数组成字符串的函分别有哪些? 1328 1329 explode() split() ;implode() join() 1330 77.说几个你知道的设计模式? 1331 1332 单例模式: 保证一个类仅有一个实例,并提供一个访问他的全局访问点例如框架中的数据库连接 1333 1334 简单工厂模式: 它具有创建对象的某些方法,可以使用工厂类创建对象,而不直接使用 new。例如初始化数据库的时候会用到,比如MySQL,MSSQL 1335 1336 策略模式: 针对一组算法,将每一个算法封装到具有共同接口的独立的类中,例如进入个人主页时,根据浏览者的不同,给予不同的显示与操作 1337 1338 注册模式: 提供了在程序中有条理的存放并管理一组全局对象 (object),例如ZF框架中的Zend_Registry::set 1339 1340 适配器模式: 将不同接口适配成统一的API接口,例如数据操作有mysql、mysqli、pdo等,可利用适配器模式统一接口 1341 1342 观察者模式: 一个对象通过添加一个方法使本身变得可观察。当可观察的对象更改时,它会将消息发送到已注册的观察者。例如实现实现消息推送 1343 1344 装饰器模式: 不修改原类代码和继承的情况下动态扩展类的功能,例如框架的每个Controller文件会提供before和after方法 1345 1346 迭代器模式: 提供一个方法顺序访问一个聚合对象中各个元素,在PHP中将继承 Iterator 类 1347 1348 原型模式: 实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。 1349 1350 78.echo,print(),print_r(),printf(),sprintf(),var_dump()有什么区别? 1351 1352 echo :是语句不是函数,没有返回值,可输出多个变量值,不需要圆括号。不能输出数组和对象,只能打印简单类型(如int,string) 1353 1354 print :是语句不是函数,有返回值 1 ,只能输出一个变量,不需要圆括号。不能输出数组和对象,只能打印简单类型(如int,string)。 1355 1356 print_r 1357 1358 :是函数,可以打印复合类型,例如:stirng、int、float、array、object等,输出array时会用结构表示,而且可以通过print_r($str,true)来使print_r不输出而返回print_r处理后的值 1359 1360 printf :是函数,把文字格式化以后输出(参看C语言) 1361 1362 sprintf :是函数,跟printf相似,但不打印,而是返回格式化后的文字,其他的与printf一样。 1363 1364 var_dump :函数,输出变量的内容、类型或字符串的内容、类型、长度。常用来调试。 1365 1366 79.echo count(“abc”); 输出什么? 1367 1368 答案:1 1369 1370 写个函数用来对二维数组排序。 1371 1372 答案:array_multisort() 。 1373 1374 81.对于大流量的网站,您采用什么样的方法来解决访问量问题? 1375 1376 首先,确认服务器硬件是否足够支持当前的流量。 1377 1378 其次,优化数据库访问。 1379 1380 第三,禁止外部的盗链。 1381 1382 第四,控制大文件的下载。 1383 1384 第五,使用不同主机分流主要流量 1385 1386 第六,使用流量分析统计软件。 1387 1388 82.error_reporting(2047)什么作用? 1389 1390 答案:相当于 error_reporting(‘E_ALL’); 输出所有的错误。 1391 1392 83、 简述如何得到当前执行脚本路径,包括所得到参数。 1393 1394 访问http://temp.com/phpinfo.php?id=1 1395 1396 echo $_SERVER['SCRIPT_URL']; //得到/phpinfo.php 1397 1398 echo $_SERVER["SCRIPT_URI"]; //得到http://temp.com/phpinfo.php 1399 1400 echo $_SERVER["SCRIPT_FILENAME"]; //得到F:/www/Temp/phpinfo.php 1401 1402 echo $_SERVER["REQUEST_URI"]; //得到/phpinfo.php?id=1 1403 1404 echo $_SERVER["SCRIPT_NAME"]; //得到/phpinfo.php 1405 1406 参考server.php http://lesson.com/test/server.php?id=1 1407 1408 写出session的运行机制。 1409 1410 session创建时,是否会在服务端记录一个cookie?cookie里面的内容是什么? 1411 1412 session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。 1413 1414 当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识-称为sessionid,如果已包含一个sessionid则说明以前已经为此客户端创建过session,服务器就按照sessionid把这个session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含sessionid,则为此客户端创建一个session并且生成一个与此session相关联的sessionid,sessionid的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个sessionid将被在本次响应中返回给客户端保存。_ 1415 1416 保存这个sessionid的方式可以采用cookie,这样在交互过程中浏览器可以自动的按照规则把这个标识发给服务器。一般这个cookie的名字都是类似于SEEESIONID。r 1417 1418 由于cookie可以被人为的禁止,必须有其他机制以便在cookie被禁止时仍然能够把sessionid传递回服务器。经常被使用的一种技术叫做URL重写,就是把sessionid直接附加在URL路径的后面,附加方式也有两种,一种是作为URL路径的附加信息,表现形式为http://…../xxx;SEEESIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764比 1419 1420 另一种是作为查询字符串附加在URL后面,表现形式为http://…../xxx?SEEESIONID=ByOK3vjFD75aPnrF7C2HmdnV6QZcEbzWoWiBYEnLerjQ99zWpBng!-145788764参 1421 1422 为了在整个交互过程中始终保持状态,就必须在每个客户端可能请求的路径后面都包含这个SEEESIONID。 1423 1424 85.Cookie的原理及使用? 1425 1426 Cookie是网站保存在浏览器客户端的信息,也就是说保存在访客的机器里的变量,一般随着HTTP头发送到服务器端。在Cookie生效之后及失效之前,客户每次发出页面请求的时候(包括PHP页面和静态html页面),都会把Cookie一块发送到服务器,只要我们针对它进行相应的处理,就可以实现变量”追随”。到 1427 1428 86.Form中的get和post方法,在数据传输过程中分别对应了HTTP协议中的GET和POST方法。二者主要区别如下: 1429 1430 a、Get是用来从服务器上获得数据,而Post是用来向服务器上传递数据。 1431 1432 b、Get将表单中数据的按照variable=value的形式,添加到action所指向的URL后面,并且两者使用”?”连接,而各个变量之间使用”&”连接;Post是将表单中的数据放在form的数据体中,按照变量和值相对应的方式,传递到action所指向URL。u 1433 1434 c、Get是不安全的,因为在传输过程,数据被放在请求的URL中,而如今现有的很多服务器、代理服务器或者用户代理都会将请求URL记录到日志文件中,然后放在某个地方,这样就可能会有一些隐私的信息被第三方看到。另外,用户也可以在浏览器上直接看到提交的数据,一些系统内部消息将会一同显示在用户面前。Post的所有操作对用户来说都是不可见的。而 1435 1436 d、Get传输的数据量小,这主要是因为受URL长度限制;而Post可以传输大量的数据,所以在上传文件只能使用Post(当然还有一个原因,将在后面的提到)。 1437 1438 e、Get限制Form表单的数据集的值必须为ASCII字符;而Post支持整个ISO10646字符集。 1439 1440 f、Get是Form的默认方法。 1441 1442 *.Post传输数据时,不需要在URL中显示出来,而Get方法要在URL中显示。 1443 1444 *.Post传输的数据量大,可以达到2M,而Get方法由于受到URL长度的限制,只能传递大约1024字节. 1445 1446 .Post顾名思义,就是为了将数据传送到服务器段,Get就是为了从服务器段取得数据.而Get之所以也能传送数据,只是用来设计告诉服务器,你到底需要什么样的数据.Post的信息作为http请求的内容,而Get是在Http头部传输的。提 1447 1448 87.PHP5中魔术方法函数有哪几个,请举例说明各自的用法 1449 1450 __sleep 1451 1452 __wakeup 1453 1454 __toString 1455 1456 __set_state 1457 1458 __construct, 1459 1460 __destruct 1461 1462 __call, 1463 1464 __get, 1465 1466 __set, 1467 1468 __isset, 1469 1470 __unset 1471 1472 __clone 1473 1474 __autoload 1475 1476 isset()和empty()的区别 1477 1478 两者都是测试变量用的。但是isset()是 测试变量是否被赋值 ,而empty()是测试 一个已经被赋值的变量是否为空 1479 1480 。如果一个变量没被赋值就引用在php里是被允许的,但会有notice提示。如果一个变量被赋空值,$foo=””或者$foo=0或者$foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。要注销一个变量,可以用d 1481 1482 unset($foo)或者$foo=NULL。 1483 1484 89.以下哪一句不会把 John 新增到 users 阵列? 1485 1486 $users[] = ‘john’; 1487 1488 成功把 John 新增到阵列 users。 1489 1490 array_add($users,’john’); 1491 1492 函式 array_add() 无定义。 1493 1494 array_push($users,‘john’); 1495 1496 成功把 John 新增到阵列 users。 1497 1498 $users ||= ‘john’; 1499 1500 语法错误。 1501 1502 90.以下哪一个函式可以把浏览器转向到另一个页面? 1503 1504 redir()这不是一个 PHP 函式,会引致执行错误。 1505 1506 header()这个是正确答案,header() 用来插入卷头资料,可以用来使浏览器转向到另一个页面,例如: 1507 1508 header(“Location: http://www.phpmst.com/”); 1509 1510 location()这不是一个 PHP 函式,会引致执行错误。 1511 1512 redirect()这不是一个 PHP 函式,会引致执行错误。 1513 1514 91.PHP中的非静态方法可以通过静态调用吗,反之呢? 1515 1516 其实问题是问没有通过static定义的方法,能否通过”对象名::方法名“这样的形式来调用。答案是会产生一个strict错误,但在会继续执行代码。 1517 1518 反之,能否通过“对象名->方法名“的形式来调用static定义的方法?答案是不能,会出错并中断程序执行。 1519 1520 92.使用utf-8编码,以下代码输出结果是什么?strlen函数是计算字符串的字节数还是字符数? 1521 1522 $str = “您好hello”; 1523 1524 答案:echo strlen($str); 1525 1526 11 strlen() 函数返回字符串的长度。 1527 1528 93..什么是时间戳?时间戳能代表的最小年份和最大年份是多少? 1529 1530 答案:(格林威治时间 1970 年 1 月 1 日 00:00:00)到当前时间的秒数。 1531 1532 有效的时间戳典型范围是格林威治时间 1901 年 12 月 13 日 20:45:54 到 2038 年 1 月 19 日 03:14:07。(此范围符合 1533 1534 32 位有符号整数的最小值和最大值)。 1535 1536 不过在 PHP 5.1 之前此范围在某些系统(如 Windows)中限制为从 1970 年 1 月 1 日到 2038 年 1 月 19 日。 1537 1538 MyISAM与innoDB存储引擎有何差别? 1539 1540 答案:A、两者在文件构成上有区别; 1541 1542 B、InnoDB支持事务处理,MyISAM不支持; 1543 1544 C、对无WHERE子句的COUNT(*)操作的不同:MyISAM中保存了该值,直接读取,InnoDB需要作全表扫描; 1545 1546 D、锁的区别:InnoDB支持表级锁和行级锁,MyISAM只支持表级锁; 1547 1548 E、索引会缓存数据,而MYISAM不会; 1549 1550 F、INNODB不区分char和varchar; 1551 1552 G、INNODB支持hash索引,而MYISAM不支持; 1553 1554 H、InnoDB不支持FULLTEXT类型的索引; 1555 1556 I、InnoDB 中不保存表的具体行数,也就是说,执行select count(*) from 1557 1558 table时,InnoDB要扫描一遍整个表来计算有多少行,但是MyISAM只要简单的读出保存好的行数即可。注意的是,当count(*)语句包含 1559 1560 where条件时,两种表的操作是一样的; 1561 1562 J、对于AUTO_INCREMENT类型的字段,InnoDB中必须包含只有该字段的索引,但是在MyISAM表中,可以和其他字段一起建立联合索引; 1563 1564 K、DELETE FROM table时,InnoDB不会重新建立表,而是一行一行的删除; 1565 1566 L、LOAD TABLE FROM 1567 1568 MASTER操作对InnoDB是不起作用的,解决方法是首先把InnoDB表改成MyISAM表,导入数据后再改成InnoDB表,但是对于使用的额外的InnoDB特性(例如外键)的表不适用。 1569 1570 95..如何记录php程序错误至系统日志? 1571 1572 答案:将PHP的log_errors开启即可,默认是记录到WEB服务器的日志文件里,比如Apache的error.log文件。 1573 1574 当然也可以记录错误日志到指定的文件中。 1575 1576 代码如下: 1577 1578 # vim /etc/php.inidisplay_errors = Off 1579 1580 log_errors = On 1581 1582 error_log = /var/log/php-error.log 1583 1584 另外也可以设定error_log = syslog,使这些错误信息记录到操作系统的日志里。 1585 1586 display_errors = Off //不显示错误 1587 1588 error_reporting 设定错误讯息回报的等级 1589 1590 96.用最少的代码写一个求3值最大值的函数. 1591 1592 答案: function($a,$b,$c){ 1593 1594 return $a>$b? ($a>$c? $a : $c) : ($b>$c? $b : $c ); 1595 1596 } 1597 1598 97.在PHP中,heredoc是一种特殊的字符串,它的结束标志必须?(1分) 1599 1600 答:heredoc的语法是用”<<<”加上自己定义成对的标签,在标签范围內的文字视为一个字符串 1601 1602 例子: 1603 1604 $str = <<<SHOW 1605 1606 my name is Jiang Qihui! 1607 1608 SHOW; 1609 1610 1611 98.字符串函数 1612 1613 chr — 通过ASCII码值返回指定的字符 1614 1615 ord — 通过指定的字符返回ASCII码值 1616 1617 explode — 使用一个字符串分割另一个字符串 1618 1619 implode — 将一个一维数组的值转化为字符串 1620 1621 join — 别名implode 1622 1623 htmlspecialchars — 把预定义的字符转换为HTML实体(比如说大于小于) 1624 1625 nl2br — 在字符串所有新行之前插入HTML换行标记 1626 1627 strip_tags — 从字符串中去除 HTML 和 PHP 标记 1628 1629 lcfirst — 使一个字符串的第一个字符小写 1630 1631 ucfirst — 将字符串的首字母转换为大写 1632 1633 ucwords — 将字符串中每个单词的首字母转换为大写 1634 1635 md5 — 加密,返回32位的字符串 1636 1637 sha1 — 加密,返回40位的字符串 1638 1639 number_format — 以千位分隔符方式格式化一个数字 1640 1641 trim — 去除字符串首尾处的空白字符(或者其他字符) 1642 1643 ltrim — 删除字符串开头的空白字符(或其他字符) 1644 1645 rtrim — 删除字符串末端的空白字符(或者其他字符) 1646 1647 chop — rtrim 的别名 1648 1649 str_replace — 子字符串替换 1650 1651 str_ireplace — str_replace的忽略大小写版本 1652 1653 str_pad — 使用另一个字符串填充字符串为指定长度 1654 1655 str_repeat — 重复一个字符串 1656 1657 str_shuffle — 随机打乱一个字符串 1658 1659 str_split — 将字符串转换为数组 1660 1661 strstr — 查找字符串的首次出现 1662 1663 strchr — 别名 strstr 1664 1665 stristr — strstr 函数的忽略大小写版本 1666 1667 strrchr — 查找指定字符在字符串中的最后一次出现 1668 1669 strpos — 查找字符串首次出现的位置 1670 1671 stripos — 查找字符串首次出现的位置(不区分大小写) 1672 1673 strripos — 计算指定字符串在目标字符串中最后一次出现的位置(不区分大小写) 1674 1675 strrpos — 计算指定字符串在目标字符串中最后一次出现的位置 1676 1677 strlen — 获取字符串长度 1678 1679 strrev — 反转字符串 1680 1681 strtolower — 将字符串转化为小写 1682 1683 strtoupper — 将字符串转化为大写 1684 1685 substr — 截取字符串 1686 99.数组函数 1687 1688 答案: 1689 1690 array_shift — 将数组开头的单元移出数组 1691 1692 array_pop — 将数组最后一个单元弹出(出栈) 1693 1694 array_unshift — 在数组开头插入一个或多个单元 1695 1696 array_push — 将一个或多个单元压入数组的末尾(入栈) 1697 1698 array_keys — 返回数组中部分的或所有的键名 1699 1700 array_values — 返回数组中所有的值 1701 1702 in_array — 检查数组中是否存在某个值 1703 1704 array_key_exists — 检查给定的键名或索引是否存在于数组中 1705 1706 key_exists — 别名 array_key_exists 1707 1708 array_rand — 从数组中随机取出一个或多个单元 1709 1710 array_reverse — 返回一个单元顺序相反的数组 1711 1712 array_unique — 移除数组中重复的值 1713 1714 array_merge — 合并一个或多个数组 1715 1716 count — 计算数组中的单元数目或对象中的属性个数 1717 1718 sizeof — count 的别名 1719 1720 array_sum — 计算数组中所有值的和 1721 1722 array_flip — 交换数组中的键和值 1723 1724 array_count_values — 统计数组中所有的值出现的次数 1725 1726 shuffle — 将数组打乱 1727 1728 reset — 将数组的内部指针指向第一个单元 1729 1730 prev — 将数组的内部指针倒回一位 1731 1732 current — 返回数组中的当前单元 1733 1734 pos — current 的别名 1735 1736 each — 返回数组中当前的键/值对并将数组指针向前移动一步 1737 1738 next — 将数组中的内部指针向前移动一位 1739 1740 end — 将数组的内部指针指向最后一个单元 1741 1742 1743 1744 sort — 对数组排序 1745 1746 rsort — 对数组逆向排序 1747 1748 asort — 对数组进行排序并保持索引关系 1749 1750 arsort — 对数组进行逆向排序并保持索引关系 1751 1752 ksort — 对数组按照键名排序 1753 1754 krsort — 对数组按照键名逆向排序 1755 1756 compact — 建立一个数组,包括变量名和它们的值 1757 1758 range — 快速创建数组 1759 1760 单例模式,创建mysqli数据库链接的单例对象 1761 1762 class Db 1763 1764 { 1765 1766 private static $instance; 1767 1768 public $handle; 1769 1770 private function __construct($host, $username, $password, $dbname) 1771 1772 { 1773 1774 $this->handle = NULL; 1775 1776 $this->getcon($host, $username, $password, $dbname); 1777 1778 } 1779 1780 public static function getBb() 1781 1782 { 1783 1784 self::$instance = new Db(); 1785 1786 1787 1788 return self::$instance; 1789 1790 } 1791 1792 private function getcon($host, $username, $password, $dbname) 1793 1794 { 1795 1796 if($this->handle!=NULL){ 1797 1798 return true; 1799 1800 } 1801 1802 $this->handle = mysqli_connect($host, $username, $password, 1803 1804 $dbname); 1805 1806 } 1807 1808 }