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í)間