PHP 面试题

作者: 齐舞647 | 来源:发表于2017-08-14 00:05 被阅读44次

    1.数组函数arsort()的作用是什么?

    分析:arsort()对数组进行逆向排序并保持索引关系,主要用于对那些单元顺序很重要的结合数组进行排序。成功则返回true,失败返回false。

    2.简述include和require语句的区别:

    分析:include和require都能把另外一个文件包含到当前文件中,
    它们的区别是:发生异常时include产生警告,而require产生致命错误。
    为了避免多次包含同一文件,可以用语句require_once()/include_once()来代替它们。

    3.写出<?php echo 8%(-2) ?>的输出结果

    0,%取余

    4.如何实现字符串翻转

    分析:用strrev()函数,示例如下:

    <?php
    $str = "abcdefg";
    $str2 = strrev($str);
    echo $str2;
    ?>
    

    5.说出echo、print()、print_r()3个函数的区别

    分析:echo是PHP语句,
    print()和print_r()是函数。
    语句没有返回值,而函数可以有返回值。
    print()只能打印简单类型变量的值(如int、string等),
    而print_r()可以打印复杂类型变量的值(如数组、对象等),
    echo只能输出一个或多个字符串

    6.写出显示客户端IP与服务器端IP的代码:

    <?php
    //客户端IP
    function get_client_ip(){
        if (getenv('HTTP_CLIENT_IP')) {
            $client_ip = getenv('HTTP_CLIENT_IP');
        }
        elseif(getenv('HTTP_X_FORWARDED_FOR')){
            $client_ip = getenv('HTTP_X_FORWARDED_FOR');
        }
        elseif (getenv('REMOTE_ADDR')) {
            $client_ip = getenv('REMOTE_ADDR');
        }
        else () {
            $client_ip = $HTTP_SERVER_VAR['REMOTE_ADDR'];
        }
        return $client_ip;
    }
    
    //服务器IP
    function get_sever_ip(){
        if (isset($_SERVER)) {
            if ($_SERVER['SERVER_ADDR']) {
                $huoqu_ip = $_SERVER['SERVER_ADDR'];
            }
            else{
                $huoqu_ip = $_SERVER['LOCAL_ADDR'];
            }
        }
        else{
            $huoqu_ip = getenv('SERVER_ADDR');
        }
        return $huoqu_ip;
    }
    echo get_client_ip();
    echo get_sever_ip();
    ?>
    

    7.SQL中LEFT JOIN是什么意思?

    分析:LEFT JOIN表示自然左外连接。
    如tbl_user记录了学生的姓名(name)和学号(ID),tbl_score记录了学生(有的学生考试以后被开除了,没有其记录)的学号(ID)和考试成绩(score)以及考试科目(subject),想要打印出各个学生姓名及对应的各科总成绩,则可用SQL语句:

    select name , count(score) as sum_score from tbl_user left join tb1_score on tbl_score on tbl_user.ID=tbl_score.ID group by tbl_user.ID
    

    8.如何修改session的生存时间?

    分析:函数session_set_cookie_params()用来设置session的生存时间,该函数必须在session_start()函数调用之前调用。如调整session生存时间的代码如下所示:

    <?php
    //保存一天
    $lifeTime = 24 * 3600;
    session_set_cookie_params($lifeTime);
    session_start();
    $_SESSION["admin"] = true;
    ?>
    

    9.写一个能够遍历一个文件夹下所有文件和子文件夹的函数

    分析:scandir()函数遍历显示所有文件与文件夹下的文件,方法很简单。我们只要利用is_dir()判断再递归查找一次,这样就可以遍历目录下所有文件了。具体的函数代码如下所示:

    <?php
    function numfilesindir($thedir){
      if (is_dir($thedir)) {
        $scanarray = scandir($thedir);
        for ($i=0; $i < count($scanarray); $i++) { 
          if ($scanarray[$i]!="." && $scanarray[$i]!="..") {
            if (is_file($thedir ."/" .$scanarray[$i])) {
              echo $scanarray[$i]."<br/>";
            }
          }
        }
      }else{
        echo "Sorry, this Directory does not exist.";
      }
    }
    echo numfilesindir("abc");      //测试的文件夹是abc,读者可以改成自己要测试的文件夹
    ?>
    

    10.写一个过滤网页上所有JS/VBS脚本的正则表达式

    分析:正则表达式是<script[^>]?>.?</script>/is,读者可通过下面的代码来测试。

    <?php
    $a="<script>this is a test</script>abc";  //这里有一段JS代码,然后有abc字符串
    echo preg_replace('/\<script[^>]*?>.*?\<\/script\>/is','',$a);  //看看输出结果是不是只是abc
    ?>
    

    11.PHP中字符串的表现形式有哪些

    分析:PHP中字符串的表现形式有3种:
    1.单引号 'xxx'
    2.双引号 "xxx"
    3.定界符 <<<xxx,其用法是在后面提供一个标识符,然后在标识符后提供字符串,再在字符串后提供此标识符来结尾。

    echo <<< EOT
    <a href="$url" target="$target">name</a>
    

    <<<对于大段的HTML代码特别方便,注意这里提供的标识符是EOT,中间的是HTML代码。定界符结束标志必须顶格写,并且要有分号结束

    12.谈谈你对MVC的认识

    分析>MVC(Model/View/Controller)模式包括3部分,Model是应用对象;View是应用界面,Controller定义用户界面对用户输入的响应方式。
    Model:模式是应用程序的主体部分。模型表示业务数据,或者业务逻辑。
    View:视图是应用程序中用户界面相关的部分,是用户看到并与之交互的界面
    Controller:控制器的工作就是根据用户的输入,控制用户界面数据显示和更新Model对象状态

    13.sort()、asort()、ksort()有什么区别?

    分析:
    sort():根据数组中元素的值,以英文字母顺序排列,索引键从0到n-1重新编号。主要是当数组索引键的值无关痛痒时用来给数组排序。
    asort():与sort一样把数组的元素按字母顺序排列,不同的是所有索引键都保留。
    ksort():根据数组中索引键的值,以英文字母顺序排列,特别适合用于希望把索引键排序的联想数组。

    14.说出输出结果

    <?php
    $num = 10;
    function multiply(){
      $num = $num * 10;
    }
    multiply();
    echo $num;
    ?>
    

    10。考察作用域。如果$num为全局变量(global $num或者$_GLOBALS['num'])结果会不同。

    15.以下哪个函数可以打开文件且能读写文件信息:

    A.fget() B.file_open() C.fopen() D.open_file()

    C,fopen()可以用来开启文件以读 / 写

    16.写一个函数验证电子邮件的格式

    <?php
    //邮件正确返回true,否则返回false
    function validateEmail($email){
      if (preg_match("/^[a-zA-Z]+@[a-zA-Z]+\.[a-zA-Z]+$/",$email)) {
        return true;
      }
      else{
        return false;
      }
    }
    echo validateEmail("user@sina.com");
    ?>
    

    17.使用PHP写一段简单查询:

    分析:查出所有名为“张丽丽”的数据。
    表名User
    Name Tel Content Date
    张丽丽 13011632222 本科 2012-10-11
    王晓晓 0531-82796625 研究生 2012-10-15

    $mysql_db = mysql_connect("local","root","pass");
    @mysql_select_db("DB",$mysql_db);
    $result = mysql_query("select * from User where Name='张丽丽'");
    while($row = mysql_fetch_array($result)){
      echo $row['Name'].$row['Tel'].$row['Content'].$row['Date'];
    }
    

    18.说明PHP中传值与传引用的区别:

    分析:
    按值传递:函数范围内对值的任何改变,在函数外部都会被忽略
    按引用传递:函数范围内对值的任何改变,在函数外部也能反映出这些修改
    按值传递时,PHP必须复制值,特别是对于大型的字符串和对象来说,这将会是一个代价很大的操作。按引用传递则不需要复制值,对于性能提高很有好处。

    19.从一个标准URL里取出文件的扩展名

    例如:http://www.sina.com.cn/abc/de/fg.html?id=1取出html

    <?php
    function getExt($url){
      $arr = parse_url($url);
    
      $file = basename($arr['path']);
      $ext = explode(".",$file);
      return $ext[1];
    }
    echo getExt("http://www.sina.com.cn/abc/de/fg.html?id=1");
    ?>
    

    20.用PHP打印出前一天的时间,格式xxxx-xx-xx xx:xx:xx

    <?php
      echo date("Y-m-d H:i:s",strtotime("-1 day"));
    ?>
    

    21.一般使用哪些工具进行版本控制?

    分析:CVS和SVN(SVN强大)

    22.优化MySQL数据库的方法:

    分析:
    1>数据库设计方面允许数据亢余,避免JOIN操作,以提高查询效率
    2>系统架构设计方面,表散列,把海量数据散列到几个不同的表里面,快慢表,快表只留最新数据,慢表示历史存档。
    3>检查有没有少加索引
    4>写高效的SQL语句
    5>只从数据库取必须的数据,只传送必须的SQL语句
    6>必要的时候用不同的存储引擎,减少死锁和查询速度

    23.创建vote表用于记录单选投票用户的数据:

    create table vote
    (
    id       int unsigned     not null auto_increment,
    ip       varchar(15)      not null,
    time   datetime          not null,
    iid      int                    not null,
    primary key (id)
    )
    

    24.投票人数太多导致网站出现too many connection错误,如何解决?

    分析:
    方法一:加大MySQL的最大连接数
    默认为100,修改编辑my.ini,修改max_connections=1000/10000
    方法二:不用MySQL数据库,直接写文件,写XML文件
    方法三:由于用MySQL语句调用数据库时,每次执行语句前,会做一个临时变量打开数据库,每次调用玩需要关闭MySQL临时变量。

    25.session 和 cookie 的区别

    分析:cookie机制采用客户端保持状态的方案,
    而session机制采用的是在服务器端保持状态的方案,

    存活时间上也有区别,
    session根据浏览器进程存在而存在,
    cookie通过setcookie($name,$val.$exp,'/')来设置保存时间

    相关文章

      网友评论

        本文标题:PHP 面试题

        本文链接:https://www.haomeiwen.com/subject/ursjrxtx.html