代码改变世界

几道常见的php笔试题解答

2009-09-26 09:42  Iron  阅读(533)  评论(0编辑  收藏  举报

<?php
/*1. 写一个函数,尽可能高效的,从一个标准 url 里取出文件的扩展名
  例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出 php 或 .php
*/
$url ="http://www.sina.com.cn/abc/de/fg.php?id=1";
$search = "/(.[a-zA-Z]+)\?/";
$matches = NULL;
preg_match_all($search,$url,$matchs,PREG_SET_ORDER);
print_r($matchs);
echo "<br>";
echo $matchs[0][1];
echo "<br>";
/*2. 在 HTML 语言中,页面头部的 meta 标记可以用来输出文件的编码格式,以下是一个标准的 meta 语句
  请使用 PHP 语言写一个函数,把一个标准 HTML 页面中的类似 meta 标记中的 charset 部分值改为 big5
  请注意:
  1. 需要处理完整的 html 页面,即不光此 meta 语句
  2. 忽略大小写
  3. ' 和 " 在此处是可以互换的
  4. 'Content-Type' 两侧的引号是可以忽略的,但 'text/html; charset=gbk' 两侧的不行
  5. 注意处理多余空格
*/
$html = file_get_contents("index.html");
//$html = "<Meta http-equiv=Content-Type content='text/html; charset=UTF-8'>";
echo strlen($html)."<br>";
//替换编码
$meta = "/<meta\s+http-equiv\s*\=\s*Content-Type\s+content\s*\=\s*[\'\"\s]\s*text\/html\s*;\s*charset\s*\=\s*[0-9a-zA-Z-]+\s*[\'\"\s]\s*\>/i";
preg_match_all($meta,$html,$matchs,PREG_SET_ORDER);
$html = preg_replace($meta,"<Meta http-equiv=Content-Type content='text/html; charset=gb2312'>",$html);
print_r($matchs);
$matches = NULL;
preg_match_all($meta,$html,$matchs,PREG_SET_ORDER);
print_r($matchs);

/* 3写一个函数,算出两个文件的相对路径
  如 $a = '/a/b/c/d/e.php';
  $b = '/a/b/12/34/c.php';
  计算出 $b 相对于 $a 的相对路径应该是 ../../c/d将()添上
*/
function RealitivePath($a,$b)
{
 $afolder = dirname($a);
 $bfolder = dirname($b);
 //echo $afolder.$bfolder;
 //return;
 while ($afolder!=$bfolder)
 {
  if($afolder == "\\")
   break;
  echo "<br>".$afolder."^".$bfolder."<br>";
  while ($bfolder!=$afolder)
  {
   if ($bfolder=="\\")
    break;
   $bfolder = dirname($bfolder);
   echo "\$bfolder:".$bfolder."<br>";
  }
  if($afolder==$bfolder)
   break;
  $bfolder = dirname($b);
  $afolder = dirname($afolder);
 }
 $samePath = $afolder;
 $returnPath = "";
 $afolder = dirname($a);
 $bfolder = dirname($b);
 while ($samePath != $bfolder)
 {
  $returnPath .= "../";
  $bfolder = dirname($bfolder);
 }
 return dirname(($returnPath.substr($a,strlen($samePath)+1)));
}
echo RealitivePath('/a/b/c/d/e.php','/a/b/12/34/c.php');
//echo dirname("/adsf/asdfa");
//4遍历子文件夹
function findPath($path)
{
 $handle = dir($path);
 //echo ($handle);
 if($handle)
 {
  while (($entry=$handle->read())!=false)
  {
   if(is_dir($path.$entry))
   {
    
    if($entry!="."&&$entry!="..")
    {
     echo "目录:".$path.$entry."<br>";
     findPath($path.$entry."/");
    }
   }
   else if(is_file($path.$entry))
   {
    echo "文件:".$path.$entry."<br>";
   } 
  }
 }
    if($handle)
     $handle->close();
}
findPath("D:/download/");
?>