作为程序员一定要保持良好的睡眠,才能好编程

php面试题全面解析(2)

发布时间:2019-04-08


1117.rar




问题:

    1、echo() print() 和print_r()的区别

        答:echo是语言结构 ,无返回值;print()功能和echo基本相同 不同的是 print有返回值,返回值总是1

                print_r是递归打印,用户输出数组对象,永远返回true

    2、如何实现字符串的翻转?

        strrev()  如果不准用PHP内置函数,那就自己实现一个


       function str_fanzhuan($_str){
            $len=strlen($_str);
            $_newStr="";
            for($i=$len;$i>=0;$i--){
                $_newStr.=$_str[$i];
            }
            return $_newStr;
        }

        这就实现了字符串的翻转。


    

    3、写出中文字符截取无乱码的方法

            mb_substr()


    4、使用PHP写一段简单的查询,查出所有姓名中为张三的内容并打印出来。

         解题步骤:

            1、连接数据库   指定数据库

            2、指定查询字符集

            3、简单的查询语句

            4、遍历整个查询结果

            5、关闭结果集  关闭数据库连接

            

 header("Content-type:text/html;charset=utf-8");
    define("HOST","127.0.0.1");
    define("USER","root");
    define("PASS","song");
    define("DB","newcimie");
    
    
    $mysqli=new mysqli(HOST,USER,PASS,DB);
    
    if(mysqli_connect_errno()){    
        echo mysqli_connect_error();
        echo "数据库连接错误";
        exit;        
    }
    
    print_r($mysqli->client_info);
    
    echo "<hr>";
    
    print_r($mysqli->field_count);
    echo "<hr>";
    
    print_r($mysqli->server_info);
    echo "<hr>";
    print_r($mysqli->host_info);
    
    echo "<hr>";
    exit;
    
    $mysqli->set_charset("utf8");    
    $sql="select id,title from web_ads";
    $res=$mysqli->query($sql);
    $_data=[];    
    if($res){        
        while($_obj=$res->fetch_object()){
            $_data[]=$_obj;
        }        
    }    
    $res->close();
    $mysqli->close();
    print_r($_data);

    


    

$conn=mysql_connect("127.0.0.1:3306","root","song");
if(!$conn){
echo "数据库连接错误";
echo mysql_error();
exit;
}
mysql_select_db("test");
mysql_query("set names utf8");
$_res=mysql_query("select * from web_aa");
$_data=array();
if($_res){
while($_obj=mysql_fetch_object($_res)){
$_data[]=$_obj;
}
}
echo mysql_num_rows($_res);
mysql_free_result($_res); //释放结果集内存
mysql_close();
print_r($_data);
/*
mysql_affected_rows() 返回上次sql语句影响的条数
mysql_last_id() 返回上一步 INSERT 操作产生的 ID
mysql_query($sql) — 发送一条 MySQL 查询
mysql_result($_res) — 取得结果数据
mysql_select_db("test") — 选择 MySQL 数据库
mysql_set_charset("utf8") — 设置客户端的字符集
*/

    

    5、mysql_pconnect 和mysql_connnect() 的区别

        当连接的时候,本函数先尝试寻找在同一个主机上用同样用户名和密码打开的(持久)连接,如果找到,则返回此连接表示,而不打开新连接。其次当脚本执行完毕后,到sql服务器的连接不会被关闭。此连接将保持打开状态以备以后使用(mysql_close()不会关闭由 mysql_pconnect() 打开的连接)

    

    6、请看下面代码,并写出 b.php得到的结果

<!DOCTYPE html>
<html>
<head>
    <title>我是页面 a </title>
</head>
<body>
            
    <form action="b.php" method="get">
            
            <input type="text" name="a" />
            <input type="submit" value="提交">
    </form>    
</body>
</html>


b.php
<?php
        
    var_dump($_POST['c']);
    echo "<hr>";
    var_dump($_POST['a']);
    
?>

请问  $_POST['c'] 的结果是什么  ?   $_POST['a'] 的结果又是什么


答案: $_POST['c'] 结果 NULL    $_POST['a'] 结果 NULL

            并会提示 Notice:  Undefined index: c in 的一个错误提示

 

    7、错误提醒级别:

        

        error_reporting(0);   //关闭所有的PHP错误


    // 关闭所有PHP错误报告    
    error_reporting(0);
    // Report simple running errors
    error_reporting(E_ERROR | E_WARNING | E_PARSE);
    // 报告 E_NOTICE也挺好 (报告未初始化的变量
    
    // 或者捕获变量名的错误拼写)
    error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
    
    // 除了 E_NOTICE,报告其他所有错误
    error_reporting(E_ALL ^ E_NOTICE);
   
    // 报告所有 PHP 错误 (参见 changelog)
    error_reporting(E_ALL);
    // 报告所有 PHP 错误
    error_reporting(-1);
    
    // 和 error_reporting(E_ALL); 一样
    ini_set('error_reporting', E_ALL);
    
    
    error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED);
    1 E_ERROR 致命的运行时错误
