• 面试题(php部分)


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

    【答案】

    $a = date("Y-m-d H:i:s", strtotime("-1 day"));

    print_r($a);

    【备注】

    strtotime的参数还可以是:

    echo date("Y-m-d H:i:s", strtotime("-1 year +1 week 1 month -1 hour -3 days +10 second"));

    echo date("Y-m-d H:i:s", strtotime("last monday +3 days"));

    strtotime("now");

    【备注】

    date和strtotime参数的字符串可以用双引号也可以用单引号,结果一样。

    2、$a = true and false; var_dump($a)写出结果

    【答案】

    bool(true)

    【原因】运算符的优先级别问题,赋值运算符=的优先级高于and、or逻辑运算符,所以先执行赋值,然后再做and逻辑运算。所以$a的值是true。

    【注意】如果是echo $a;那么结果是 1,因为echo对于bool型,true会打印1,false打印的结果为空,就是没任何打印,注意这里不是打印0。

    3、isset、empty和is_null的区别

    【答案】

    1)isset和empty是语言结构,is_null是函数

    2)isset和empty是先判断变量是否存在,然后再判断值;is_null是直接判断值是否为null。

    3)未定义变量、0、null、false、空数组和空字符串,empty返回true;

    4)isset是判断变量是否定义了,null和未定义变量都返回false;

    5)is_null判断变量的值是否为null,如果是未定义的变量回返回notice报错“变量未定义“

    【注意】$a = null ; var_dump(isset($a))返回false,因为变量值为null。is_null(0)和is_null("")和is_null(false)都是返回false。

    4、$str = “”,  $a = explode(‘,’, $str), $b = empty($a); $b的值是true还是false

    【答案】false。

    【原因】

    explode的函数说明(参考:http://php.net/manual/zh/function.explode.php):

    当目标字符串无法分割时,返回结果就是一个只有一个元素的数组,该元素的值比如$a[0]的值就是目标字符串的值,哪怕目标字符串是空串。

    【运行实例】

    $str = "";

    $a = explode(',', $str);

    var_dump($a);

    if(empty($a)){

            echo "true , empty ";

    }else{

            echo "false , not empty ";

    }

    结果输出:

    array(1) {

      [0]=>

      string(0) ""

    }

    false , not empty

    【注意】上面输出的$a 并不等于 array()空数组。var_dump(array())输出:

    array(0) {
    }

    【注意】如果题目中$str为null呢,结果又如何?

    $str = null;
    $a = explode(",", $str);
    $b = empty($a);
    var_dump($a);
    var_dump($b);

    【结果】

    array(1) {
    [0]=>
    string(0) ""
    }
    bool(false)

    【分析】结果没变,原因是null在explode函数的参数传入时临时参数是被转化为空串。

    5、$str = 1,echo “$str”, ‘$str’, “\$str”, “${str}”, “$str”.”$str”, “$str”+”$str”;

    【答案】

     

    6、http 500错误码会是什么情况?

    参考:http://www.cnblogs.com/huqiang/p/5333975.html

    【答案】

    1web脚本错误:php代码有语法错误;

    2)访问量大的时候,由于系统资源限制,不能打开太多的文件;

    3nginx配置的问题:比如rewrite的规则写的有问题,导致不停rewrite(死循环)也会报错500

    7、写一个function遍历一个路径下的所有文件夹和文件

    【答案】

    <?php
    function getAllFiles($path){
    
            $result = array();
            $handle = opendir($path);
            if($handle){
                    while(($file = readdir($handle))!== false){
                            if($file != '.' && $file != '..'){
                                    $cur_path = $path . '/'. $file;
                                    if(is_dir($cur_path)){
                                            $result[$path][$cur_path] = getAllFiles($cur_path);
                                    }else{
                                            $result[$path]['file'][] = $file;
                                    }
                            }
                    }
                    closedir($handle);
            }
    
            return $result;
    }
    
    $dir = '/tmp';
    $res = getAllFiles($dir);
    print_r($res);
    
    【打印的结果】
    Array
    (
        [/tmp] => Array
            (
                [file] => Array
                    (
                        [0] => 1.php
                        [1] => php-cgi.sock
                        [2] => mysql.sock
                        [3] => timesync.log
                        [4] => 2.php
                        [5] => test.php
                    )
                [/tmp/.ICE-unix] => Array
                    (
                    )
            )
    )
    

      

    8、描述下session机制,多台服务器的情况下session如何保存?

    【参考答案】

    9、如何获取客户端ip、服务端ip和query string?

    【答案】

    客户端ip: $_SERVER['REMOTE_ADDR']

    服务端ip:$_SERVER['SERVER_ADDR']

    query string: $_SERVER['QUERY_STRING']

    URI:$_SERVER['REQUEST_URI']

    执行的脚本名称:$_SERVER['PHP_SELF']

    10、正则表达式匹配电子邮箱

    【参考答案】

    $pattern = "/^[a-z]([a-z0-9]*[-_.]?[a-z0-9]+)+@[a-z]([a-z0-9]*[-_.]?[a-z0-9]+)+.[a-z]{2,3}$i";

    preg_match($pattern, $email);

    【分析】

    /^表示这就是开头

    $/表示这是结尾

    i表示不区分大小写

    .表示句点,需要转义的

    这里的$pattern变量是以字母开头,然后中间可以有一个或多个- _ . 符号,然后@前必须是字母或者数字

    @后是可以有数字或- _ . 构成的域名一部分,然后是.com 或.cn这种结尾就是要匹配2-3个字母结尾。

    11、移动数组的指针的函数

    【答案】

    each()

    prev()

    next()

    end()

    reset()

    12、PHP设置脚本最大执行时间的三种方法

    1、在php.ini里面设置

    max_execution_time = 120;

    2、通过PHP的ini_set函数设置

    ini_set("max_execution_time", "120");

    3、通过set_time_limit 函数设置

    set_time_limit(120);

    以上几个数字设置为0则无限制,脚本会一直执行下去,直到执行结束。

    所以,需要长时间执行的脚本,一般在php代码开头处添加如下代码就可以了
    set_time_limit(0);

    13、isset、in_array、array_search和array_key_exists对比

    【参考】对比4个函数 isset in_array array_search array_key_exists 速率对比及初步分析原因

    【答案】

    isset最快,因为isset是语言结构不是函数,所以减少函数调用的开销;

    array_key_exists第二快,因为该函数是判断key是否存在,而array的key是hash排序的,所以快。

    in_array和array_search都是查找元素是否存在,就是查询值,而不是查询key,所以慢一些。这两者之间的速度相差无几。

  • 相关阅读:
    数据库与数据仓库的比较Hbase——Hive
    log4j 配置使用
    hadoop Datanode Uuid unassigned
    kafka相关文章引用
    kafka可靠性
    kafka基本原理
    html
    并发编程
    Python之系统交互(subprocess)
    网络编程
  • 原文地址:https://www.cnblogs.com/guangye/p/7477913.html
Copyright © 2020-2023  润新知