PHP新浪面試題全部題目與答案

來源:互聯網
上載者:User

1. 寫一個函數,儘可能高效的,從一個標準 url 裡取出檔案的副檔名
  例如: /abc/de/fg.php?id=1 需要取出 php 或 .php

答:我是直接用PHP內建函數搞定的,不重複造輪子,估計出題者也是想考察基礎知識,主要是解析url和一個返迴文件資訊的函數(擴充:取得檔案尾碼名的多種方法):

 代碼如下 複製代碼

<?php
    /** by  */
    $url = "/abc/de/fg.php?id=1";
    $path = parse_url($url);
    echo pathinfo($path['path'],PATHINFO_EXTENSION);  //php
?>


2. 在 HTML 語言中,頁面頭部的 meta 標記可以用來輸出檔案的編碼格式,以下是一個標準的 meta 語句
  <META http-equiv='Content-Type' content='text/html; charset=gbk'>
  請使用 PHP 語言寫一個函數,把一個標準 HTML 頁面中的類似 meta 標記中的 charset 部分值改為 big5
  請注意:
  (1) 需要處理完整的 html 頁面,即不光此 meta 語句
  (2) 忽略大小寫
  (3) ' 和 " 在此處是可以互換的
  (4) 'Content-Type' 兩側的引號是可以忽略的,但 'text/html; charset=gbk' 兩側的不行
  (5) 注意處理多餘空格

答:表示我Regex(PHP正則詳解)忘記差不多了,弄了半天。

 代碼如下 複製代碼

<?php
    /**  */
    $html = "<meta http-equiv='Content-Type' content='text/html; charset=gbk'>";
    //匹配標準的meta標籤
    $pattern = "/<metas+http-equiv=('|")?Content-Type('|")?s+content=('|")text/html;s+charset=(.*)('|")>/i";
    $replacement = "<meta http-equiv='Content-Type' content='text/html; charset=big5'>";
    $result = preg_replace($pattern, $replacement, $html);
    echo htmlspecialchars($result);
?>

3. 寫一個函數,算出兩個檔案的相對路徑
  如 $a = '/a/b/c/d/e.php';
  $b = '/a/b/12/34/c.php';
  計算出 $b 相對於 $a 的相對路徑應該是 ../../c/d將()添上

答案:

 代碼如下 複製代碼

<?php
    /** by  */
    $a = '/a/b/c/d/e.php';
    $b = '/a/b/13/34/c.php';
    echo getRelativePath($a, $b); //"../../12/34/"
    function getRelativePath($a,$b){
        $a2array = explode('/', $a);
        $b2array = explode('/', $b);
        $relativePath   = '';
        for( $i = 1; $i <= count($b2array)-2; $i++ ) {
            $relativePath .= $a2array[$i] == $b2array[$i] ? '../' : $b2array[$i].'/';
        }
        return $relativePath;
    }
?>


4.寫一個函數,能夠遍曆一個檔案夾下的所有檔案和子檔案夾。

答:這個我之前就在部落格中寫過(PHP檔案遍曆及檔案拷貝),只是實現的方法很多,效率不一定最高

 代碼如下 複製代碼


/*
 *@blog 
 */
function listDir($dir = '.'){
 if ($handle = opendir($dir)) {
  while (false !== ($file = readdir($handle))) {
   if($file == '.' || $file == '..'){
    continue;
   }
   if(is_dir($sub_dir = realpath($dir.'/'.$file))){
    echo 'FILE in PATH:'.$dir.':'.$file.'<br>';
    listDir($sub_dir);
   }else{
    echo 'FILE:'.$file.'<br>';
   }
  }
  closedir($handle);
 }
}
 
listDir('e:wwwabc');


5.簡述論壇中無限分類的實現原理。

答:無限極分類,那麼應該是考察遞迴函式吧!

第一步:建立測試資料庫:

 代碼如下 複製代碼

 CREATE TABLE `category` (
  `id` smallint(5) unsigned NOT NULL auto_increment,
  `fid` smallint(5) unsigned NOT NULL default '0',
  `value` varchar(50) NOT NULL default '',
  PRIMARY KEY (`id`)
 ) ENGINE=MyISAM DEFAULT CHARSET=utf8;


第二步:插入測試資料:

 代碼如下 複製代碼

 INSERT INTO `category` ( `fid`, `value`) VALUES
 (0, 'PHP點點通部落格Pxx.COM'),
 (1,'a'),
 (1,'b'),
 (2,'c'),
 (2,'d'),
 (4,'e')


第三步:遞迴輸出分類:

 代碼如下 複製代碼


<?php
/** by  */
$conn = mysql_connect("localhost", "root", "mckee");
mysql_select_db("test",$conn);
mysql_query("set names utf8");
$sql = "SELECT * FROM category";
$res = mysql_query($sql);
while($row = mysql_fetch_assoc($res)){
    $arr[] = array($row[id],$row[fid],$row[value]);
}
getCate(0);
function getCate($fid = 0) {  
    global $arr;
    for ($i = 0; $i < count($arr); $i++) {  
        if ($arr[$i][1] == $fid) {       
            echo $arr[$i][2] . "<br>";
            getCate($arr[$i][0]); //遞迴
        }
    }
}
?>

6.設計一個網頁,使得開啟它時彈出一個全屏的視窗,該視窗中有一個文字框和一個按鈕。使用者在文字框中輸入資訊後點擊按鈕就可以把視窗關閉,而輸入的資訊卻在主網頁中顯示!

 答案:尼瑪。都沒明白出這題目是幹嘛的,新浪工程師腦子進水了嗎?考察js的window對象?親們告訴我?

index.html

 代碼如下 複製代碼

<html>
    <head>
        <title>by </title>
    </head>
 <body>
  <h1></h1>
  <script type="text/javascript">
   open('fullwin.html');
  </script>
 </body>
</html>


fullwin.html

 代碼如下 複製代碼


<html>
     <head>
        <title>by </title>
     </head>
 <body>
  <script type="text/javascript">
   window.moveTo(0, 0);
   window.resizeTo(window.screen.width, window.screen.height);
   var s = prompt('請輸入:');
   window.opener.document.getElementsByTagName('h1')[0].innerText = s;
   window.close();
  </script>
 </body>
</html>


unset引用

 代碼如下 複製代碼

<?php
    $a = "this is a php blog";
    $b = & $a;
    unset($b);
    echo $a; //this is a php blog
?>

這個我很清楚,unset($b),只是斷開了變數名和值得綁定,但是神奇的是:

 

 代碼如下 複製代碼
<?php
    $a = "test";
    $b = & $a;
    unset($a);
    echo $b;//test
?>

但是我銷毀$a了,為嘛$b的值還在呢?暈了,求解!

感謝下面網友回複,讓我明白了:

關於unset()函數使用注意:只有當指向該值的所有變數(比如有引用變數指向該值)都被銷毀後,地址才會被釋放,如下:

 

 代碼如下 複製代碼
<?php
    /** by www.111cn.net */
    $a = "test";
    $b = & $a;
    unset($a);
    unset($b);
    echo $b;//輸出空
?>
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.