**1、表單中get與post提交方法的區別?**
答:get是發送請求HTTP協議通過url參數傳遞進行接收,而post是實體數據,可以通過表單提交大量信息.
**2、session與cookie的區別?**
答:session: 儲存用戶訪問的全局唯一變量,存儲在服務器上的php指定的目錄中的(session_dir)的位置進行的存放
cookie:用來存儲連續訪問一個頁面時所使用,是存儲在客戶端,對于Cookie來說是存儲在用戶WIN的Temp目錄中的。
兩者都可通過時間來設置時間長短
**3、數據庫中的事務是什么?**
答:事務(transaction)是作為一個單元的一組有序的數據庫操作。如果組中的所有操作都成功,則認為事務成功,即使只有一個操作失敗,事務也不成功。如果所有操作完成,事務則提交,其修改將作用于所有其他數據庫進程。如果一個操作失敗,則事務將回滾,該事務所有操作的影響都將取消。
**4、用PHP打印出前一天的時間格式是2006-5-10 22:21:21**
```
答:echo date('Y-m-d H:i:s', strtotime('-1 days'));
```
**5、echo(),print(),print_r()的區別**
答:echo是PHP語句, print和print_r是函數,語句沒有返回值,函數可以有返回值(即便沒有用)
print()只能打印出簡單類型變量的值(如int,string)
print_r()可以打印出復雜類型變量的值(如數組,對象)
echo 輸出一個或者多個字符串
**6、能夠使HTML和PHP分離開使用的模板**
```
答:Smarty,Dwoo,TinyButStrong,Template Lite,Savant,phemplate,XTemplate
```
**10、PHP的意思**
答:PHP是一個基于服務端來創建動態網站的腳本語言,您可以用PHP和HTML生成網站主頁
**11、MYSQL取得當前時間的函數是?,格式化日期的函數是**
```
答:now(),date()
```
**12、實現中文字串截取無亂碼的方法。**
答:
```
function GBsubstr($string, $start, $length) {
if(strlen($string)>$length){
$str=null;
$len=$start+$length;
for($i=$start;$i<$len;$i++){
if(ord(substr($string,$i,1))>0xa0){
$str.=substr($string,$i,2);
$i++;
}else{
$str.=substr($string,$i,1);
}
}
return $str.'...';
}else{
return $string;
}
}
```
**13、您是否用過模板引擎? 如果有您用的模板引擎的名字是?**
答:用過,smarty
**14、對于大流量的網站,您采用什么樣的方法來解決訪問量問題?**
答:確認服務器硬件是否足夠支持當前的流量,數據庫讀寫分離,優化數據表,
程序功能規則,禁止外部的盜鏈,控制大文件的下載,使用不同主機分流主要流量
**15、用PHP寫出顯示客戶端IP與服務器IP的代碼**
```
答:
打印客戶端IP:echo $_SERVER[‘REMOTE_ADDR’];
或者: getenv('REMOTE_ADDR');
打印服務器IP:echo gethostbyname("www.bolaiwu.com");
```
**16、語句include和require的區別是什么?為避免多次包含同一文件,可用(?)語句代替它們? **
```
答:require->require是無條件包含也就是如果一個流程里加入require,無論條件成立與否都會先執行require
include->include有返回值,而require沒有(可能因為如此require的速度比include快)
注意:包含文件不存在或者語法錯誤的時候require是致命的,include不是
```
**17、如何修改SESSION的生存時間**.
答:
方法1: 將`php.ini`中的`session.gc_maxlifetime`設置為9999重啟apache
方法2:
```
$savePath = "./session_save_dir/";
$lifeTime = 小時* 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
```
```
方法3: setcookie() and session_set_cookie_params($lifeTime);
```
**18、有一個網頁地址, 比如PHP開發資源網主頁: http://www.baidu.com/index.html ,如何得到它的內容?**
答:
**`方法1:`**(對于PHP5及更高版本):
```
$readcontents = fopen("http://www.baidu.com/index.html", "rb");
$contents = stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;
```
**`方法2:`**`echo file_get_contents("http://www.baidu.com/index.html");`
**19、在HTTP 1.0中,狀態碼401的含義是(?);如果返回“找不到文件”的提示,則可用header 函數,其語句為(?);**
答:狀態401代表未被授權,`header("Location:www.xxx.php");`
**20、在PHP中,heredoc是一種特殊的字符串,它的結束標志必須?**
答:heredoc的語法是用"<<<"加上自己定義成對的標簽,在標簽范圍內的文字視為一個字符串
**`例子:`**
```
$str = <<
my name is Jiang Qihui!
SHOW;
```
**21、談談asp,php,jsp的優缺點**
答:ASP全名`Active Server Pages`,是一個WEB服務器端的開發環境,利用它可以產生和運行動態的、交互的、高性能的WEB服務應用程序。ASP采用腳本語言VB Script(Java script)作為自己的開發語言。
PHP是一種跨平臺的服務器端的嵌入式腳本語言. 它大量地借用C,Java和Perl語言的語法, 并耦合PHP自己的特性,使WEB開發者能夠快速地寫出動態生成頁面.它支持目前絕大多數數據庫。還有一點,PHP是完全免費的,不用花錢,你可以從PHP官方站點(http://www.php.net)自由下載。而且你可以不受限制地獲得源碼,甚至可以從中加進你自己需要的特色。
JSP 是Sun公司推出的新一代站點開發語言,他完全解決了目前ASP,PHP的一個通病--腳本級執行(據說PHP4 也已經在Zend 的支持下,實現編譯運行).Sun 公司借助自己在Java 上的不凡造詣,將Java 從Java 應用程序和Java Applet 之外,又有新的碩果,就是Jsp--Java Server Page。Jsp 可以在Serverlet和JavaBean的支持下,完成功能強大的站點程序。
三者都提供在HTML 代碼中混合某種程序代碼、由語言引擎解釋執行程序代碼的能力。但JSP代碼被編譯成Servlet 并由Java 虛擬機解釋執行,這種編譯操作僅在對JSP 頁面的第一次請求時發生。在ASP 、PHP、JSP 環境下,HTML 代碼主要負責描述信息的顯示樣式,而程序代碼則用來描述處理邏輯。普通的HTML 頁面只依賴于Web 服務器,而ASP 、PHP、JSP 頁面需要附加的語言引擎分析和執行程序代碼。程序代碼的執行結果被重新嵌入到HTML 代碼中,然后一起發送給瀏覽器。ASP 、PHP、JSP三者都是面向Web 服務器的技術,客戶端瀏覽器不需要任何附加的軟件支持。
**22、談談對mvc的認識**
答:由模型(model),視圖(view),控制器(controller)完成的應用程序由模型發出要實現的功能到控制器,控制器接收組織功能傳遞給視圖;
**23、寫出發貼數最多的十個人名字的SQL,利用下表:**
```
members(id,username,posts,pass,email)
```
答:
```
SELECT * FROM `members` ORDER BY posts DESC limit 0,10;
```
**24、請說明php中傳值與傳引用的區別。什么時候傳值什么時候傳引用? 以題的形式出**
答:按值傳遞:函數范圍內對值的任何改變在函數外部都會被忽略
按引用傳遞:函數范圍內對值的任何改變在函數外部也能反映出這些修改
優缺點:按值傳遞時,php必須復制值。特別是對于大型的字符串和對象來說,這將會是一個代價很大的操作。
按引用傳遞則不需要復制值,對于性能提高很有好處。
### 25、在PHP中`error_reporting`這個函數有什么作用?
答:設置錯誤級別與錯誤信息回報
**26、請寫一個函數驗證電子郵件的格式是否正確**
答:
```
function checkEmail($email)
{
$pregEmail = "/([a-z0-9]*[-_\.]?[a-z0-9]+)*@([a-z0-9]*[-_]?[a-z0-9]+)+[\.][a-z]{2,3}([\.][a-z]{2})?/i";
return preg_match($pregEmail,$email);
}
```
**27、簡述如何得到當前執行腳本路徑,包括所得到參數。**
答:
```
$script_name = basename(__file__); print_r($script_name);
```
**28、JS表單彈出對話框函數是?獲得輸入焦點函數是?**
```
答:
彈出對話框:` alert(),prompt(),confirm()`
獲得輸入焦點`focus()`
```
**29、JS的轉向函數是?怎么引入一個外部JS文件?**
答:
```
window.location.href,<script type="text/javascript" src="js/js_function.js"></script>
```
**30、foo()和@foo()之間有什么區別?**
答:@foo()控制錯誤輸出
**31、如何聲明一個名為”myclass”的沒有方法和屬性的類? **
答:`class myclass{ }`
**32、如何實例化一個名為”myclass”的對象?**
答:`new myclass()`
**33、你如何訪問和設置一個類的屬性? **
答:
```
$object = new myclass();
$newstr = $object->test;
$object->test = "info"; sxhj_lzd@163
```
**34、mysql_fetch_row() 和mysql_fetch_array之間有什么區別? **
答:`mysql_fetch_row`是從結果集取出1行數組,作為枚舉
`mysql_fetch_array`是從結果集取出一行數組作為關聯數組,或數字數組,兩者兼得
** 35、GD庫是做什么用的 ?**
答:gd庫提供了一系列用來處理圖片的API,使用GD庫可以處理圖片,或者生成圖片。
在網站上GD庫通常用來生成縮略圖或者用來對圖片加水印或者對網站數據生成報表。
**36、指出一些在PHP輸入一段HTML代碼的辦法。**
答:`echo "aaa";`
**37、下面哪個函數可以打開一個文件,以對文件進行讀和寫操作( C )?**
```
(a) fget() (b) file_open() (c) fopen() (d) open_file()
```
**38、下面哪個選項沒有將john 添加到users 數組中 ( a , c )?**
```
(a) $users[] = ‘john’;
(b) array_add($users,’john’);
(c) array_push($users,‘john’);
(d) $users ||= ‘john’;
```
**39、下面的程序會輸入是否?**
```
$num = 10;
function multiply(){
$num = $num * 10;
}
multiply();
echo $num;
?>
```
答:
```
輸出:10
```
4**0、使用php寫一段簡單查詢,查出所有姓名為“張三”的內容并打印出來**
```
表名User
Name Tel Content Date
張三13333663366 大專畢業2006-10-11
張三13612312331 本科畢業2006-10-15
張四021-55665566 中專畢業2006-10-15
```
請根據上面的題目完成代碼:
```
$mysql_db=mysql_connect("local","root","pass");
@mysql_select_db("DB",$mysql_db);
$result = mysql_query("SELECT * FROM `user` WHERE name='張三'");
while($rs = mysql_fetch_array($result)){
echo $rs["tel"].$rs["content"].$rs["date"];
}
```
**41、如何使用下面的類,并解釋下面什么意思?**
```
class test{
function Get_test($num){
$num=md5(md5($num)."En");
return $num;
}
}
```
答:
```
$testnum = "123";
$object = new test();
$encrypt = $object->Get_test($testnum);
echo $encrypt;
類test里面包含Get_test方法,實例化類調用方法多字符串加密
```
**42、寫出SQL語句的格式: 插入,更新,刪除**
```
表名User
Name Tel Content Date
張三13333663366 大專畢業2006-10-11
張三13612312331 本科畢業2006-10-15
張四021-55665566 中專畢業2006-10-15
```
(a) 有一新記錄(小王13254748547 高中畢業2007-05-06)請用SQL語句新增至表中
```
mysql_query("INSERT INTO `user` (name,tel,content,date) VALUES
('小王','13254748547','高中畢業','2007-05-06')")
```
(b) 請用sql語句把張三的時間更新成為當前系統時間
```
$nowDate = date("Ymd");
mysql_query("UPDATE `user` SET date='".$nowDate."' WHERE name='張山'");
```
(c) 請寫出刪除名為張四的全部記錄
```
mysql_query("DELETE FROM `user` WHERE name='張四'");
```
**43、請寫出數據類型(int char varchar datetime text)的意思; 請問varchar和char有什么區別**
答:int是數字類型,char固定長度字符串,varchar實際長度字符串,datetime日期時間型,text文本字符串
char的場地固定為創建表設置的長度,varchar為可變長度的字符
**44、寫出以下程序的輸出結果**
```
$b=201;
$c=40;
$a=$b>$c?4:5;
echo $a;
?>
```
**`答:4`**
**45、檢測一個變量是否有設置的函數是否?是否為空的函數是?**
```
答:isset($str),empty($str);
```
**46、取得查詢結果集總數的函數是?**
```
答:mysql_num_rows($result);
```
**47、$arr = array('james', 'tom', 'symfony'); 請打印出第一個元素的值**
```
答:echo $array[0];
```
**48、請將41題的數組的值用','號分隔并合并成字串輸出(1分)**
```
答:for($i=0;$i
```
**49、$a = 'abcdef'; 請取出$a的值并打印出第一個字母(1分)**
```
答:echo $a{0} 或echo substr($a,0,1)
```
**50、PHP可以和sql server/oracle等數據庫連接嗎?(1分)**
```
答:當然可以
```
**51、請寫出PHP5權限控制修飾符(3分)**
```
答:public(公共),private(私用),protected(繼承)
```
**52、請寫出php5的構造函數和析構函數(2分)**
```
答:__construct , __destruct
```
**54、(一)創建新聞發布系統,表名為message有如下字段(3分)**
```
id 文章id
title 文章標題
content 文章內容
category_id 文章分類id
hits 點擊量
```
```
答:CREATE TABLE 'message'(
'id' int(10) NOT NULL auto_increment,
'title' varchar(200) default NULL,
'content' text,
'category_id' int(10) NOT NULL,
'hits' int(20),
PRIMARY KEY('id');
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
```
**(二)同樣上述新聞發布系統:表comment記錄用戶回復內容,字段如下(4分)**
```
comment_id 回復id
id 文章id,關聯message表中的id
comment_content 回復內容
現通過查詢數據庫需要得到以下格式的文章標題列表,并按照回復數量排序,回復最高的排在最前面
文章id 文章標題點擊量回復數量
用一個SQL語句完成上述查詢,如果文章沒有回復則回復數量顯示為0
```
```
答:SELECT message.id id,message.title title,IF(message.`hits` IS NULL,0,message.`hits`) hits,
IF(comment.`id` is NULL,0,count(*)) number FROM message LEFT JOIN
comment ON message.id=comment.id GROUP BY message.`id`;
```
** (三)上述內容管理系統,表category保存分類信息,字段如下(3分)**
```
category_id int(4) not null auto_increment;
categroy_name varchar(40) not null;
用戶輸入文章時,通過選擇下拉菜單選定文章分類
寫出如何實現這個下拉菜單
```
```
答:function categoryList()
{
$result=mysql_query("select category_id,categroy_name from category")
or die("Invalid query: " . mysql_error());
print("");
}
```
**54、寫一個函數,盡可能高效的,從一個標準url 里取出文件的擴展名**
```
例如: http://www.sina.com.cn/abc/de/fg.php?id=1 需要取出php 或.php
```
```
答案1:
function getExt($url){
$arr = parse_url($url);
$file = basename($arr['path']);
$ext = explode(".",$file);
return $ext[1];
}
```
```
答案2:
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);
}
}
```
55、在HTML 語言中,頁面頭部的meta 標記可以用來輸出文件的編碼格式,以下是一個標準的meta 語句
請使用PHP 語言寫一個函數,把一個標準HTML 頁面中的類似meta 標記中的charset 部分值改為big5
請注意:
1. 需要處理完整的html 頁面,即不光此meta 語句
2. 忽略大小寫
3. ' 和" 在此處是可以互換的
4. 'Content-Type' 兩側的引號是可以忽略的,但'text/html; charset=gbk' 兩側的不行
5. 注意處理多余空格
56、寫一個函數,算出兩個文件的相對路徑
如$a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
計算出$b 相對于$a 的相對路徑應該是../../c/d將()添上
答: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);
57、如何實現PHP、JSP交互?
題目有點含糊不清,SOAP,XML_RPC,Socket function,CURL都可以實現這些,如果是考PHP和Java的整合,PHP內置了這種機制(如果考PHP和.NET的整合,也可以這么回答),例如$foo = new Java('java.lang.System');
58、使用哪些工具進行版本控制?
CVS和SVN,SVN號稱下一代CVS,功能強大,不過CVS是老牌,市占率很高.我一直用SVN,題目是問用什么工具,呃,這個可能需要這么回答:CVS Server on Apache作服務端,WinCVS作客戶端;Subversion on Apache/DAV 做服務端,TortoiseSVN做客戶端,或者Subclipse做客戶端
59、如何實現字符串翻轉?
其實PHP本身就有字符串翻轉的函數:strrev(),不妨試試echo strrev($str);不過所有的這三種方法都不能解決中文字符串翻轉的問題,會出錯的。
代碼
function reverse($var)
{
$res="";
for($i=0,$j=strlen($var);$i<$j;$i++)
{
$res=$var[$i].$res;
}
return $res;
}
$tmpvar="wofang";
$res=reverse($tmpvar);
echo $res;
?>
60、優化MYSQL數據庫的方法。
(1).數據庫設計方面,這是DBA和Architect的責任,設計結構良好的數據庫,必要的時候,去正規化(英文是這個:denormalize,中文翻譯成啥我不知道),允許部分數據冗余,避免JOIN操作,以提高查詢效率
(2).系統架構設計方面,表散列,把海量數據散列到幾個不同的表里面.快慢表,快表只留最新數據,慢表是歷史存檔.集群,主服務器Read & write,從服務器read only,或者N臺服務器,各機器互為Master
(3).(1)和(2)超越PHP Programmer的要求了,會更好,不會沒關系.檢查有沒有少加索引
(4).寫高效的SQL語句,看看有沒有寫低效的SQL語句,比如生成笛卡爾積的全連接啊,大量的Group By和order by,沒有limit等等.必要的時候,把數據庫邏輯封裝到DBMS端的存儲過程里面.緩存查詢結果,explain每一個sql語句
(5).所得皆必須,只從數據庫取必需的數據,比如查詢某篇文章的評論數,select count(*) ... where article_id = ? 就可以了,不要先select * ... where article_id = ?然后msql_num_rows.
只傳送必須的SQL語句,比如修改文章的時候,如果用戶只修改了標題,那就update ... set title = ? where article_id = ?不要set content = ?(大文本)
(6).必要的時候用不同的存儲引擎.比如InnoDB可以減少死鎖.HEAP可以提高一個數量級的查詢速度
61、談談事務處理
A給B的賬戶轉賬50美元的例子
62、apache+mysql+php實現最大負載的方法
見7
63、實現中文字串截取無亂碼的方法。
mb_substr()
?>
64、用PHP寫出顯示客戶端IP與服務器IP的代碼:
打印客戶端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv('REMOTE_ADDR');
打印服務器IP:echo gethostbyname("http://www.baidu.com/")
65、在PHP中,當前腳本的名稱(不包括路徑和查詢字符串)記錄在預定義變量(1)中;而鏈接到當前頁面的的前一頁面URL記錄在預定義變量(2)中
//本頁地址,SCRIPT_NAME也可以:php/test.php
echo $_SERVER['PHP_SELF']."
";
//鏈接到當前頁面的前一頁面的URL 地址:
echo $_SERVER['HTTP_REFERER']."
";
//其它的見參考手冊:語言參考》變量》預定義變量
//前執行腳本的絕對路徑名:D:Inetpubwwwrootphp est.php
echo $_SERVER["SCRIPT_FILENAME"]."
";
//正在瀏覽當前頁面用戶的IP 地址:127.0.0.1
echo $_SERVER["REMOTE_ADDR"]."
";
//查詢(query)的字符串(URL 中第一個問號? 之后的內容):id=1&bi=2
echo $_SERVER["QUERY_STRING"]."
";
//當前運行腳本所在的文檔根目錄:d:inetpubwwwroot
echo $_SERVER["DOCUMENT_ROOT"]."
";
?>
66、執行程序段將輸出__。
//參考手冊》語言參考》運算符》算術運算符》%為取模運算,輸出0
echo 8%(-2)."
";
//取模$a % $b 在$a 為負值時的結果也是負值。輸出-2
echo ((-8)%3)."
";
//輸出2
echo (8%(-3))."
";
?>
67、在HTTP 1.0中,狀態碼401 的含義是____;如果返回“找不到文件”的提示,則可用header 函數,其語句為____。
答:401表示未授權;header("HTTP/1.0 404 Not Found");[見參考手冊》函數參考》HTTP函數》header]
68、數組函數arsort 的作用是____;語句error_reporting(2047)的作用是____。
答:arsort:對數組進行逆向排序并保持索引關系error_reporting(2047)的作用是:report All errors and warnings
69、寫出一個正則表達式,過慮網頁上的所有JS/VBS腳本(即把script標記及其內容都去掉):
$script="以下內容不顯示:<script language='javascript'>alert('cc');</script>";
echo preg_replace("/<script[^>].*?>.*?</script>/si", "替換內容", $script);
?>
70、以Apache模塊的方式安裝PHP,在文件http.conf中首先要用語句____動態裝載PHP模塊,
然后再用語句____使得Apache把所有擴展名為php的文件都作為PHP腳本處理。
答:LoadModule php5_module "c:/php/php5apache2.dll";AddType application/x-httpd-php .php
見參考手冊》目錄》II. 安裝與配置》6. Windows 系統下的安裝》Microsoft Windows 下的Apache 2.0.x
71、語句include 和require 都能把另外一個文件包含到當前文件中,它們的區別是____;為了避免多次包含同一文件,可以用語句____來代替它們。
答:在如何處理失敗時,include() 產生一個警告而require() 則導致一個致命錯誤;require_once()/include_once()
72、一個函數的參數不能是對變量的引用,除非在php.ini中把____設為on.
答:allow_call_time_pass_reference boolean :是否啟用在函數調用時強制參數被按照引用傳遞, 見參考手冊》附錄G
73、SQL 中LEFT JOIN的含義是__,如果tbl_user記錄了學生的姓名(name)和學號(ID),
tbl_score記錄了學生(有的學生考試以后被開除了,沒有其記錄)的學號(ID)和考試成績(score)以及考試科目(subject),要想打印出各個學生姓名及對應的的各科總成績,則可以用SQL語句____.
答:自然左外連接
create database phpinterview;
use phpinterview
create table tbl_user
(
ID int not null,
name varchar(50) not null,
primary key (ID)
);
create table tbl_score
(
ID int not null,
score dec(6,2) not null,
subject varchar(20) not null
);
insert into tbl_user (ID, name) values (1, 'beimu');
insert into tbl_user (ID, name) values (2, 'aihui');
insert into tbl_score (ID, score, subject) values (1, 90, '語文');
insert into tbl_score (ID, score, subject) values (1, 80, '數學');
insert into tbl_score (ID, score, subject) values (2, 86, '數學');
insert into tbl_score (ID, score, subject) values (2, 96, '語文');
select A.id,sum(B.score) as sumscore
from tbl_user A left join tbl_score B
on A.ID=B.ID
group by A.id
74、在PHP中,heredoc是一種特殊的字符串,它的結束標志必須____
答:結束標識符所在的行不能包含任何其它字符除";"
75、寫一個函數,能夠遍歷一個文件夾下的所有文件和子文件夾。
function my_scandir($dir)
{
$files=array();
if(is_dir($dir))
{
if($handle=opendir($dir))
{
while(($file=readdir($handle))!==false)
{
if($file!="." && $file!="..")
{
if(is_dir($dir."/".$file))
{
$files[$file]=my_scandir($dir."/".$file);
}
else
{
$files[]=$dir."/".$file;
}
}
}
closedir($handle);
return $files;
}
}
}
print_r(my_scandir("D:Program FilesInternet ExplorerMUI"));
?>
76、以下哪一句不會把John 新增到users 陣列?
$users[] = 'john';
成功把John 新增到陣列users。
array_add($users,’john’);
函式array_add() 無定義。
array_push($users,‘john’);
成功把John 新增到陣列users。
$users ||= 'john';
語法錯誤。
77、sort()、assort()、和ksort() 有什么分別?它們分別在什么情況下使用?
sort()
根據陣列中元素的值,以英文字母順序排序,索引鍵會由0 到n-1 重新編號。主要是當陣列索引鍵的值無關疼癢時用來把陣列排序。
assort()
PHP 沒有assort() 函式,所以可能是asort() 的筆誤。
asort()
與sort() 一樣把陣列的元素按英文字母順序來排列,不同的是所有索引鍵都獲得保留,特別適合替聯想陣列排序。
ksort()
根據陣列中索引鍵的值,以英文字母順序排序,特別適合用于希望把索引鍵排序的聯想陣列。
78、以下的代碼會產生什么?為什么?
$num =10;
function multiply(){
$num =$num *10;
}
multiply();
echo $num;
由于函式multiply() 沒有指定$num 為全域變量(例如global $num 或者$_GLOBALS['num']),所以$num 的值是10。
79、reference 跟一個正規的變量有什么分別?如何pass by reference?在什么情況下我們需要這樣做?
Reference 傳送的是變量的地址而非它的值,所以在函式中改變一個變量的值時,整個應用都見到這個變量的新值。
一個正規變量傳送給函式的是它的值,當函式改變這個變量的值時,只有這個函式才見到新值,應用的其他部分仍然見到舊值。
$myVariable = "its' value";
Myfunction(&$myVariable); // 以reference 傳送參數
以reference 傳送參數給函式,可以使函式改變了的變量,即使在函式結束后仍然保留新值。
80、些函式可以用來在現正執行的腳本中插入函式庫?
對這道題目不同的理解會有不同的答案,我的第一個想法是插入PHP 函式庫不外乎include()、include_once()、require()、require_once(),但細心再想,“函式庫”也應該包括com 物件和.net 函式庫,所以我們的答案也要分別包括com_load 和dotnet_load,下次有人提起“函式庫”的時候,別忘記這兩個函式。
81、foo() 與@foo() 有什么分別?
foo() 會執行這個函式,任何解譯錯誤、語法錯誤、執行錯誤都會在頁面上顯示出來。
@foo() 在執行這個函式時,會隱藏所有上述的錯誤訊息。
很多應用程式都使用@mysql_connect() 和@mysql_query 來隱藏mysql 的錯誤訊息,我認為這是很嚴重的失誤,因為錯誤不該被隱藏,你必須妥善處理它們,可能的話解決它們。
82、你如何替PHP 的應用程式偵錯?
我并不常這樣做,我曾經試過很多不同的偵錯工具,在Linux 系統中設定這些工具一點也不容易。不過以下我會介紹一個近來頗受注目的偵錯工具。
PHP - Advanced PHP Debugger 或稱PHP - APD,第一步是執行以下的指令安裝:
pear install apd安裝后在你的腳本的開頭位置加入以下的語句開始進行偵錯:
apd_set_pprof_trace();執行完畢,打開以下檔案來查閱執行日志:
apd.dumpdir
你也可以使用pprofp 來格式化日志。
詳細的資料可以參閱http://us.php.net/manual/en/ref.apd.php。
83、“===”是什么?試舉一個“==”是真但“===”是假的例子。
“===”是給既可以送回布爾值“假”,也可以送回一個不是布爾值但卻可以賦與“假”值的函式,strpos() 和strrpos() 便是其中兩個例子。
問題的第二部份有點困難,想一個“==”是假,但是“===”是真的例子卻很容易,相反的例子卻很少。但我終于找到以下的例子:
if (strpos("abc", "a") == true){ // 這部分永不會被執行,因為"a" 的位置是0,換算成布爾值“假”}if (strpos("abc", "a") === true){ // 這部份會被執行,因為“===”保證函式strpos() 的送回值不會換算成布爾值.}
84、你會如何定義一個沒有成員函式或特性的類別myclass?
class myclass{}
85、你如何產生一個myclass 的物件?
$obj = new myclass();
86、在一個類別內如何存取這個類別的特性及變改它的值?
使用語句:$this->propertyName,例如:
class myclass{ private $propertyName; public function __construct() { $this->propertyName = "value"; }}
87、include 和include_once 有什么分別?require 又如何?
三者都是用來在腳本中插入其他檔案,視乎url_allow_fopen 是否核準,這個檔案可以從系統內部或外部取得。但他們之間也有微細的分別:
include():這個函式容許你在腳本中把同一個檔案插入多次,若果檔案不存在,它會發出系統警告并繼續執行腳本。
include_once():它跟include() 的功能相似,正如它的名字所示,在腳本的執行期間,有關檔案只會被插入一次。
require():跟include() 差不多,它也是用來在腳本中插入其他檔案,但若果檔案不存在,它會發出系統警告,這個警告會引致致命錯誤令腳本中止執行
88、以下哪一個函式可以把瀏覽器轉向到另一個頁面?
redir()
這不是一個PHP 函式,會引致執行錯誤。
header()
這個是正確答案,header() 用來插入卷頭資料,可以用來使瀏覽器轉向到另一個頁面,例如:
header("Location: http://www.search-this.com/");
location()
這不是一個PHP 函式,會引致執行錯誤。
redirect()
這不是一個PHP 函式,會引致執行錯誤。
89、以下哪一個函式可以用來開啟檔案以便讀/寫?
fget()
這不是一個PHP 函式,會引致執行錯誤。
file_open()
這不是一個PHP 函式,會引致執行錯誤。
fopen()
這是正確答案,fopen() 可以用來開啟檔案以便讀/寫,事實上這個函式還有很多選項,詳細資料請參閱php.net。
open_file()
這不是一個PHP 函式,會引致執行錯誤。
90、mysql_fetch_row() 和mysql_fetch_array() 有什么分別?
mysql_fetch_row() 把數據庫的一列儲存在一個以零為基數的陣列中,第一欄在陣列的索引0,第二欄在索引1,如此類推。mysql_fetch_assoc() 把數據庫的一列儲存在一個關聯陣列中,陣列的索引就是欄位名稱,例如我的數據庫查詢送回“first_name”、“last_name”、“email”三個欄位,陣列的索引便是“first_name”、“last_name”和“email”。mysql_fetch_array() 可以同時送回mysql_fetch_row() 和mysql_fetch_assoc() 的值。
91、下面的代碼用來做什么?請解釋。
$date='08/26/2003';print ereg_replace("([0-9]+)/([0-9]+)/([0-9]+)","\\2/\\1/\\3",$date);
這是把一個日期從MM/DD/YYYY 的格式轉為DD/MM/YYYY 格式。我的一個好朋友告訴我可以把這個正規表達式拆解為以下的語句,對于如此簡單的表示是來說其實無須拆解,純粹為了解說的方便:
// 對應一個或更多0-9,后面緊隨一個斜號$regExpression = "([0-9]+)/";// 應一個或更多0-9,后面緊隨另一個斜號$regExpression .= "([0-9]+)/";// 再次對應一個或更多0-9$regExpression .= "([0-9]+)";至于\\2/\\1/\\3 則是用來對應括號,第一個括號對的是月份,第二個括號對應的是日期,第三個括號對應的是年份。
92、給你一行文字$string,你會如何編寫一個正規表達式,把$string 內的HTML 標簽除去?
首先,PHP 有內建函式strip_tags() 除去HTML 標簽,為何要自行編寫正規表達式?好了,便當作是面試的一道考題吧,我會這樣回答:
$stringOfText = "
This is a test
";$expression = "/<(.*?)>(.*?)<\/(.*?)>/";echo preg_replace($expression, "\\2", $stringOfText);// 有人說也可以使用/(<[^>]*>)/ $expression = "/(<[^>]*>)/";echo preg_replace($expression, "", $stringOfText);
93、PHP 和Perl 分辨陣列和散列表的方法有什么差異?
這正是為何我老是告訴別人選擇適當的編程語言,若果你只用一種語言的話你怎么能回答這道問題?這道問題很簡單,Perl 所有陣列變量都是以@ 開頭,例如@myArray,PHP 則沿用$ 作為所有變量的開頭,例如$myArray。
至于Perl 表示散列表則用%,例如%myHash,PHP 則沒有分別,仍是使用$,例如$myHash。
94、你如何利用PHP 解決HTTP 的無狀態本質?
最主要的倆各選擇是session 和cookie。使用session 的方法是在每一頁的開始加上session_start(),然后利用$_SESSION 散列表來儲存session 變量。至于cookie 你只需記著一個原則:在輸出任何文字之前調用set_cookie() 函式,此外只需使用$_COOKIE 散列表便可以存取所有cookie 變量。
還有一個不那么可靠的方法,就是利用訪客的IP 地址,這個方法有特定的危險性。
95、GD 函式庫用來做什么?
這個可能是我最喜歡的函式庫,自從PHP 4.3.0 版本后GD 便內建在PHP 系統中。這個函式庫讓你處理和顯示各式格式的圖檔,它的另一個常見用途是制作所圖檔。GD 以外的另一個選擇是ImageMagick,但這個函式庫并不內建于PHP 之中,必須由系統管理員安96、試寫出幾個輸出一段HTML 代碼的方法。
嗯,你可以使用PHP 中任何一種輸出語句,包括echo、print、printf,大部分人都使用如下例的echo:
echo "My string $variable";你也可以使用這種方法:
echo<< HTML tags in here as well. The END; remarks must be on a line of its own, and can't contain any extra white space.END;
97、PHP 比Perl 好嗎?請討論。
我們不要為一個簡單的問題引發一場舌戰,正如我經常說的:“為工作選擇適合的語言,不要把工作遷就語言。”我個人認為Perl 十分適合用作命令行工具,雖然它在網頁應用上也有不錯的表現,但是它的真正實力在命令行上才能充分發揮。同樣地,PHP 雖然可以在控制臺的環境中使用,但是個人認為它在網頁應用上有更好的表現,PHP 有大量專門為網頁應用而設計的函式,Perl 則似乎以命令行為設計之本。
個人來說兩種語言我都喜歡,在大學期間我經常使用Perl、PHP 和Java,可惜工作上我使用C#,但在家里我花不少時間操練PHP、Perl、Ruby(現正學習)和Java,保持我的技能知識在最新狀態。很多人問我C 和C++ 怎么樣,它們是否仍有機會在我的應用中占一席位,我的答案基本上是“否”,我近來的工作主要集中在網頁開發,雖然C 和C++ 也可以用來寫網頁,但它們到底不是為這種工作而設計的,“為工作選擇適合的語言”,若果我需要編寫一個控制臺應用,用來展示bubble sort、quick sort 和merge sort 的效能比較,我一定會使用C / C++。若果我需要編寫一個相片簿系統,我會使用PHP 或者C#(我認為制作用戶介面方面.NET 語言比網頁更加)。
98、請說明PHP 中傳值與傳引用的區別。什么時候傳值什么時候傳引用?
答:傳值只是把某一個變量的值傳給了另一個變量,而引用則說明兩者指向了同一個地方。
99、在PHP中error_reporting這個函數有什么作用?
答:The error_reporting() function sets the error_reporting directive at runtime. PHP has many levels of errors, using this function sets that level for the duration (runtime) of your script.
100、請用正則表達式(Regular Expression)寫一個函數驗證電子郵件的格式是否正確。
答:
if(isset($_POST['action']) && $_POST['action']=='submitted')
{
$email=$_POST['email'];
if(!preg_match("/^(?:w+.?)*w+@(?:w+.?)*w+$/",$email))
{
echo "電子郵件檢測失敗";
}
else
{
echo "電子郵件檢測成功";
}
}
else
{
?>
<script type="text/javascript">
function checkEmail(sText)
{
var reg=/^(?:w+.?)*w+@(?:w+.?)*w+$/;
var email=document.getElementById(sText).value;
if(!reg.test(email))
{
alert("電子郵件檢測失敗");
}
else
{
alert("電子郵件格式正確");
}
}
</script>
電子郵件:
客戶端檢測
服務器端檢測
}
?>
101、簡述如何得到當前執行腳本路徑,包括所得到參數。
echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['PHP_SELF']."?".$_SERVER['QUERY_STRING'];
//echo "http://".$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];
?>
102、有一個一維數組,里面存儲整形數據,請寫一個函數,將他們按從大到小的順序排列。要求執行效率高。并說明如何改善執行效率。(該函數必須自己實現,不能使用php函數)
function BubbleSort(&$arr)
{
$cnt=count($arr);
$flag=1;
for($i=0;$i<$cnt;$i++)
{
if($flag==0)
{
return;
}
$flag=0;
for($j=0;$j<$cnt-$i-1;$j++)
{
if($arr[$j]>$arr[$j+1])
{
$tmp=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$tmp;
$flag=1;
}
}
}
}
$test=array(1,3,6,8,2,7);
BubbleSort($test);
var_dump($test);
?>
103、請舉例說明在你的開發過程中用什么方法來加快頁面的加載速度
答:要用到服務器資源時才打開,及時關閉服務器資源,數據庫添加索引,頁面可生成靜態,圖片等大文件單獨服務器。使用代碼優化工具啦
Mysql部分
104、創建poll表,用于記錄單選投票用戶的數據
字段包括id[ Autoincreace ] , ip , time , iid(用戶選則的選項,int型)
寫出create上述table的完整sql語句
drop table if exists poll;
/*==============================================================*/
/* Table: poll */
/*==============================================================*/
create table poll
(
id int unsigned not null auto_increment,
ip varchar(15) not null,
time datetime not null,
iid int not null,
primary key (id)
)
105、寫出將一個選擇2號選項的ip為127.0.0.1的用戶在當前時間的投票記錄到數據庫的SQL
insert into poll (ip,time,iid) values('127.0.0.1',now(),2);
106、寫出滿足下邊條件的SQL語句
item表的結構為id(就是poll表中的iid) ,descp(用戶選擇的選項的文字)
請查詢并返回10條記錄,包括ip和用戶選擇的選項的文字
107、現在因為投票人數太多,網站時常出現too many connection的錯誤,請提供解決方案
方法一:加大MySql的最大連接數
mysql的最大連接數默認是100, 這個數值對于并發連接很多的數據庫應用是遠遠不夠的,當連接請求大于默認連接數后,就會出現無法連接數據庫的錯誤,因此我們需要把它適當調大一些,編輯my.ini
修改max_connections=1000
方法二,不用mysql數據庫,改為直接寫文件,詳細方法參照問題5
若非要用mysql,還可
方法三:由于用mysql語句調用數據庫時,在每次之執行語句前,會做一個臨時的變量用來打開數據庫,所以你在使用mysql語句的時候,記得在每次調用完mysql之后就關閉mysql臨時變量
108、在成功解決連接數的問題后,發現程序運行緩慢,經查發現是mysql并發太多,表被鎖定的現象嚴重,請提供解決方案
對于訪問量大的,本來就不推薦使用數據庫,可以考慮直接寫到文本中,根據預測的訪問量,先定義假若是100個文件文件名依次為1.txt,2.txt…100.txt,每有用戶投票的時候,隨機往其中的一個文件中寫入投票信息。統計的時候,再對所有文本文件中的數據進行分析。必要的時候,再導入數據庫
drop table if exists item;
/*==============================================================*/
/* Table: item */
/*==============================================================*/
create table item
(
id int not null,
descp varchar(200) not null,
primary key (id)
);
select A.ip,b.descp
from poll A,item B
where A.id=B.id
limit 10
109、因為用戶實在太多,所以又分配給你兩臺服務器,你會如何來安排這3臺服務器?
對于服務器分配,其實有好幾種方案(建議采用LINUX主機),先列出一個解決方案。
1.考慮到電信,網通(南北差異)互訪問速度慢的問題,可以讓電信的用戶走電信的線,網通的走網通的線。大致可以這樣分配,國內南方用戶(電信用戶)擁有一臺服務器A;北方用戶(網通用戶)擁有一臺服務器B。國外的用戶也可以考慮給一臺服務器C。用戶訪問的時候,首先訪問的是針對國外的服務器,那臺機器是電信網通的用戶訪問速度都差不多的(可以考慮就租用香港或是什么地方的),經過服務器C判斷后直接跳到相應的服務器。統計時三臺機器的數據合起來。
110、現在開始要求同一ip不能重復投票,請指出如何對數據表進行相應的修改
ALTER TABLE `phpinterview`.`poll` ADD unique INDEX `IX_poll_ip`(`ip`);
111、原有數據已經有很多重復ip的數據了,所以我們把它導出為一個txt,格式和上邊的poll一致,用TAB鍵間隔,請寫一段程序,刪除ip有重復的記錄,并統計每個投票選項的投票數
//讀取文本并放入數組
$apoll = file("c:\1.txt");
//對每一行數據進行分割,從而獲取了一個二維數組
for ($i=0;$i
{
$poll[$i] = split(" ",$apoll[$i]);
}
//獲取IP、出現的次數數據
$arrIP=array();
for($i=0;$i
{
$arrIP[$poll[$i][1]]=isset($arrIP[$poll[$i][1]])?$arrIP[$poll[$i][1]]+1:1;
}
//獲取選項、投票個數
$arrRes=array();
for($i=0;$i
{
if($arrIP[$poll[$i][1]]==1)
{
$arrRes[$poll[$i][3]]=isset($arrRes[$poll[$i][3]])?$arrRes[$poll[$i][3]]+1:1;
}
}
var_dump($arrRes);
?>
mysql5.0測試版:
/*========================得到測試數據c: .txt=========*/
SELECT *
into outfile 'c: .txt'
FROM `testok`;
/*========================載入臨時表=========*/
create TABLE phpinterview.testok(id int,ip varchar(15),time datetime,iid int);
LOAD DATA INFILE 'c: .txt'
into table testok;
/*=========================刪除ip有重復的記錄=========*/
delete A from testok A,(select ip from testok B group by ip having count(*) >1) B
where A.ip=B.ip
/*================統計每個投票選項的投票數==============================*/
select iid,count(*) from testok B group by B.iid
112、使用php寫一段簡單查詢,查出所有姓名為“張三”的內容并打印出來
表名User
Name Tel Content Date
張三13333663366 大專畢業2006-10-11
張三13612312331 本科畢業2006-10-15
張四021-55665566 中專畢業2006-10-15
請根據上面的題目完成代碼:
$mysql_db=mysql_connect("local","root","pass");
@mysql_select_db("DB",$mysql_db);
代碼
drop table if exists user;
/*==============================================================*/
/* Table: user */
/*==============================================================*/
create table user
(
`Name` varchar(20),
Tel varchar(16),
Content varchar(255),
`Date` date
)
insert into user(name,tel,content,`date`) values('張三','13333663366','大專畢業','2006-10-11');
insert into user(name,tel,content,`date`) values('張三','13612312331','本科畢業','2006-10-15');
insert into user(name,tel,content,`date`) values('張四','021-55665566','中專畢業','2006-10-1');
select * from user where name='張三';
代碼
header("content-type:text/html; charset=gbk");
$mysql_db=mysql_connect("localhost","root","");
@mysql_select_db("phpinterview",$mysql_db);
echo "
";
mysql_query("set names gbk");
$result=mysql_query("select Name,Tel,Content,Date from user where Name='張三'") or die("錯誤:".mysql_error());
while($row=mysql_fetch_array($result,MYSQL_BOTH))
{
echo "
";
}
mysql_free_result($result);
echo "
".$row["Name"]." ".$row["Tel"]." ".
$row["Content"]."
".$row["Date"]." "
?>
113、如何使用下面的類,并解釋下面什么意思?
class test{
function Get_test($num){
$num=md5(md5($num)."En");
return $num;
}
}
/**
* 使用md5加密數據...
*
*/
class test{
function Get_test($num){
$num=md5(md5($num)."En");
return $num;
}
}
$a=new test();
echo $a->Get_test("123");
?>
114、用javascipt打印“上海愛吉”
<script type="text/javascript">
document.write("上海吉它");
</script>
115、寫出SQL語句的格式: 插入,更新,刪除
代碼
select expression
from tablename
where condition
group by columns asc
with rollup
order by column asc
limit offset,rowcount;
insert into tablename(columname) values(exp);
update tablename set columnname=exp where condition order by column limit rowcount;
delete from tablename where condition order by column limit rowcount;
116、某內容管理系統中,表message有如下字段
id 文章id
title 文章標題
content 文章內容
category_id 文章分類id
hits 點擊量
創建上表,寫出MySQL語句
117、同樣上述內容管理系統:表comment記錄用戶回復內容,字段如下
comment_id 回復id
id 文章id,關聯message表中的id
comment_content 回復內容
現通過查詢數據庫需要得到以下格式的文章標題列表,并按照回復數量排序,回復最高的排在最前面
文章id 文章標題點擊量回復數量
用一個SQL語句完成上述查詢,如果文章沒有回復則回復數量顯示為0
118、上述內容管理系統,表category保存分類信息,字段如下
category_id int(4) not null auto_increment;
categroy_name varchar(40) not null;
用戶輸入文章時,通過選擇下拉菜單選定文章分類
寫出如何實現這個下拉菜單
drop table if exists Comment;
drop table if exists category;
drop table if exists message;
/*==============================================================*/
/* Table: Comment */
/*==============================================================*/
create table Comment
(
comment_id int unsigned not null,
id int unsigned not null,
comment_content text,
primary key (comment_id)
)
type = InnoDB;
/*==============================================================*/
/* Table: category */
/*==============================================================*/
create table category
(
category_id int not null AUTO_INCREMENT,
category_name varchar(40) not null,
primary key (category_id),
key AK_pk_category_id (category_id)
)
type = InnoDB;
/*==============================================================*/
/* Table: message */
/*==============================================================*/
create table message
(
id int not null,
title varchar(120) not null,
content text not null,
category_id int unsigned,
hit int unsigned,
primary key (id)
)
type = InnoDB;
select A.id,A.title,A.hits,IFNULL(B.num,0)
from message A left join (select id,count(*) as num from comment B group by id) B
on A.id=B.id
order by B.num desc;
119、內容管理系統:用戶提交內容后,系統生成靜態HTML頁面;寫出實現的基本思路
直接通過php寫入文件,或使用模板來替換標簽
120、簡單描述用戶修改以發布內容的實現流程和基本思路
更新內容,替換靜態文件
121、寫出以下程序的輸出結果
$b=201;
$c=40;
$a=$b>$c?4:5;
echo $a;
?>
122、寫出以下程序的輸出結果
$str="cd";
$$str="hotdog";
$$str.="ok";
echo $cd;
?>
hotdogok
123、有一表menu(mainmenu,submenu,url),請用遞歸法寫出一樹形菜單,將所有的menu列出來
function GenerateMenu($id=0,$str="")
{
$result=mysql_query("select mainmenu,url,submenu from menu where mainmenu=$id");
while($row=mysql_fetch_array($result))
{
echo $str.$row["url"]."
";
GenerateMenu($row["submenu"],$str."--");
}
mysql_free_result($result);
}
$link=mysql_connect("localhost","root","");
mysql_select_db("phpinterview");
GenerateMenu();
mysql_close($link)
?>
124、給你三個數,寫程序求出其最大值。
$var1=1;
$var2=7;
$var3=8;
$max=$var1>$var2?$var1:$var2;
$max=$max>$var3?$max:$var3;
echo $max;
125、寫出發貼數最多的十個人名字的SQL,利用下表:
members(id,username,posts,pass,email)
SELECT username,count(*) as num FROM `members` group by username desc order by count(*) desc limit 10
10)如何通過javascript判斷一個窗口是i已經被屏蔽。
<script>
var result = window.open("/somepage.aspx");
if(result==null)
{
alert("瀏覽器不允許彈出窗口");
}
</script>
126、寫出session的運行機制
用戶A訪問站點Y,如果站點Y執行了session_start();(以下假定session_start()總是存在)那么會產生一個session_id,這個session id一般會以COOKIE的形式保存到用戶A(我們可以通過在php.ini里設置session.use_only_cookies為1,強制SESSION ID必須以COOKIE傳遞。)。這時候SESSION ID表現為$_COOKIE[’PHPSESSID’];(PHPSESSID可用session_name()函數來修改)
用戶A接著訪問,這個session id($_COOKIE[’PHPSESSID’])就會在A每次訪問Y的時候傳送到站點Y。
在站點Y上,會有這么一個目錄,是用來保存SESSION的實際數據的。站點Y接收到session id,然后通過session id,來獲得與SESSION數據的關聯,并返回SESSION數據。
127、防止SQL注射漏洞一般用__addslashes___函數。
128、請說明 PHP 中傳值與傳引用的區別。什么時候傳值什么時候傳引用?
傳值只是把某一個變量的值傳給了另一個變量,而引用則說明兩者指向了同一個地方。
129、在PHP中error_reporting這個函數有什么作用?
設定php腳本的錯誤報告級別,說實話,我沒怎么用過,我現在用的是C#開發,。
130、請用正則表達式(Regular Expression)寫一個函數驗證電子郵件的格式是否正確。
/*
檢查郵件地址是否為郵件地址,返回邏輯值
*/
functionCheckMailAdr($str){
return(eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$",$str));
}
131、簡述如何得到當前執行腳本路徑,包括所得到參數。
說明:例如有一個腳本 www.domain.com,傳給他的參數有參數1,參數2,參數3…。傳遞參數的方法有可能是GET有可能是POST,
那么現在請寫出類似:http://www.domain.com/script.php?參數1=值1&參數2=值2.....的結果
關于前執行腳本路徑感覺有點歧義:若是得到該腳本在服務器上的絕對路徑用 $_SERVER[‘APPL_PHYSICAL_PATH’].若是該腳本的URL則可以用獲取
獲取所有參數:可以用以下方法:
//獲取post的數據
while(list($var, $value) = each($HTTP_POST_VARS))
{
echo"$var = $value n";
}
//獲取get方式的數據
while(list($var, $value) = each($HTTP_GET_VARS))
{
echo"$var = $value n";
}
132,有一個一維數組,里面存儲整形數據,請寫一個函數,將他們按從大到小的順序排列。要求執行效率高。并說明如何改善執行效率。(該函數必須自己實現,不能使用php函數)
可以用冒泡排序
functionBubbleSort($str)
{
for($i=0;$i {
for($j=count($str)-2;$j>=$i;$j--)
{
if($str[$j+1]<$str[$j])
{
$tmp= $str[$j+1];
$str[$j+1]=$str[$j];
$str[$j]=$tmp;
}
}
}
return$str;
}
$str= array(3,6,1,5,9,0,4,6,11);
print_r(BubbleSort($str));
?>
132、負載均衡
目前主要有三種網絡負載平衡轉發技術,分別是網絡地址轉換、直接路由和IP隧道技術,采用不同的方法將客戶端發送的包轉發到目的服務器上,并確保目的服務器的返回包可以順利到達客戶端。
● 網絡地址轉換
網絡地址轉換模式
在目標網絡地址轉換(DNAT)模式下,提供服務的IP被定義在平衡服務器上,應用服務器只需要定義各自的內部IP地址,但是必須將負載平衡服務器定義為缺省路由,以保證返回客戶端的包經過負載平衡服務器,完成第二次地址轉換后再送回客戶端。
原理:
1. 客戶發出服務請求
2. 負載平衡服務器接收到請求,將數據包中目的IP地址改為選中的應用服務器IP地址,然后重新發出數據包
3. 應用服務器收到后,將應答包發回給負載平衡服務器
4. 負載平衡服務器收到應答包后將其中的源地址改回成服務IP,發回客戶端
缺點是網絡地址轉換的性能擴展能力有限,因為請求包和應答包都必須通過平衡服務器,當服務器的節點數量達到20或更多時,平衡服務器可能成為整個系統的瓶頸。因此,這種方式主要適用于網絡負載不是很高的場合。
● 直接路由
和那種請求包和應答包都必須通過平衡服務器的網絡地址轉換不同,平衡服務器在直接路由模式下,將請求調度到不同的實際服務器,實際服務器直接將結果發回 客戶端。在大多數應用中,請求的字節數遠小于應答的字節數,所以與網絡地址轉換相比平衡服務器能處理更多的請求。采用直接路由能更大程度提高平衡服務器的 最大節點數和網絡吞吐量。甚至于平衡服務器使用100M全雙工的網卡,系統的最大數據吞吐量仍可以超過1Gbps。
直接路由的特點是運用網絡分層原理,通過將目標IP包封裝在指定MAC地址的以太網數據包中欺騙TCP堆棧,因此實際服務器和負載平衡服務器必須在同一個物理網段中,并且在應用服務器上必須將服務IP定義在loopback虛擬網卡上。
原理:
1. 客戶發出服務請求
2. 負載平衡服務器接收到請求,將數據包中網卡物理地址(MAC)改為選中的應用服務器的MAC地址,然后重新發出數據包
3. 目標應用服務器收到后,將應答包通過路由器直接發回客戶端(不經過負載平衡服務器)
直接路由是最高效,網絡延時最小的負載平衡技術,但是,為達到MAC地址的欺騙,負載平衡服務器和所有應用服務器必須在同一個物理網段。而且,現在出現操作系統缺省是關閉這種特性的,如FreeBSD,必須顯示打開相應的內核開關才可以。不過,目前的主流操作系統,都可以滿足直接路由的需求,如Windows、Linux、AIX、Solaris、FreeBSD等。
直接路由轉換模式
●IP隧道
與直接路由的方法類似,區別僅僅在于不是通過MAC欺騙來轉發數據包,而是通過建立負載平衡服務器和應用服務器之間的IP隧道來完成。
因為這些服務器的連接是通過IP隧道,平衡服務器和實際服務器可以在不同的局域網甚至是廣域網。缺點是所有服務器必須使用IP隧道(IP封裝)協議,比直接路由的效率要低,而且,不是所有的操作系統都支持。
133、索引
索引的原理;索引的意義;什么情況下不易用索引,
134、2.int varchar char text 的最大值和在gbk和ntf_8中所占字符數
135、3.xss是什么?怎么預防
136、4.include與require的區別
137、5.192.168.0.1用二進制和十進制分別如何表示
138、在PHP中,當前腳本的名稱(不包括路徑和查詢字符串)記錄在預定義變量__$_SERVER['PHP_SELF']__中;而鏈接到當前頁面的URL記錄在預定義變量__$_SERVER['HTTP_REFERER']__中
139、執行程序段將輸出__0__。
140、在HTTP 1.0中,狀態碼401 的含義是____;如果返回“找不到文件”的提示,則可用header 函數,其語句為____。
141、數組函數arsort 的作用是__對數組進行逆向排序并保持索引關系__;語句error_reporting(2047)的作用是__報告所有錯誤和警告__。
142、PEAR中的數據庫連接字符串格式是____。
143、寫出一個正則表達式,過慮網頁上的所有JS/VBS腳本(即把scrīpt標記及其內容都去掉):preg_replace("/<script[^>].*?>.*?</script>/si", "newinfo", $script);
144、.以Apache模塊的方式安裝PHP,在文件http.conf中首先要用語句____動態裝載PHP模塊,然后再用語句____使得Apache把所有擴展名為php的文件都作為PHP腳本處理。
145、LoadModule php5_module "c:/php/php5apache2.dll" , AddType application/x-httpd-php .php,
146、語句include 和require 都能把另外一個文件包含到當前文件中,它們的區別是____;為了避免多次包含同一文件,可以用語句__require_once||include_once__來代替它們。
147、類的屬性可以序列化后保存到session 中,從而以后可以恢復整個類,這要用到的函數是____。
148、一個函數的參數不能是對變量的引用,除非在php.ini中把__allow_call_time_pass_reference boolean__設為on.
149、11.SQL中LEFT JOIN的含義是__自然左外鏈接__。如果tbl_user記錄了學生的姓名(name)和學號(ID),tbl_score記錄了學生(有的學生考試以后被開除了,沒有其記錄)的學號(ID)
150、和考試成績(score)以及考試科目(subject),要想打印出各個學生姓名及對應的的各科總成績,則可以用SQL語句____。
151、在PHP中,heredoc是一種特殊的字符串,它的結束標志必須____。
152、寫一個函數,能夠遍歷一個文件夾下的所有文件和子文件夾。
答:
function my_scandir($dir)
{
$files = array();
if ( $handle = opendir($dir) ) {
while ( ($file = readdir($handle)) !== false ) {
if ( $file != ".." && $file != "." ) {
if ( is_dir($dir . "/" . $file) ) {
$files[$file] = scandir($dir . "/" . $file);
}else {
$files[] = $file;
}
}
}
closedir($handle);
return $files;
}
154、簡述論壇中無限分類的實現原理。
答:
/*
數據表結構如下:
CREATE TABLE `category` (
`categoryID` smallint(5) unsigned NOT NULL auto_increment,
`categoryParentID` smallint(5) unsigned NOT NULL default '0',
`categoryName` varchar(50) NOT NULL default '',
PRIMARY KEY (`categoryID`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
INSERT INTO `category` ( `categoryParentID`, `categoryName`) VALUES
(0, '一級類別'),
(1, '二級類別'),
(1, '二級類別'),
(1, '二級類別'),
(2, '三級類別'),
(2, '333332'),
(2, '234234'),
(3, 'aqqqqqd'),
(4, '哈哈'),
(5, '66333666');
*/
//指定分類id變量$category_id,然后返回該分類的所有子類
//$default_category為默認的選中的分類
function Get_Category($category_id = 0,$level = 0, $default_category = 0)
{
global $DB;
$sql = "SELECT * FROM category ORDER BY categoryID DESC";
$result = $DB->query( $sql );
while ($rows = $DB->fetch_array($result))
{
$category_array[$rows[categoryParentID]][$rows[categoryID]] = array('id' => $rows[categoryID], 'parent' => $rows[categoryParentID], 'name' => $rows
[categoryName]);
}
if (!isset($category_array[$category_id]))
{
return "";
}
foreach($category_array[$category_id] AS $key => $category)
{
if ($category['id'] == $default_category)
{
echo "
"; $c = new cate(); //$c->Get_Category(); $ttt= $c->getFlush($id,'0','3'); echo $ttt; echo "";
?>
155、寫出如下程序的輸出結果
$str1 = null;
$str2 = false;
echo $str1==$str2 ? ‘相等’ : ‘不相等’;
$str3 = ”;
$str4 = 0;
echo $str3==$str4 ? ‘相等’ : ‘不相等’;
$str5 = 0;
$str6 = ‘0′;
echo $str5===$str6 ? ‘相等’ : ‘不相等’;
?>
156、寫出如下程序的輸出結果
$a1 = null;
$a2 = false;
$a3 = 0;
$a4 = ”;
$a5 = ‘0′;
$a6 = ‘null’;
$a7 = array();
$a8 = array(array());
echo empty($a1) ? ‘true’ : ‘false’;
echo empty($a2) ? ‘true’ : ‘false’;
echo empty($a3) ? ‘true’ : ‘false’;
echo empty($a4) ? ‘true’ : ‘false’;
echo empty($a5) ? ‘true’ : ‘false’;
echo empty($a6) ? ‘true’ : ‘false’;
echo empty($a7) ? ‘true’ : ‘false’;
echo empty($a8) ? ‘true’ : ‘false’;
?>
157、寫出如下程序的輸出結果
$test = ‘aaaaaa’;
$abc = & $test;
unset($test);
echo $abc;
?>
158、寫出如下程序的輸出結果
159、$count = 5;
function get_count(){
static $count = 0;
return $count++;
}
echo $count;
++$count;
echo get_count();
echo get_count();
?>
155、寫出如下程序的輸出結果
$GLOBALS['var1'] = 5;
$var2 = 1;
function get_value(){
global $var2;
$var1 = 0;
return $var2++;
}
get_value();
echo $var1;
echo $var2;
?>
156、寫出如下程序的輸出結果
function get_arr($arr){
unset($arr[0]);
}
$arr1 = array(1, 2);
$arr2 = array(1, 2);
get_arr(&$arr1);
get_arr($arr2);
echo count($arr1);
echo count($arr2);
?>
157、使用五種以上方式獲取一個文件的擴展名
要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,
必須使用PHP自帶的處理函數進行處理,方法不能明顯重復,可以封裝成函數,比如 get_ext1($file_name), get_ext2($file_name)
158、使用PHP描述冒泡排序和快速排序算法,對象可以是一個數組
159、使用PHP描述順序查找和二分查找(也叫做折半查找)算法,順序查找必須考慮效率,對象可以是一個有序數組
160、寫一個二維數組排序算法函數,能夠具有通用性,可以調用php內置函數
【附答案】(以下答案不一定是最好的,只是一個簡單的參考)
1. 相等 相等 不相等
2. true true true true true false true false
3. aaaaaa
4. 5 0 1
5. 5 2
6. 1 2
7. 使用五種以上方式獲取一個文件的擴展名
function get_ext1($file_name){
return strrchr($file_name, ‘.’);
}
function get_ext2($file_name){
return substr($file_name, strrpos($file_name, ‘.’));
}
function get_ext3($file_name){
return array_pop(explode(‘.’, $file_name));
}
function get_ext4($file_name){
$p = pathinfo($file_name);
return $p['extension'];
}
function get_ext5($file_name){
return strrev(substr(strrev($file_name), 0, strpos(strrev($file_name), ‘.’)));
}
161、使用PHP描述冒泡排序和快速排序算法,對象可以是一個數組
//冒泡排序(數組排序)
function bubble_sort($array)
{
$count = count($array);
if ($count <= 0) return false;
for($i=0; $i<$count; $i++){
for($j=$count-1; $j>$i; $j–){
if ($array[$j] < $array[$j-1]){
$tmp = $array[$j];
$array[$j] = $array[$j-1];
$array[$j-1] = $tmp;
}
}
}
return $array;
}
//快速排序(數組排序)
function quick_sort($array) {
if (count($array) <= 1) return $array;
$key = $array[0];
$left_arr = array();
$right_arr = array();
for ($i=1; $i if ($array[$i] <= $key)
$left_arr[] = $array[$i];
else
$right_arr[] = $array[$i];
}
$left_arr = quick_sort($left_arr);
$right_arr = quick_sort($right_arr);
return array_merge($left_arr, array($key), $right_arr);
}
162、使用PHP描述順序查找和二分查找(也叫做折半查找)算法,順序查找必須考慮效率,對象可以是一個有序數組
//二分查找(數組里查找某個元素)
function bin_sch($array, $low, $high, $k){
if ($low <= $high){
$mid = intval(($low+$high)/2);
if ($array[$mid] == $k){
return $mid;
}elseif ($k < $array[$mid]){
return bin_sch($array, $low, $mid-1, $k);
}else{
return bin_sch($array, $mid+1, $high, $k);
}
}
return -1;
}
//順序查找(數組里查找某個元素)
function seq_sch($array, $n, $k){
$array[$n] = $k;
for($i=0; $i<$n; $i++){
if($array[$i]==$k){
break;
}
}
if ($i<$n){
return $i;
}else{
return -1;
}
}
163、寫一個二維數組排序算法函數,能夠具有通用性,可以調用php內置函數
//二維數組排序, $arr是數據,$keys是排序的健值,$order是排序規則,1是升序,0是降序
function array_sort($arr, $keys, $order=0) {
if (!is_array($arr)) {
return false;
}
$keysvalue = array();
foreach($arr as $key => $val) {
$keysvalue[$key] = $val[$keys];
}
if($order == 0){
asort($keysvalue);
}else {
arsort($keysvalue);
}
reset($keysvalue);
foreach($keysvalue as $key => $vals) {
$keysort[$key] = $key;
}
$new_array = array();
foreach($keysort as $key => $val) {
$new_array[$key] = $arr[$val];
}
return $new_array;
}
164、在PHP中,當前腳本的名稱(不包括路徑和查詢字符串)記錄在預定義變量(1)中;而鏈接到當前頁面的URL記錄在預定義變量(2)中。
165、執行程序段將輸出(3)。
166、在HTTP 1.0中,狀態碼 401 的含義是(4);如果返回“找不到文件”的提示,則可用 header 函數,其語句為(5)。
167、數組函數 arsort 的作用是(6);語句 error_reporting(2047)的作用是(7)。
168、PEAR中的數據庫連接字符串格式是(8)。
169、寫出一個正則表達式,過慮網頁上的所有JS/VBS腳本(即把script標記及其內容都去掉):(9)。
170、以Apache模塊的方式安裝PHP,在文件http.conf中首先要用語句(10)動態裝載PHP模塊,
然后再用語句(11)使得Apache把所有擴展名為php的文件都作為PHP腳本處理。
171、語句 include 和 require 都能把另外一個文件包含到當前文件中,它們的區別是(12);為了避免多次包含同一文件,可以用語句(13)來代替它們。
172、類的屬性可以序列化后保存到 session 中,從而以后可以恢復整個類,這要用到的函數是(14)。
173、一個函數的參數不能是對變量的引用,除非在php.ini中把(15)設為on.
174、SQL 中LEFT JOIN的含義是(16)。
如果 tbl_user記錄了學生的姓名(name)和學號(ID),
tbl_score記錄了學生(有的學生考試以后被開除了,沒有其記錄)的學號(ID)和考試成績(score)以及考試科目(subject),
要想打印出各個學生姓名及對應的的各科總成績,則可以用SQL語句(17)。
175、在PHP中,heredoc是一種特殊的字符串,它的結束標志必須(18)。
176、寫一個函數,能夠遍歷一個文件夾下的所有文件和子文件夾。
177、簡述論壇中無限分類的實現原理。
178、設計一個網頁,使得打開它時彈出一個全屏的窗口,該窗口中有一個文本框和一個按鈕。用戶在文本框中輸入信息后點擊按鈕就可以把窗口關閉,而輸入的信息卻在主網頁中顯示。
179、在PHP中,當前腳本的名稱(不包括路徑和查詢字符串)記錄在預定義變量(1)中;而鏈接到當前頁面的的前一頁面URL記錄在預定義變量(2)中
//本頁地址,SCRIPT_NAME也可以:php/test.php
echo $_SERVER['PHP_SELF'].”
”;
//鏈接到當前頁面的前一頁面的 URL 地址:
echo $_SERVER['HTTP_REFERER'].”
”;
//其它的見參考手冊:語言參考》變量》預定義變量
//前執行腳本的絕對路徑名:D:Inetpubwwwrootphp est.php
echo $_SERVER["SCRIPT_FILENAME"].”
”;
//正在瀏覽當前頁面用戶的 IP 地址:127.0.0.1
echo $_SERVER["REMOTE_ADDR"].”
”;
//查詢(query)的字符串(URL 中第一個問號 ? 之后的內容):id=1&bi=2
echo $_SERVER["QUERY_STRING"].”
”;
//當前運行腳本所在的文檔根目錄:d:inetpubwwwroot
echo $_SERVER["DOCUMENT_ROOT"].”
”;
?>
180、執行程序段將輸出__。
181、//參考手冊》語言參考》運算符》算術運算符》%為取模運算,輸出0
echo 8%(-2).”
”;
//取模 $a % $b 在 $a 為負值時的結果也是負值。輸出-2
echo ((-8)%3).”
”;
//輸出2
echo (8%(-3)).”
”;
?>
在HTTP 1.0中,狀態碼 401 的含義是____;如果返回“找不到文件”的提示,則可用 header 函數,其語句為____。
答:401表示未授權;header(“HTTP/1.0 404 Not Found”);[見參考手冊》函數參考》HTTP函數》header]
180、數組函數 arsort 的作用是____;語句 error_reporting(2047)的作用是____。
答:arsort:對數組進行逆向排序并保持索引關系 error_reporting(2047)的作用是:report All errors and warnings
181、寫出一個正則表達式,過慮網頁上的所有JS/VBS腳本(即把script標記及其內容都去掉):
$script=”以下內容不顯示:<script language=’javascript’>alert(‘cc’);</script>”;
echo preg_replace(“/<script[^>].*?>.*?</script>/si”, “替換內容”, $script);
?>
182、以Apache模塊的方式安裝PHP,在文件http.conf中首先要用語句____動態裝載PHP模塊,
然后再用語句____使得Apache把所有擴展名為php的文件都作為PHP腳本處理。
答:LoadModule php5_module “c:/php/php5apache2.dll”;AddType application/x-httpd-php .php
見參考手冊》目錄》II. 安裝與配置》6. Windows 系統下的安裝》Microsoft Windows 下的 Apache 2.0.x
183、語句 include 和 require 都能把另外一個文件包含到當前文件中,它們的區別是____;為了避免多次包含同一文件,可以用語句____來代替它們。
答:在如何處理失敗時,include() 產生一個警告而 require() 則導致一個致命錯誤;require_once()/include_once()
184、一個函數的參數不能是對變量的引用,除非在php.ini中把____設為on.
答:allow_call_time_pass_reference boolean :是否啟用在函數調用時強制參數被按照引用傳遞, 見參考手冊》附錄G
185、SQL 中LEFT JOIN的含義是__,如果 tbl_user記錄了學生的姓名(name)和學號(ID),
tbl_score記錄了學生(有的學生考試以后被開除了,沒有其記錄)的學號(ID)和考試成績(score)以及考試科目(subject),要想打印出各個學生姓名及對應的的各科總成績,則可以用SQL語句____.
答:自然左外連接
create database phpinterview;
use phpinterview
create table tbl_user
(
IDintnot null,
namevarchar(50)not null,
primary key (ID)
);
create table tbl_score
(
IDintnot null,
scoredec(6,2)not null,
subjectvarchar(20)not null
);
insert into tbl_user (ID, name) values (1, ‘beimu’);
insert into tbl_user (ID, name) values (2, ‘aihui’);
insert into tbl_score (ID, score, subject) values (1, 90, ‘語文’);
insert into tbl_score (ID, score, subject) values (1, 80, ‘數學’);
insert into tbl_score (ID, score, subject) values (2, 86, ‘數學’);
insert into tbl_score (ID, score, subject) values (2, 96, ‘語文’);
select A.id,sum(B.score) as sumscore
from tbl_user A left join tbl_score B
on A.ID=B.ID
group by A.id
186、在PHP中,heredoc是一種特殊的字符串,它的結束標志必須____
答:結束標識符所在的行不能包含任何其它字符除”;”
187、寫一個函數,能夠遍歷一個文件夾下的所有文件和子文件夾。
function my_scandir($dir)
{
$files=array();
if(is_dir($dir))
{
if($handle=opendir($dir))
{
while(($file=readdir($handle))!==false)
{
if($file!=”.” && $file!=”..”)
{
if(is_dir($dir.”/”.$file))
{
$files[$file]=my_scandir($dir.”/”.$file);
}
else
{
$files[]=$dir.”/”.$file;
}
}
}
closedir($handle);
return $files;
}
}
}
print_r(my_scandir(“D:Program FilesInternet ExplorerMUI”));
?>
188、在PHP中,當前腳本的名稱(不包括路徑和查詢字符串)記錄在預定義變量(1)中;而鏈接到當前頁面的的前一頁面URL記錄在預定義變量(2)中
//本頁地址,SCRIPT_NAME也可以:php/test.php
echo$_SERVER['PHP_SELF']."
";
//鏈接到當前頁面的前一頁面的URL 地址:
echo$_SERVER['HTTP_REFERER']."
";
//其它的見參考手冊:語言參考》變量》預定義變量
//前執行腳本的絕對路徑名:D:Inetpubwwwrootphp est.php
echo$_SERVER["SCRIPT_FILENAME"]."
";
//正在瀏覽當前頁面用戶的IP 地址:127.0.0.1
echo$_SERVER["REMOTE_ADDR"]."
";
//查詢(query)的字符串(URL 中第一個問號? 之后的內容):id=1&bi=2
echo$_SERVER["QUERY_STRING"]."
";
//當前運行腳本所在的文檔根目錄:d:inetpubwwwroot
echo$_SERVER["DOCUMENT_ROOT"]."
";
?>
189、執行程序段將輸出__。
//參考手冊》語言參考》運算符》算術運算符》%為取模運算,輸出0
echo8%(-2)."
";
//取模$a % $b 在$a 為負值時的結果也是負值。輸出-2
echo((-8)%3)."
";
//輸出2
echo(8%(-3))."
";
?>
190、在HTTP 1.0中,狀態碼 401 的含義是____;如果返回“找不到文件”的提示,則可用 header 函數,其語句為____。
答:401表示未授權;header("HTTP/1.0 404 Not Found");[見參考手冊》函數參考》HTTP函數》header]
191、數組函數 arsort 的作用是____;語句 error_reporting(2047)的作用是____。
答:arsort:對數組進行逆向排序并保持索引關系 error_reporting(2047)的作用是:report All errors and warnings
192、寫出一個正則表達式,過慮網頁上的所有JS/VBS腳本(即把script標記及其內容都去掉):
$script="以下內容不顯示:<script language='javascript'>alert('cc');</script>";
echopreg_replace("/<script[^>].*?>.*?</script>/si", "替換內容", $script);
?>
192、以Apache模塊的方式安裝PHP,在文件http.conf中首先要用語句____動態裝載PHP模塊,
然后再用語句____使得Apache把所有擴展名為php的文件都作為PHP腳本處理。
答:LoadModule php5_module "c:/php/php5apache2.dll";AddType application/x-httpd-php .php
見參考手冊》目錄》II. 安裝與配置》6. Windows 系統下的安裝》Microsoft Windows 下的Apache 2.0.x
193、語句 include 和 require 都能把另外一個文件包含到當前文件中,它們的區別是____;為了避免多次包含同一文件,可以用語句____來代替它們。
答:在如何處理失敗時,include()產生一個警告而 require()則導致一個致命錯誤;require_once()/include_once()
194、一個函數的參數不能是對變量的引用,除非在php.ini中把____設為on.
答:allow_call_time_pass_referenceboolean:是否啟用在函數調用時強制參數被按照引用傳遞, 見參考手冊》附錄G
195、SQL 中LEFT JOIN的含義是__,如果 tbl_user記錄了學生的姓名(name)和學號(ID),
tbl_score記錄了學生(有的學生考試以后被開除了,沒有其記錄)的學號(ID)和考試成績(score)以及考試科目(subject),要想打印出各個學生姓名及對應的的各科總成績,則可以用SQL語句____.
答:自然左外連接
createdatabasephpinterview;
usephpinterview
createtabletbl_user
(
ID intnotnull,
name varchar(50) notnull,
primarykey(ID)
);
createtabletbl_score
(
ID intnotnull,
score dec(6,2) notnull,
subject varchar(20) notnull
);
insertintotbl_user (ID, name)values(1,'beimu');
insertintotbl_user (ID, name)values(2,'aihui');
insertintotbl_score (ID, score, subject)values(1,90,'語文');
insertintotbl_score (ID, score, subject)values(1,80,'數學');
insertintotbl_score (ID, score, subject)values(2,86,'數學');
insertintotbl_score (ID, score, subject)values(2,96,'語文');
selectA.id,sum(B.score)assumscore
fromtbl_user Aleftjointbl_score B
onA.ID=B.ID
groupbyA.id
196、在PHP中,heredoc是一種特殊的字符串,它的結束標志必須____
答:結束標識符所在的行不能包含任何其它字符除";"
197、寫一個函數,能夠遍歷一個文件夾下的所有文件和子文件夾。
functionmy_scandir($dir)
{
$files=array();
if(is_dir($dir))
{
if($handle=opendir($dir))
{
while(($file=readdir($handle))!==false)
{
if($file!="." && $file!="..")
{
if(is_dir($dir."/".$file))
{
$files[$file]=my_scandir($dir."/".$file);
}
else
{
$files[]=$dir."/".$file;
}
}
}
closedir($handle);
return$files;
}
}
}
print_r(my_scandir("D:Program FilesInternet ExplorerMUI"));
?>
198、$arr = array('james', 'tom', 'symfony'); 請打印出第一個元素的值 (1分)
答:echo $array[0];
199、請將41題的數組的值用','號分隔并合并成字串輸出(1分)
答:for($i=0;$i
200、$a = 'abcdef'; 請取出$a的值并打印出第一個字母(1分)
答:echo $a{0} 或 echo substr($a,0,1)
201、PHP可以和sql server/oracle等數據庫連接嗎?(1分)
答:當然可以
202、請寫出PHP5權限控制修飾符(3分)
答:public(公共),private(私用),protected(繼承)
203、請寫出php5的構造函數和析構函數(2分)
答:__construct , __destruct
204、完成以下:
(一)創建新聞發布系統,表名為message有如下字段 (3分)
id 文章id
title 文章標題
content 文章內容
category_id 文章分類id
hits 點擊量
答:CREATE TABLE 'message'(
'id' int(10) NOT NULL auto_increment,
'title' varchar(200) default NULL,
'content' text,
'category_id' int(10) NOT NULL,
'hits' int(20),
PRIMARY KEY('id');
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
(二)同樣上述新聞發布系統:表comment記錄用戶回復內容,字段如下 (4分)
comment_id 回復id
id 文章id,關聯message表中的id
comment_content 回復內容
現通過查詢數據庫需要得到以下格式的文章標題列表,并按照回復數量排序,回復最高的排在最前面
文章id 文章標題 點擊量 回復數量
用一個SQL語句完成上述查詢,如果文章沒有回復則回復數量顯示為0
答:SELECT message.id id,message.title title,IF(message.`hits` IS NULL,0,message.`hits`) hits,
IF(comment.`id` is NULL,0,count(*)) number FROM message LEFT JOIN
comment ON message.id=comment.id GROUP BY message.`id`;
(三)上述內容管理系統,表category保存分類信息,字段如下 (3分)
category_id int(4) not null auto_increment;
categroy_name varchar(40) not null;
用戶輸入文章時,通過選擇下拉菜單選定文章分類
寫出如何實現這個下拉菜單
答:function categoryList()
{
$result=mysql_query("select category_id,categroy_name from category")
or die("Invalid query: " . mysql_error());
print("");
}
205、寫一個函數,盡可能高效的,從一個標準 url 里取出文件的擴展名
例如: http://www.sina.com.cn/abc/de/fg.php?id=1需要取出 php 或 .php
答案1:
function getExt($url){
$arr = parse_url($url);
$file = basename($arr['path']);
$ext = explode(".",$file);
return $ext[1];
}
答案2:
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);
}
}
206、在 HTML 語言中,頁面頭部的 meta 標記可以用來輸出文件的編碼格式,以下是一個標準的 meta 語句
請使用 PHP 語言寫一個函數,把一個標準 HTML 頁面中的類似 meta 標記中的 charset 部分值改為 big5
請注意:
1. 需要處理完整的 html 頁面,即不光此 meta 語句
2. 忽略大小寫
3. ' 和 " 在此處是可以互換的
4. 'Content-Type' 兩側的引號是可以忽略的,但 'text/html; charset=gbk' 兩側的不行
5. 注意處理多余空格
207、寫一個函數,算出兩個文件的相對路徑
如 $a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
計算出 $b 相對于 $a 的相對路徑應該是 ../../c/d將()添上
答: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);
208、在PHP中,當前腳本的名稱(不包括路徑和查詢字符串)記錄在預定義變量__$_SERVER['PHP_SELF']__中;而鏈接到當前頁面的URL記錄在預定義變量__$_SERVER['HTTP_REFERER']__
中
209、執行程序段將輸出__0__。
210、在HTTP 1.0中,狀態碼 401 的含義是____;如果返回“找不到文件”的提示,則可用 header 函數,其語句為____。
211、數組函數 arsort 的作用是__對數組進行逆向排序并保持索引關系__;語句 error_reporting(2047)的作用是__報告所有錯誤和警告__。
212、PEAR中的數據庫連接字符串格式是____。
213、寫出一個正則表達式,過慮網頁上的所有JS/VBS腳本(即把scrīpt標記及其內容都去掉):preg_replace("/<script[^>].*?>.*?</script>/si", "newinfo", $script);
214、以Apache模塊的方式安裝PHP,在文件http.conf中首先要用語句____動態裝載PHP模塊,然后再用語句____使得Apache把所有擴展名為php的文件都作為PHP腳本處理。
LoadModule php5_module "c:/php/php5apache2.dll" , AddType application/x-httpd-php .php,
215、語句 include 和 require 都能把另外一個文件包含到當前文件中,它們的區別是____;為了避免多次包含同一文件,可以用語句__require_once||include_once__來代替它們。
216、類的屬性可以序列化后保存到 session 中,從而以后可以恢復整個類,這要用到的函數是____。
217、一個函數的參數不能是對變量的引用,除非在php.ini中把__allow_call_time_pass_reference boolean__設為on.
218、SQL中LEFT JOIN的含義是__自然左外鏈接__。如果 tbl_user記錄了學生的姓名(name)和學號(ID),tbl_score記錄了學生(有的學生考試以后被開除了,沒有其記錄)的學號(ID)
和考試成績(score)以及考試科目(subject),要想打印出各個學生姓名及對應的的各科總成績,則可以用SQL語句____。
219、在PHP中,heredoc是一種特殊的字符串,它的結束標志必須____。
220、寫一個函數,能夠遍歷一個文件夾下的所有文件和子文件夾。
答:
function my_scandir($dir)
{
$files = array();
if ( $handle = opendir($dir) ) {
while ( ($file = readdir($handle)) !== false ) {
if ( $file != ".." && $file != "." ) {
if ( is_dir($dir . "/" . $file) ) {
$files[$file] = scandir($dir . "/" . $file);
}else {
$files[] = $file;
}
}
}
closedir($handle);
return $files;
}
}
221、簡述論壇中無限分類的實現原理。
答:
/*
數據表結構如下:
CREATE TABLE `category` (
`categoryID` smallint(5) unsigned NOT NULL auto_increment,
`categoryParentID` smallint(5) unsigned NOT NULL default '0',
`categoryName` varchar(50) NOT NULL default '',
PRIMARY KEY (`categoryID`)
) ENGINE=MyISAM DEFAULT CHARSET=gbk;
INSERT INTO `category` ( `categoryParentID`, `categoryName`) VALUES
(0, '一級類別'),
(1, '二級類別'),
(1, '二級類別'),
(1, '二級類別'),
(2, '三級類別'),
(2, '333332'),
(2, '234234'),
(3, 'aqqqqqd'),
(4, '哈哈'),
(5, '66333666');
*/
//指定分類id變量$category_id,然后返回該分類的所有子類
//$default_category為默認的選中的分類
function Get_Category($category_id = 0,$level = 0, $default_category = 0)
{
global $DB;
$sql = "SELECT * FROM category ORDER BY categoryID DESC";
$result = $DB->query( $sql );
while ($rows = $DB->fetch_array($result))
{
$category_array[$rows[categoryParentID]][$rows[categoryID]] = array('id' => $rows[categoryID], 'parent' => $rows[categoryParentID], 'name' => $rows
[categoryName]);
}
if (!isset($category_array[$category_id]))
{
return "";
}
foreach($category_array[$category_id] AS $key => $category)
{
if ($category['id'] == $default_category)
{
echo "
\n"; }else{ $txt1 = ">" . $cate['name'] . "\n"; } $val = $txt.$txt1; echo $val; self::Get_Category($key, $level + 1, $default_category); } } function getFlush($category_id = 0,$level = 0, $default_category = 0) { ob_start();
self::Get_Category($category_id ,$level, $default_category);
$out = ob_get_contents();
ob_end_clean();
return $out;
}
}
$id =$_GET['id'];
echo "";
?>
222、要求在一組數中,插入一個新數,并維護原來的排序方式不變
223、用二分法在一個數組中查找你所需元素
224、打印一個楊輝三角
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
225、使用PHP描述冒泡排序和快速排序算法,對象可以是一個數組
226、寫一個二維數組排序函數,能夠具有通用性
227、寫一個function實現數組內每個元素之間加法的遞代運算?
注:數組元素全部為自然數.
例:
$data=array(1,2,3);
程序要求打印出數組每個數組元素相互之間各種可能性加法(包括元素自已本身加法)
1+1=2,1+2=3,1+3=5,
2+2=4,2+3=5,
3+3=6
打印出以下結果
Array
(
[0] => Array
(
[0] => 2
[1] => 3
[2] => 4
)
[1] => Array
(
[1] => 4
[2] => 5
)
[2] => Array
(
[2] => 6
)
)
228、設有n 種物品,每種物品有一個重量及一個價值。但每種物品的數量是無限的,同時有一個背包,最大載重量為M,今從n 種物品中選取若干件(同一種物品可以多次選取),使其重量的和小于等于M,而價值的和為最大。
229、設隨機抽到A的概率為0.1,B的概率為0.2,C的概率為0.3,D的概率為0.4,現在求按此概率隨機抽出一個字母的算法,
230、一個小孩買了價值少于1美元的糖,并將1美元的錢交給售貨員。售貨員希望用數目最少的硬幣個數找給小孩。假設提供了數目不限的面值為2 5美分、1 0美分、5美分、及1美分的硬幣,寫一個算法讓售貨員用最少的硬幣個數找給小孩
231、五只猴子采得一堆桃子,猴子彼此約定隔天早起后再分食。不過,就在半夜里,一只猴子偷偷起來,把桃子均分成五堆后,發現還多一個,它吃掉這桃子,并拿走了其中一堆。第二只猴子醒來,又把桃子均分成五堆后,還是多了一個,它也吃掉這個桃子,并拿走了其中一堆。第三只,第四只,第五只猴子都依次如此分食桃子。那么桃子數最少應該有幾個呢?
232、公雞3元每只,母雞5元每只,小雞1元3只,一百元錢買一百只雞。請求出公雞,母雞和小雞的數目。
233、小猴第一天摘下若干棗子,當即吃掉了一半,不過癮又多吃了一個;第二天吃了剩下的一半又多吃了一個;以后每一天都吃了前一天剩下的一半多一個。到第十天小猴再想吃時,見到只剩下一只棗子了。問第一天這堆棗子有多少?
234、有一艘大船準備用來裝載貨物。所有待裝貨物都裝在貨箱中且所有貨箱的大小都一樣,但貨箱的重量都各不相同。設第i 個貨箱的重量為wi(1≤i≤n),而貨船的最大載重量為c,如何在貨船上裝入最多的貨物。
235、小球從10米高處自由下落,每次彈起的高度是下落高度的70%,當小球彈起的高度不足原高度的千分之一時,小球很快會停止跳動,計算小球在整個彈跳過程中所經歷的總路程(忽略彈起高度不足原高度千分之一的部分)。
236、JS下有一個字符串var str = '1|2|3|4|5|6#1|2|3|4#1|2|3|4|5|6|7|8'; 請用“#”號將其分割為數組,再用“|”將其分割為2維數組。可以用例如ary[0][0]這樣的各式取出數組中的每個元素。最后輸出其中最長數組的編號(1,2,3這樣的自然數),這個數組中元素的個數。以及大數組中每個元素。如圖:
228、假設數據庫中有兩個表table1和table2,這兩個表結構相同,都有三個字段id、name和description,分別存放編號、名稱和描述。
現在請做一個頁面,包含兩個下拉菜單,第一個下拉菜單內是table1中的name,第二個下拉菜單內是table2中的name。下拉菜單的默認值是無,當選擇了table1中的任意一個name時,出現一個textarea框顯示name對應的description。當選擇了table2中的任意一個name時,出現一個textarea框顯示name對應的description,并且保留上一個下拉菜單的值和textarea中的值。Textarea中的值可修改,需要做到修改第一個textarea的值,然后更改第二個下拉菜單的值后,第一個textarea中的修改值仍然保留。最后是一個提交按鈕,只有按下提交按鈕,才會把textarea中的數據才會存入數據庫。如圖:
默認界面:
選擇第一個下拉菜單的值:
修改第一個菜單的中描述的值,然后選擇第二個菜單的name值
提交后才會存入數據庫:
238、有一個數組array('a','b','c','d','e','f'),請使用兩段代碼分別達成圖1和圖2中的效果。
圖1:
圖2:
239、請使用一句話將類似“1910-09-09”的日期各式轉換為“一九一零年九月九日”這樣的各式。(需要有通用性,是不是一句話不是關鍵,但不允許使用if\switch\while\for等語句)。
240、有一張表test,包含四個字段id, question, answer,rank里面有1000條數據。要求做一個頁面,隨機抽取50道題目(都是單選題),分頁顯示所有的題目,每頁顯示1題。按鈕包含:第一題—上一頁—當前第N題—下一頁—最后一題。交卷后將每一題的答案和數據庫中的標準答案作比較,相同+2分,最后得出成績存入rank。
241、簡述如何得到當前執行腳本路徑,包括所得到參數。
說明:例如有一個腳本www.domain.com,傳給他的參數有參數1,參數2,參數3….
傳遞參數的方法有可能是GET有可能是POST,那么現在請寫出類似
http://www.domain.com/script.php? 參數1=值1&參數2=值2..... 的結果
238、寫出一個能創建多級目錄的PHP函數
239、有一個留言板,用mysql做數據庫
用戶信息包括:用戶名,密碼,email
留言內容包括:留言ID,標題,內容,發表時間,狀態(審核,未審核)
請實現下列需求:
1)數據庫結構。無需寫建表語句,用類似下面的表格,描述清楚即可
表明
table_aaa
字段名
字段說明
字段類型
索引
name
姓名
Varchar(64)
唯一索引
gender
性別
Enum(‘M’,‘F’)
注意,要在索引欄中注明是否需要創建索引,以及要創建的索引的類型
用一個sql語句查詢出發表留言數量大于10條的用戶名及其留言數量,查詢結果按留言數量降序排列
240、寫出php的public、protected、private三種訪問控制模式的區別
241、給你三個數,寫程序求出其最大值。
242、25、寫出查詢發貼數最多的十個人名字的SQL,利用下表:
members(id,username,posts,pass,email)
243、如何通過javascript判斷一個窗口是否已經被屏蔽。
244、有一數組 $a=array(4,3,8,9,2);請將其重新排序(按從小到大的順序列出)。
245、寫出匹配郵箱地址和URL的兩個正則表達式。類似下面的:
郵箱地址:user_name.first@hztraining.com
URL地址:http://www.hztraining.com/user_profile.php?uid=100
246、對于大流量的網站,您采用什么樣的方法來解決訪問量問題?
247、MySQL數據庫,一天一萬條以上的增量,怎么優化?
248、寫個函數來解決多線程同時讀寫一個文件的問題。
249、一個一維數組,里面存儲整形數據,請寫一個函數,將他們按從大到小的順序排列。要求執行效率高。并說明如何改善執行效率。(該函數必須自己實現,不能使用php函數)
250、寫一個函數,算出兩個文件的相對路徑
如$a = '/a/b/c/d/e.php';
$b = '/a/b/12/34/c.php';
計算出$b 相對于$a 的相對路徑應該是../../c/d將()添上
251、用寫一個類實現會員管理,要求實現:
1)用文件存儲會員信息,會員注冊輸入用戶名和電子郵件就行。
2)用戶信息包括:用戶名,電子郵件。
3)要求用戶可以登錄、退出和注銷用戶。
4)如果用戶沒有退出,下次登錄自動顯示用戶名。
5)保存用戶上次瀏覽時間。