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 
 626sort() 一样把阵列的元素按英文字母顺序来排列,不同的是所有索引键都获得保留,特别适合替联想阵列排序。
 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     标量类型:integerFloatStringboolean
1074     复合类型:ArrayObject
1075     特殊类型:ResourceNull
1076     伪类型:mixednumbercallback(回调函数)
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.echoprint(),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、floatarray、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=NULL1483 
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 choprtrim 的别名
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 stristrstrstr 函数的忽略大小写版本
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 sizeofcount 的别名
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 poscurrent 的别名
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 }

 

posted @ 2018-05-15 10:58  huohuohiahia  阅读(1708)  评论(0编辑  收藏  举报