PHP 面試題

1.數(shù)組函數(shù)arsort()的作用是什么?

分析:arsort()對(duì)數(shù)組進(jìn)行逆向排序并保持索引關(guān)系,主要用于對(duì)那些單元順序很重要的結(jié)合數(shù)組進(jìn)行排序。成功則返回true,失敗返回false。

2.簡(jiǎn)述include和require語(yǔ)句的區(qū)別:

分析:include和require都能把另外一個(gè)文件包含到當(dāng)前文件中,
它們的區(qū)別是:發(fā)生異常時(shí)include產(chǎn)生警告,而require產(chǎn)生致命錯(cuò)誤。
為了避免多次包含同一文件,可以用語(yǔ)句require_once()/include_once()來(lái)代替它們。

3.寫(xiě)出<?php echo 8%(-2) ?>的輸出結(jié)果

0,%取余

4.如何實(shí)現(xiàn)字符串翻轉(zhuǎn)

分析:用strrev()函數(shù),示例如下:

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

5.說(shuō)出echo、print()、print_r()3個(gè)函數(shù)的區(qū)別

分析:echo是PHP語(yǔ)句,
print()和print_r()是函數(shù)。
語(yǔ)句沒(méi)有返回值,而函數(shù)可以有返回值。
print()只能打印簡(jiǎn)單類(lèi)型變量的值(如int、string等),
而print_r()可以打印復(fù)雜類(lèi)型變量的值(如數(shù)組、對(duì)象等),
echo只能輸出一個(gè)或多個(gè)字符串

6.寫(xiě)出顯示客戶端IP與服務(wù)器端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;
}

//服務(wù)器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記錄了學(xué)生的姓名(name)和學(xué)號(hào)(ID),tbl_score記錄了學(xué)生(有的學(xué)生考試以后被開(kāi)除了,沒(méi)有其記錄)的學(xué)號(hào)(ID)和考試成績(jī)(score)以及考試科目(subject),想要打印出各個(gè)學(xué)生姓名及對(duì)應(yīng)的各科總成績(jī),則可用SQL語(yǔ)句:

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的生存時(shí)間?

分析:函數(shù)session_set_cookie_params()用來(lái)設(shè)置session的生存時(shí)間,該函數(shù)必須在session_start()函數(shù)調(diào)用之前調(diào)用。如調(diào)整session生存時(shí)間的代碼如下所示:

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

9.寫(xiě)一個(gè)能夠遍歷一個(gè)文件夾下所有文件和子文件夾的函數(shù)

分析:scandir()函數(shù)遍歷顯示所有文件與文件夾下的文件,方法很簡(jiǎn)單。我們只要利用is_dir()判斷再遞歸查找一次,這樣就可以遍歷目錄下所有文件了。具體的函數(shù)代碼如下所示:

<?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");      //測(cè)試的文件夾是abc,讀者可以改成自己要測(cè)試的文件夾
?>

10.寫(xiě)一個(gè)過(guò)濾網(wǎng)頁(yè)上所有JS/VBS腳本的正則表達(dá)式

分析:正則表達(dá)式是<script[^>]?>.?</script>/is,讀者可通過(guò)下面的代碼來(lái)測(cè)試。

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

11.PHP中字符串的表現(xiàn)形式有哪些

分析:PHP中字符串的表現(xiàn)形式有3種:
1.單引號(hào) 'xxx'
2.雙引號(hào) "xxx"
3.定界符 <<<xxx,其用法是在后面提供一個(gè)標(biāo)識(shí)符,然后在標(biāo)識(shí)符后提供字符串,再在字符串后提供此標(biāo)識(shí)符來(lái)結(jié)尾。

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

<<<對(duì)于大段的HTML代碼特別方便,注意這里提供的標(biāo)識(shí)符是EOT,中間的是HTML代碼。定界符結(jié)束標(biāo)志必須頂格寫(xiě),并且要有分號(hào)結(jié)束

12.談?wù)勀銓?duì)MVC的認(rèn)識(shí)

分析>MVC(Model/View/Controller)模式包括3部分,Model是應(yīng)用對(duì)象;View是應(yīng)用界面,Controller定義用戶界面對(duì)用戶輸入的響應(yīng)方式。
Model:模式是應(yīng)用程序的主體部分。模型表示業(yè)務(wù)數(shù)據(jù),或者業(yè)務(wù)邏輯。
View:視圖是應(yīng)用程序中用戶界面相關(guān)的部分,是用戶看到并與之交互的界面
Controller:控制器的工作就是根據(jù)用戶的輸入,控制用戶界面數(shù)據(jù)顯示和更新Model對(duì)象狀態(tài)

13.sort()、asort()、ksort()有什么區(qū)別?

分析:
sort():根據(jù)數(shù)組中元素的值,以英文字母順序排列,索引鍵從0到n-1重新編號(hào)。主要是當(dāng)數(shù)組索引鍵的值無(wú)關(guān)痛癢時(shí)用來(lái)給數(shù)組排序。
asort():與sort一樣把數(shù)組的元素按字母順序排列,不同的是所有索引鍵都保留。
ksort():根據(jù)數(shù)組中索引鍵的值,以英文字母順序排列,特別適合用于希望把索引鍵排序的聯(lián)想數(shù)組。

14.說(shuō)出輸出結(jié)果

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

