最新php面试题及答案

时间:2009-10-9     作者:smarteng     分类: PHP相关


首先声明这是是从网上搜的,当然答案我看过,觉得对的就贴上了,正则题,大多是自己写的,

如有不对,请留言~

笔试题:

1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名(8分)
   例如: http://www.cmstop.com/abc/123/test.php?id=1&catid=15 需要取出 php

 function getExt($url) {
    $url = basename($url);
    $pos1 = strpos($url,".");
    $pos2 = strpos($url,"?");
    if(strstr($url,"?")){
         return substr($url,$pos1 + 1,$pos2 - $pos1 - 1);
    } else {
      return substr($url,$pos1);
    }
}

[break]

2. 写一个函数,算出两个文件的相对路径(8分)
   如 $a = '/a/b/c/d/e.php';
      $b = '/a/b/12/34/c.php';

function getRelativePath($a, $b) {  
    $returnPath = array(dirname($b));  
    $arrA = explode('/', $a);  
    $arrB = explode('/', $returnPath[0]);  
    for ($n = 1, $len = count($arrB); $n < $len; $n++) {  
        if ($arrA[$n] != $arrB[$n]) {  
            break;  
        }   
    }  
    if ($len - $n > 0) {  
        $returnPath = array_merge($returnPath, array_fill(1, $len - $n, '..'));  
    }  
      
    $returnPath = array_merge($returnPath, array_slice($arrA, $n));  
    return implode('/', $returnPath);  
   }  
   echo getRelativePath($a, $b);


3. 写一个函数,能够遍历一个文件夹下的所有文件和子文件夹。(10分)
function myScandir($dir){
     $files = array();
     if ( $handle = opendir($dir) ){
         while ($file = readdir($handle))  {
             if ($file != ".." && $file != ".") {
                 if ( is_dir($dir . "/" . $file) ) {
                     $files[$file] = myScandir($dir . "/" . $file);
                 }else {
                     $files[] = $file;
                 }
             }
         }
         closedir($handle);
         return $files;
     }
}
4. PHP5中魔术方法函数有哪几个,请举例说明各自的用法(8分)
类中的魔术方法:
The function names __construct 类的构造函数,
 __destruct 类的析构函数,
 __get 取得类的属性, __set 设置类的属性, __isset 判断是否设置, __unset 销毁(see Overloading),
 __toString , __clone are magical in PHP classes.

PHP中的魔术方法
取得是否自动加转义符的设置
get_magic_quotes_gpc();

5.请说明在php.ini中safe_mode开启之后对于PHP系统函数的影响(10分)
exec()
system()
passthru()
popen()
escapeshellcmd()
pcntl_exec()


6.将1234567890转换成1,234,567,890 每3位用逗号隔开的形式。(7分)
<?php
$num = "1234567890.11"; 
$num = preg_replace('/(?<=[0-9])(?=(?:[0-9]{3})+(?![0-9]))/', ',', $num);
echo $num;
?>

7.使用正则表达式提取一段标识语言(html或xml)代码段中指定标签的指定属性值(需考虑属性值对不规则的

情况,如大小写不敏感,属性名值与等号间有空格等)(12分)
   此处假设需提取test标签的attr属性值,请自行构建包含该标签的串
   <test attr = "abcd" />
<?php
$string ='<test attr = "ddfdf" />';
$match = '/\<\w{4} \w{4} = \"(\w+)\" \/\>/';
preg_match($match,$string, $matches);
echo  $matches[1];
?>

8.请建立一个索引同时提升以下两个SQL语句的性能,如何知道你建立的索引被使用了?(10分)
   select * from content where modelid=2 and catid=1 and status=1 order by published desc,

contentid desc
   select * from content where catid=1 and status=1 order by contentid desc

CREATE INDEX content_id ON content (catid,status)

 

9. 设计一个网页,使得打开它时弹出一个全屏的窗口,该窗口中有一个文本框和一个按钮。用户在文本框中输

入信息后点击按钮就可以把窗口关闭,而输入的信息却在主网页中显示(12分)

var theResponse = window.prompt("欢迎?","请在此输入您的姓名。");

 

10.基于jquery框架实现以下行的向上、向下和删除(15分)

<ul>
   <li><span>一</span><span id="1"><a href="javascript: move_up(1)">上移</a> | <a

href="javascript: move_down(1)">下移</a> | <a href="javascript: del(1)">删除</a></span></li>
   <li><span>二</span><span id="2"><a href="javascript: move_up(2)">上移</a> | <a

href="javascript: move_down(2)">下移</a> | <a href="javascript: del(2)">删除</a></span></li>
   <li><span>三</span><span id="3"><a href="javascript: move_up(3)">上移</a> | <a

href="javascript: move_down(3)">下移</a> | <a href="javascript: del(3)">删除</a></span></li>
</ul>

<script type="text/javascript">
function move_up(id)
{
   $(body #1)
}

function move_down(id)
{

}

function del(id)
{

}
</script>