2 E_WARNING 运行时警告(非致命性错误)
4 E_PARSE 编译时解析错误
8 E_NOTICE 运行时提醒(经常是bug,也可能是有意的)
16 E_CORE_ERROR PHP启动时初始化过程中的致命错误
32 E_CORE_WARNING PHP启动时初始化过程中的警告(非致命性错)
64 E_COMPILE_ERROR 编译时致命性错
128 E_COMPILE_WARNING 编译时警告(非致命性错)
256 E_USER_ERROR 用户自定义的致命错误
512 E_USER_WARNING 用户自定义的警告(非致命性错误)
1024 E_USER_NOTICE 用户自定义的提醒(经常是bug,也可能是有意的)
2048 E_STRICT 编码标准化警告(建议如何修改以向前兼容)


        

    8、PHP的八大类型

        四种标量类型:
            boolean (布尔型)
            integer (整型)
            float (浮点型, 也称作 double)
            string (字符串)
        两种复合类型:
            array (数组)
            object (对象)
        最后是两种特殊类型:
            resource (资源)
            NULL (NULL)

    

    9、删除PHP数组中头部、尾部、任意元素的实现代码

            删除头部:array_shift(array)

            删除尾部:array_pop(array)          

            array_push($arr,["id"=>15,"name"=>"asdf"]) 放在数组尾部一个元素

            array_unshift($arr,["id"=>1,"name"=>"asdf"]);  放在数组的第一个

            删除任意元素的代码: unset($array[5])   unset($array[8])   


    10、获取文件的创建时间、最后访问时间、修改时间

            fileatime($file)  获取上一次的访问时间

            filemtime($file) 获取上一次修改时间

            

     11、将数组中重复的元素去掉,使用哪个函数?

            array_unique    

            只是用于一维数组


     12、写出计算时长的一个函数   几秒前    几分钟前  几小时前  几天前

  //写出计算时长的一个函数   几秒前    几分钟前  几小时前  几天前
    function formatTime($_time){
        //如果是时间戳,则不用转换,如果不是,需要进行转换
        if(!(is_numeric($_time) && strlen($_time)==10)){
            $_time=strtotime($_time);
        }
        $_nowtime=time();
        $_diff=$_nowtime-$_time;
        $day=60*60*24;
        $hour=60*60;
        $fen=60;
        $_str="";
        if($_diff>$day){
            $_str=floor($_diff/$day)."天前";
        }else if($_diff>$hour){
            $_str=floor($_diff/$hour)."小时前";
        }else if($_diff>$fen){
            $_str=floor($_diff/$fen)."分钟前";
        }else{
            $_str=$_diff."秒前";
        }
        return $_str;
    }
    echo formatTime("2017-11-16 11:29:44");

        

      13、html代码在页面上显示,请问使用哪个函数?

              htmlentities($str);  此函数是有第二个参数的,意思就是转义的范围  ENT_COMPAT(默认,只解释双引号 不解析单引号)   ENT_QUOTES( 单双引号都解析)

              或  htmlspecialchars()           

              本函数各方面都和 htmlspecialchars() 一样, 除了 htmlentities() 会转换所有具有 HTML 实体的字符            

              它的反函数 : html_entity_decode()       htmlspecialchars_decode()


      14、将所有代码去掉html标签,并保留 a 标签 


            strip_tags($str,"<a>") 去掉 $str 中的标签,保留a标签  如果保留多个标签"<p><b><a>" 这样就保留了三个标签。


       15、写出php把字符转换成大写、小写、首字母大写 的函数

                strtoupper()  //全部小写

                strtolower()  //全部大写

                ucfirst() //单词首字母转换成大写

                ucworlds() //所有单词首字母均转换成大写

        

    z1.jpg


    16、如何获取当前执行脚本路径,包括所得到的参数

     $_SERVER['REQUEST_URI'];
            echo $_SERVER['PHP_SELF'];   
     //返回文件名  如果带有pathinfo路径,照样会返回pathinfo路径的内容
      
    echo "<br>";
    echo $_SERVER['SCRIPT_NAME'];
    //只返回文件路径和文件名
    $_SERVER['REQUEST_URI']
    $_SERVER['QUERY_STRING'] //返回url中的参数部分
    $_SERVER['SCRIPT_FILENAME'] //返回当前执行脚本文件的绝对地址
    $_SERVER['HTTP_HOST']  //返回当前url的域名
    $_SERVER['HTTP_USER_AGENT'] //返回来访者设备的参数信息


  

 18、如何判断是不是ajax请求?


   判断header头中是否包含有  X-Requested-With 如果包含有,是否等于 XMLHttpRequest 如果也是,那么就是ajax请求了。      

    

 public function isXmlHttpRequest()
{
   return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');
}





17、请写出以下 的值 是什么


$a="false"


empty($a) ---------->false;

is_null($a) ---------->false

isset($a)---------->true

if($a) ----------> true

gettype($a)------->string


truefalse.jpg


   Linux基础考察点:  


    写出尽可能多的linux命令?

    

    mount

    shutdown

    reboot

    unmount

    useradd

    groupadd

    userdel

    

    ping

    netstat



    ifconfig

    hostname


    ssh

    clear

    who

    

    yum

    


    locate

    find

   

    head

    tail

    less

    more

    

    ln 建立连接  加上 -s 就是软连接

    touch   

    unlink

    rename


    mv

    pwd

    ls

    cp

    rm


    chown

    chgrp


    zip

    unzip

    


    ftp

    scp




    定时任务


        crontab -e

        crontab -l


    * * * * * 命令 (分时日月周)


    at命令:

    at 2:00 tomorrow

    at>/home/jason/do_job

    at>ctrl+d 退出

    

40.jpg



    shell基础

    开头使用  #!指定脚本解释器,例如   #!/bin/bash

    

    编写具体功能