10??疾熳饔糜?。如果$num為全局變量(global $num或者$_GLOBALS['num'])結(jié)果會(huì)不同。

15.以下哪個(gè)函數(shù)可以打開(kāi)文件且能讀寫(xiě)文件信息:

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

C,fopen()可以用來(lái)開(kāi)啟文件以讀 / 寫(xiě)

16.寫(xiě)一個(gè)函數(shù)驗(yàn)證電子郵件的格式

<?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寫(xiě)一段簡(jiǎn)單查詢:

分析:查出所有名為“張麗麗”的數(shù)據(jù)。
表名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.說(shuō)明PHP中傳值與傳引用的區(qū)別:

分析:
按值傳遞:函數(shù)范圍內(nèi)對(duì)值的任何改變,在函數(shù)外部都會(huì)被忽略
按引用傳遞:函數(shù)范圍內(nèi)對(duì)值的任何改變,在函數(shù)外部也能反映出這些修改
按值傳遞時(shí),PHP必須復(fù)制值,特別是對(duì)于大型的字符串和對(duì)象來(lái)說(shuō),這將會(huì)是一個(gè)代價(jià)很大的操作。按引用傳遞則不需要復(fù)制值,對(duì)于性能提高很有好處。

19.從一個(gè)標(biāo)準(zhǔn)URL里取出文件的擴(kuò)展名

例如: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打印出前一天的時(shí)間,格式xxxx-xx-xx xx:xx:xx

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

21.一般使用哪些工具進(jìn)行版本控制?

分析:CVS和SVN(SVN強(qiáng)大)

22.優(yōu)化MySQL數(shù)據(jù)庫(kù)的方法:

分析:
1>數(shù)據(jù)庫(kù)設(shè)計(jì)方面允許數(shù)據(jù)亢余,避免JOIN操作,以提高查詢效率
2>系統(tǒng)架構(gòu)設(shè)計(jì)方面,表散列,把海量數(shù)據(jù)散列到幾個(gè)不同的表里面,快慢表,快表只留最新數(shù)據(jù),慢表示歷史存檔。
3>檢查有沒(méi)有少加索引
4>寫(xiě)高效的SQL語(yǔ)句
5>只從數(shù)據(jù)庫(kù)取必須的數(shù)據(jù),只傳送必須的SQL語(yǔ)句
6>必要的時(shí)候用不同的存儲(chǔ)引擎,減少死鎖和查詢速度

23.創(chuàng)建vote表用于記錄單選投票用戶的數(shù)據(jù):

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.投票人數(shù)太多導(dǎo)致網(wǎng)站出現(xiàn)too many connection錯(cuò)誤,如何解決?

分析:
方法一:加大MySQL的最大連接數(shù)
默認(rèn)為100,修改編輯my.ini,修改max_connections=1000/10000
方法二:不用MySQL數(shù)據(jù)庫(kù),直接寫(xiě)文件,寫(xiě)XML文件
方法三:由于用MySQL語(yǔ)句調(diào)用數(shù)據(jù)庫(kù)時(shí),每次執(zhí)行語(yǔ)句前,會(huì)做一個(gè)臨時(shí)變量打開(kāi)數(shù)據(jù)庫(kù),每次調(diào)用玩需要關(guān)閉MySQL臨時(shí)變量。

25.session 和 cookie 的區(qū)別

分析:cookie機(jī)制采用客戶端保持狀態(tài)的方案,
而session機(jī)制采用的是在服務(wù)器端保持狀態(tài)的方案,

存活時(shí)間上也有區(qū)別,
session根據(jù)瀏覽器進(jìn)程存在而存在,
cookie通過(guò)setcookie($name,$val.$exp,'/')來(lái)設(shè)置保存時(shí)間

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、$_GET,$_POST,$_REQUEST 三者的區(qū)別 從一個(gè)簡(jiǎn)單的理解來(lái)看在PHP中$_GET $_POS...
    史史小子閱讀 530評(píng)論 0 0
  • 1.對(duì)于大流量的網(wǎng)站,您采用什么樣的方法來(lái)解決訪問(wèn)量問(wèn)題? 1 有效使用緩存,增加緩存命中率2 使用負(fù)載均衡3 對(duì)...
    史史小子閱讀 260評(píng)論 0 1
  • 最近轉(zhuǎn)載一些面試題,希望能給找工作的朋友們帶來(lái)一點(diǎn)幫助。 1.寫(xiě)出5個(gè)以上你所知道的常用的Linux命令和它的功能...
    程序員祝融閱讀 1,687評(píng)論 0 61
  • 一個(gè)朋友在千鋒學(xué)習(xí)的PHP,他們內(nèi)部有一個(gè)面試寶典,后來(lái)這哥們?cè)滦侥玫搅艘蝗f(wàn)多。我把內(nèi)部的面試寶典拿出來(lái)跟大家一起...
    vardump閱讀 685評(píng)論 0 9
  • 日子沒(méi)有變化 春天日漸豐腴 不緊不慢 矍鑠的行道樹(shù)上綴了溫婉的告白 朵朵盛放 又深情飄落 當(dāng)夜晚開(kāi)始款款而來(lái) ...
    改變自己369閱讀 315評(píng)論 0 5

友情鏈接更多精彩內(nèi)容