PHP中常见的面试题4,附答案

1. echo count(“abcd”);输出多少?

答案:1

2. 运行以下代码后$a $b $c 分别是?

<?php
    $a=$b=$c=0;
    $a=$b && $c;

答案:false、0、0

4. 请用php的heredoc语法格式输出:hello world!

<?php
      $v=”hello world”;
      $str=<<<EOT
      $v
EOT;
echo $str;

5. $string = "abcdefg",那么$string{4}的值是?

答案:e

6. 简述echo(),print(),print_r()的区别。

答案:echo()可以一次输出多个值,多个值之间用逗号分隔。echo是语言结构,而不是真正的函数,因此不能作为表达式的一部分使用。

print()是一个函数,用来打印一个值,如果字符串成功显示则返回true,否则返回false

print_r()是一个函数,用来打印一个值,值为字符串或数字进行简单打印,而数组则以括起来的键和值列表形式显示,并以Array开头。

拓展:var_dump()是一个函数,用来显示关于一个或多个表达式的结果信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构。

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

客户端IP:echo $_SERVER[‘REMOTE_ADDR’];

或者echo getenv(‘REMOTE_ADDR’);

服务器IP:echo $_SERVER[‘SERVER_ADDR’];

或者echo getenv(‘SERVER_ADDR’);

8、用正则表达式判断$a是否是一个以半角逗号分隔的多个手机号码组成的字符串,是输出yes

<?php
      $math=“/((\d){11},)+/”;
      $str=”12345678901,12345678901”;
      if(preg_match($match,$str)){
        echo ‘yes’;
    }
?>  

9. 请定义一个名为MyClass的类,这个类只有一个静态方法justDoIt。

class MyClass
{
      public static function justDoIt()
      {

      }
}

11. 写出你知道的几种设计模式,并用php代码实现其中一种。

答案:单态模式、工厂模式、生成器模式、代理模式、迭代模式
单态模式举例:
class test{
      private static $obj=null;
      private function __construct(){
            echo ‘第一次连接数据库’;
    }
 
    public static function getInstance(){
           if(is_null(self::$obj)){
               self::$obj=new self();
               return self::$obj;
         }
     }
}

12. 打开php.ini中的Safe_mode,会影响哪些函数?

答案: chown()、chgrp()、chdir()、fopen()、rmdir()、copy()、link()、exec()

13. 请描述如下URL重写规则的用意。

<IfModule mod_rewrite.c>

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteBase /

RewriteRule . /index.php [L]

</IfModule>

答案:将URL地址强制解析为./index.php

14. 你会用哪个函数设置当前内容的Content-Type?

header函数

//定义编码

header(“Content-type:text/html;charset=utf-8”);

//CSS

header(“Content-type:text/css”);

//JavaScript

header(“Content-type:text/javascript”);

//JPEG Image

header(“Content-type:image/jpeg”);

//GIF Image

header(“Content-type:image/gif”);

//PNG Image

header(“Content-type:image/png”);

//JSON

header(“Content-type:application/json”);

//PDF

header(“Content-type:application/pdf”);

//XML

header(“Content-type:text/xml”);

//ok

header(“HTTP/1.1 200 OK”);

//404

header(‘HTTP/1.1 404 Not Found’);

//设置地址被永久的重定向

header(‘HTTP/1.1 301 Moved Permanently’);

//转到一个新地址

header(‘Location:http://www.example.org/’);

//文件延迟转向

header(‘Refresh:10;url=http://www.example.org/’);

print‘You will be redirected in 10 seconds’;

//纯文本格式

header(‘Content-type:text/plain’);

15. Warning: Cannot modify header information - headers already sent by (output started at D:\src\init.php:7) in D:\src\init.php on line 10 通常什么情况下php会报该警告信息?

答案:header(‘Content-type:text/html;charset=utf-8’)头之前有任何输出均会出现如下错误。

16. A通过页面输入用户名abc和密码123登录到www.10086.cn,请写出该次请求的HTTP协议报文(包括请求行、消息报头、请求正文)。

答案:

Post /login HTTP/1.1

============

host: www.10086.cn

Content-Type: application/x-www-form-urlencoded

User-Agent: Mozilla/5.0(Windows;U;Windows NT 5.1;en-US;rv:1.7.6)

Content-length: 25

Refer: www.10086.cn

============

Username=abc&password=123

17. 写一段php代码遍历某个目录下的所有文件和子文件夹。

<?php
      function scandir($path){
        $files = array();
        $handle = opendir($path);
        if ($filename=@readdir($handle)) {
            if ($filename==’.’ || $filename==’..’) {
                continue;
            }
            if (is_dir($filename)){
                $files[$filename] = scandir($path.’/’.$filename);
       } else {
            $files[$filename] = $filename;
       }
      }
        return $files;
   }
?>

18. 查看磁盘空间使用率的linux命令是什么?查看有哪些系统进程正在运行命令是什么?监测linux性能(cpu,磁盘io,内存,网络等)都用到哪些命令?

答案:df、ps、top

19. linux下终止一个进程用什么命令?打包压缩和解包用什么命令?建立软连接的命令是?

答案:

pkill -9进程名或kill 进程号、

tar zcvf和tar zxvf

ln

20. 如果要求每隔5分钟执行一次脚本five.php,如何实现?

答案:crontab –e

*/5 * * * * php five.php

21. mysql中varchar的最大长度是多少?用什么类型的字段存储大文本?date和datetime和timestamp什么区别?怎么看数据库中有哪些sql正在执行?

答案:

65535

text

区别:

1.存储空间不同

a) TIMESTAMP占用4个字节

b) DATETIME占用8个字节

2.受时区影响

a) TIMESTAMP实际记录的是1970-01-01 00:00:01到现在的数,受时区影响

b) DATETIME不受时区影响

3.时间范围不同

a) TIMESTAMP的时间范围是:'1970-01-01 00:00:01' UTC ~ '2038-01-19 03:14:07' UTC

b) DATETIME的时间范围是:'1000-01-01 00:00:00' ~ '9999-12-31 23:59:59'

4.自动更新

TIMESTAMP类型在默认情况下,insert、update 数据时,TIMESTAMP列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。

show processlist;

22. MySQL数据库的一个表:User

Name Tel Content Date

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

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

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

写出如下操作的SQL语句:

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

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

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

答案:

(a)inser into User(Name,Tel,Content,Date) values(“小王”,12354748547,”高中毕业”,”2007-05-06”);

(b)update User set Date=date(now()) where User=”张三”;

(c)delete from User where User=”张三”;