PHP筆試之填空題

1、判斷一個變量是否存在的函數:isset
判斷一個變量是否為null的函數:is_null
判斷一個變量是否為空的函數:empty
銷毀一個變量的函數:unset

2****、 $a =array(1,2); unset($a[0]); print_r($a); echo count($a); 請寫出輸出結果:
答:array(1=>2) ; 1

**3、 **$str = '2012/12/21';
echo ereg_replace("([0-9]+)/([0-9]+)/([0-9]+)","\1/\2/\3",$str);
請寫出輸出結果:'2012/12/21'

**4、 **$a = "aaa"; $b ="bbb"; ①$c = "$a$b"; ②$c = $a.$b; 請問①和②誰執行得更快?
答:②

**5、 **打印一個用‘.’鏈接的字符串時候,還可以用什么代替‘.’鏈接效率更高些?
答:可以用‘,’代替‘.’。‘,’效率更高。

**6、 **函數strpos的原型為:int strpos(string haystack,stringneedle [,int offset]),
用來從haystack中查找needle,如果找到則返回needle在haystack的偏移,否則返回false。問:如何區分strpos返回false和返回0?
答:采用絕對等于進行判斷。==是不判斷二者是否是同一數據類型,而===是更為嚴格的比較,它不但要求二者值相等,而且還要求它們的數據類 型也相同。

**7、 **請列出您所知道的PHP模版對象
答:smarty,常見的還有PHPLib,FastTemplate,Savant

**8、 **請寫出php腳本中執行SHELL命令的方法,要求至少寫兩種。
答:①string exec(stringcommand[,array output[,int return_var]])它返回輸出的最后一行,還可以通過可選參數output將exec指定的命令結束時的每一 行輸出。
② String system(String command[,int return_var])直接將命令輸出返回給調用者。
③ void passthru(String command[,int returan_var])向調用者返回二進制輸出。
④ string shell_exec ( string $cmd )將字符串當做shell命令來執行,并返回所有輸出。
⑤ resource popen ( string $command , string $mode ) 打開一個指向進程的管道,該進程由派生指定的 command 命令執行而產生。

**9、 **請寫出pHp變量序列化和反序列化的函數,并舉出1個應用例子
答:serialize()/unserialize().

**10、 **在WWW應用的pHp程序中,如何捕捉頁面緩存的輸出?
答:ob_start() ;打開緩存區,將已載入的內容加載到緩存區。 ob_get_contents();獲取緩存區內容,經典用法 $str=ob_get_contents();
Ob_clean();僅僅清空緩沖區中的內容; ob_end_clean();清除緩沖區中緩存內容,并關閉輸出緩沖區。
ob_start() 函數出現后開始所有的輸出內容將被緩存,不被輸出,直到出現 ob_end_clean() 函數。ob_end_clean()以后輸出內容不再被緩存而且把以 前的緩存內容清空掉。所以為了使用剛剛緩存了的內容必須在ob_end_clean()函數出現之前使用ob_get_contents() 函數提取已經緩存了的內容。
ob_clean()和ob_end_clean()有什么區別呢?
ob_clean 只是清除緩沖區中的內容.ob_end_clean比ob_clean多做一些事情.就是關閉緩沖區.
ob_flush();刷新緩存區,將緩沖區內容輸出;
ob_get_length();返回緩沖區中緩存內容的長度。
ob_get_clean();獲取當前緩沖區中的內容,并刪除輸出緩沖區。

**11、 **執行第一段代碼,你覺得結果可能是多少?
$a = array(1,2);
$b = array(3,4);
var_dump($a+$b);
再執行第二段代碼,結果又是多少呢?
$a = array(1,2);
$b = array('2'=>3,'3'=>4);
var_dump($a+$b);
答:第一段代碼結果是array(2) { [0]=> int(1) [1]=> int(2) }
第二段代碼結果是array(4) { [0]=> int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) }
這是因為php對數組相加的處理是當$a+$b時,如果$b數組中有與$a數組中不同的鍵,則把$b不同的數組項附加到$a數組中,并返回這個數組.
你可能會想到既然有加,是不是會有減呢,很抱歉,減是不可以的,無法通過語法檢查

**12、 **echo 3|4;請問輸出:
答:7

13、echo count('12asssss');
答:1

**14、 **用PHP打印出前一天的時間格式是2006-5-10 22:21:21
答:echo date(‘Y-n-d H:i:s’, strtotime(‘-1 day’));

**15、 **使用哪些工具進行版本控制?
答:cvs,svn,vss;

16****、如何實現字符串翻轉?
答:string strrev( string $string
)---php內置字符串反轉函數。
function str_strrev($str)
{
$len=strlen($str);
$newstr = "";
for($i=$len-1;$i>=0;--$i)
{
$newstr .= $str[$i];
}
return $newstr;
}

17、MySQL取得當前時間的函數是?,格式化日期的函數是
答:①curtime()/current_time()—返回當前時間
②curdate()/current_date()—返回當前日期
③now()—返回函數執行時的時間日期
④sysdate()—返回當時實時的時間。
⑤uninx_timestamp()—返回當前時間日期的unix時間戳。
Date_format(date,format)—格式化日期的函數

18、用PHP寫出顯示客戶端IP與服務器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 = $_SERVER['REMOTE_ADDR'];
}
return $client_ip;
}
1.REMOTE_ADDR:瀏覽當前頁面的用戶計算機的ip地址2.HTTP_X_FORWARDED_FOR: 瀏覽當前頁面的用戶計算機的網關3.HTTP_CLIENT_IP:客戶端的ip
在PHP 中使用 $_SERVER["REMOTE_ADDR"] 來取得客戶端的 IP 地址。但如果客戶端是使用代理服務器來訪問,那取到的就是代理服務器的 IP 地址,而不是真正的客戶端 IP 地址。要想透過代理服務器取得客戶端的真實 IP 地址,就要使用$_SERVER["HTTP_X_FORWARDED_FOR"] 來讀取。
不過要注意,并不是每個代理服務器都能用$_SERVER["HTTP_X_FORWARDED_FOR"] 來讀取客戶端的真實 IP,有些用此方法讀取到的仍然是代理服務器的 IP。
在PHP 中使用 $_SERVER["REMOTE_ADDR"] 來取得客戶端的 IP 地址,但如果客戶端是使用代理服務器來訪問,那取到的就是代理服務器的 IP地址,而不是真正的客戶端 IP 地址。要想透過代理服務器取得客戶端的真實 IP 地址,就要使用 $_SERVER["HTTP_X_FORWARDED_FOR"] 來讀取。不過要注意的事,并不是每個代理服務器都能用$_SERVER["HTTP_X_FORWARDED_FOR"] 來讀取客戶端的真實 IP,有些用此方法讀取到的仍然是代理服務器的 IP。
服務器端IP相關的變量

  1. $_SERVER["SERVER_NAME"],需要使用函數gethostbyname()獲得。這個變量無論在服務器端還是客戶端均能正確顯示。(gethostbyname($_SERVER["SERVER_NAME"]);)
  2. $_SERVER["SERVER_ADDR"],在服務器端測試:127.0.0.1(這個與httpd.conf中BindAddress的設置值相關)。在客戶端測試結果正確。

19、如何修改SESSION的生存時間
答:①修改php.ini中的session.gc_maxlifetime(After this number of seconds, stored data willbe seen as 'garbage' and cleaned up by the garbage collection process.),然后重啟apache。(注意:即使設置了垃圾回收的有效時間,但是能夠觸發垃圾回收器還存在一定的概率。session.gc_probability = 1(啟動垃圾回收進程的幾率);session.gc_divisor = 1000(啟動垃圾回收進程幾率因子,當前為千分之幾); Define the probability that the'garbage collection' process is started. on every session initialization. Theprobability is calculated by using gc_probability/gc_divisor, e.g. 1/100 meansthere is a 1% chance that the GC process starts on each request.每次請求觸發垃圾回收進程的幾率)。
②通過string session_save_path([ string $path ] )設置存儲session文件的路徑和session_set_cookie_params(ini$lifetime,…)設置session回話cookie的有關參數(主要是session的生存周期),并且僅僅對當前執行php腳本有效。因此,如果對其他腳本設置,需要在啟動session_start前調用該函數。
③通過setcookie()函數設置存儲session_id信息的cookie生存周期,來控制session的生存周期,如下:setcookie(session_name(),session_id(),time()+N);

20、有一個網頁地址, 比如PHP開發資源網主頁: http://www.phpres.com/index.html,如何得到它的內容?
答:①采用file_get_contents:
$url =" http://www.phpres.com/index.html";
$contents= file_get_contents($url);
②采用curl:
$url =" http://www.phpres.com/index.html";
$ch =curl_init();
$timeout= 5;
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT, $timeout);
//在需要用戶檢測的網頁里需要增加下面兩行
//curl_setopt($ch,CURLOPT_HTTPAUTH, CURLAUTH_ANY);
//curl_setopt($ch,CURLOPT_USERPWD, US_NAME.":".US_PWD);
$contents= curl_exec($ch);
curl_close($ch);
echo$contents;
③采用fopen->fread->fclose
$url =" http://www.phpres.com/index.html";
$handle =fopen ($url, "rb");
$contents= "";
do {
$data =fread($handle, 1024);
if(strlen($data) == 0) {
break;
}
$contents.= $data;
}while(true);
fclose($handle);
echo$contents;

21、在PHP中,heredoc是一種特殊的字符串,它的注意事項有?
答:①開始和結束標示符必須相同,且標示符必須完全由字母數字字符和下劃線組成,而且不能以數字和下劃線開頭。
②開始標示符前面必須有三個左尖括號:<<<。
③heredoc語法與雙引號界定的字符串遵循相同的解析規則。即,變量和轉義序列都將得到解析。唯一的區別是:此處的雙引號不需要轉義。
④結束符必須在一行的開始處,而且前面不能有空格或任何其他多余的字符。此外,開始和結束標示符后面的任何空格都會導致語法錯誤。

22、寫出發貼數最多的十個人名字的SQL,利用下表:members(id,username,posts,pass,email)
答:SELECT username FROM members GROUP BY id ORDER BY COUNT(id) DESC limit0,10;

23、在PHP中error_reporting這個函數有什么作用?
答:設置錯誤報告的級別。該參數可以是一個任意的表示二進制位字段的整數,或者常數名稱。

24、請寫一個函數驗證電子郵件的格式是否正確
答:/^([_a-z0-9-]+)(.[_a-z0-9-]+)@([a-z0-9-]+)(.[a-z0-9-]+)(.[a-z]{2,4})$/

25、簡述如何得到當前執行腳本路徑,包括所得到參數。
答:$_SERVER[HTTP_HOST].$_SERVER[PHP_SELF].’?’.$_SERVER[QUERY_STRING];

26、js表單彈出對話框函數是?獲得輸入焦點函數是?
答:彈出對話框: alert(),prompt(),confirm()
獲得輸入焦點 focus()

27、JS的轉向函數是?怎么引入一個外部JS文件?
答:window.location.href;
<script type=”text/JavaScript” src=”URL”></scirpt>

28、foo()和@foo()之間有什么區別?
答:foo();調用一個函數@foo();調用一個函數,如果調用有錯誤,則忽略

29、mysql_fetch_row() 和mysql_fetch_array之間有什么區別?
答:mysql_fetch_row是從結果集取出1行數組,作為枚舉
mysql_fetch_array是從結果集取出一行數組作為關聯數組,或數字數組,兩者兼得

30、GD庫是做什么用的?
答:gd庫提供了一系列用來處理圖片的功能,使用GD庫可以處理圖片,或者生成圖片。在網站上GD庫通常用來生成縮略圖或者用來對圖片加水印或者對網站數據生成報表。

31、指出一些在PHP輸入一段HTML代碼的辦法。
答:

32、下面的程序會輸入是否?(1分)
  $num = 10;
  function multiply(){
  $num = $num * 10;
  }
  multiply();
  echo $num;
答:10

33、使用php寫一段簡單查詢,查出所有姓名為“張三”的內容并打印出來 (2分)
  表名 UserName 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);
$query = mysql_query(“select * fromtable_name where username=’張三’”,$mysql_db);
While($row =mysql_fetch_array($query)){
Print_r($row);
}

34、MySQ自增類型(通常為表ID字段)必需將其設為(?)字段
答:auto_increment

35、寫出以下程序的輸出結果 (1分)
  $b=201;
  $c=40;
  $a=$b>$c?4:5;
  echo $a;
答:4

36、取得查詢結果集總數的函數是?獲取更新操作影響的總數量的函數是?
答:mysql_num_rows($result);mysql_affected_rows($result);

37、$arr = array('james', 'tom', 'symfony'); 請打印出第一個元素的值
答:echo $arr[0];

38、請將37題的數組的值用','號分隔并合并成字串輸出
答:echo implode(“,”,$arr);

39、$a = 'abcdef'; 請取出$a的值并打印出第一個字母
答:echo $a[0] 或 echo substr($a,0,1)

40、請寫出PHP5權限控制修飾符
答:public(公共),private(私用),protected(繼承)

41、在PHP中,當前腳本的名稱(不包括路徑和查詢字符串)記錄在預定義變量____中;而鏈接到當前頁面的URL記錄在預定義變量____中。
答:$_server[SCRIPT_NAME];$_server[HTTP_REFERER];

42、在HTTP 1.0中,狀態碼 401 的含義是狀態401代表未被授權;如果返回“找不到文件”的提示,則可用 header 函數,其語句為header(“HTTP/1.1404 Not Find”)
答:①狀態401代表未被授權_②header(“HTTP/1.0 404 Not Found”);

43、數組函數 arsort 的作用是____;語句 error_reporting(2047)的作用是____。
答:arsort()本函數對數組進行逆序排序,數組的索引保持和單元的關聯。
error_reporting(2047)的作用是:report All errors and warnings

44、PEAR中的數據庫連接字符串格式是____。
答: 一般來說,$dsn是一個字符串,它的格式如下:
phptype(dbsyntax)://username:password@protocol+hostspec/database

  • phptype: php后端數據庫的類型名稱(如mysql,odbc 等等.)
  • dbsyntax: 數據庫所使用的SQL語法標準,一般不用。
  • protocol: 使用的通訊協議。(如tcp, unix 等等.)
  • hostspec: 數據庫所在的主機的描述。(形式是:主機名[:端口號])
  • database: 數據庫的名稱。
  • username: 登陸的用戶名。
  • password: 登陸的密碼。
    例如:$dsn ="mysql://root:123@192.168.0.1/testdb";

45、寫出一個正則表達式,過慮網頁上的所有JS/VBS腳本(即把script標記及其內容都去掉):____。
答:preg_replace('/<script[^>]?>.?</script>/is','',$a);注意:1、“<>”尖括號好不需要轉義2、“*?”這是由貪婪匹配轉換成惰性匹配。

46、以Apache模塊的方式安裝PHP,在文件http.conf中首先要用語句____動態裝載PHP模塊,然后再用語句____使得Apache把所有擴展名為php的文件都作為PHP腳本處理。
答:LoadModule php5_module "c:/php/php5apache2.dll";
AddType application/x-httpd-php .php .phtml;

47、類的屬性可以序列化后保存到 session 中,從而以后可以恢復整個類,這要用到的函數是____。
答:serialize|unserialize

48、一個函數的參數不能是對變量的引用,除非在php.ini中把____設為on.
答:allow_call_time_pass_reference
It's notpossible to decide to force a variable to be passed by reference when calling afunction. The PHP 4 style to do this isby making the function require the relevant argument by reference.

49、SQL中LEFT JOIN的含義是____。如果 tbl_user記錄了學生的姓名(name)和學號(ID),tbl_score記錄了學生(有的學生考試以后被開除了,沒有其記錄)的學號(ID)和考試成績(score)以及考試科目(subject),要想打印出各個學生姓名及對應的的各科總成績,則可以用SQL語句____。
答:左連接;
selectu.uid,u.name,s.subject,s.score from tbl_user u left join tbl_score s onu.uid=s.uid。

50、向執行php腳本,傳入參數的兩種方法。
答:①采用$argc和$argv的方式。
<?php
if($argc> 1){
print_r($argv);
}
命令行下運行的方式是php test.php a b,獲取到得結果為:
Array(
[0] => G:\php\test\test.php
[1] => a
[2] => b
)
②使用getopt函數(): array getopt ( string $options [, array $longopts ] ) 從命令行參數列表中獲取選項
<?php
$options = "f:g:";
$opts = getopt($options);
print_r($opts);
在命令行下運行 /usr/local/php/bin/php test.php -f 123 -g456輸出結果為:
Array(
[f] => 123
[g] => 456
)

51、有一個IP地址(192.168.0.1),請寫出其32位無符號整數形式。
答:

52、實現中文字串截取無亂碼的方法。
答: string mb_substr ( string $str , int$start [, int $length [, string $encoding ]] )

53、執行程序段<?php echo 8%(-2); ?>將輸出?
答:0(正常計算,與正負號無關)

54、PHP的意思?
答:PHP超文本預處理語言,是一個基于服務端來創建動態網站的腳本語言,您可以用PHP和HTML生成網站主頁。

55、請舉例說明在你的開發過程中用什么方法來加快頁面的加載速
答:要用到服務器資源時才打開,及時關閉服務器資源,數據庫添加索引,頁面可生成靜態,圖片等大文件單獨服務器。使用代碼優化工具啦,采用緩存隊列。

56、sort()、asort()、和 ksort() 有什么分別?它們分別在什么情況下使用?
答:①sort()根據陣列中元素的值,以英文字母順序排序,索引鍵會由 0 到 n-1 重新編號。主要是當陣列索引鍵的值無關疼癢時用來把陣列排序。
②asort()與 sort() 一樣把陣列的元素按英文字母順序來排列,不同的是所有索引鍵都獲得保留,特別適合替聯想陣列排序。
③ksort()根據陣列中索引鍵的值,以英文字母順序排序,特別適合用于希望把索引鍵排序的聯想陣列。

57、"==="是什么?試舉一個"=="是真但"==="是假的例子。
答:"==="是絕對等于的判斷,在比較過程中即比較變量的值是否相等,還比較變量類型是否相同。strpos() 和 strrpos() 便是其中兩個例子。
if (strpos("abc", "a") ==true){ // 這部分永不會被執行,因為 "a" 的位置是 0,換算成布爾值"假"}if (strpos("abc","a") === true){ // 這部份會被執行,因為"==="保證函式 strpos() 的送回值不會換算成布爾值.}

58、抓取遠程圖片到本地,你會用什么函數?
答:file_get_contents()

59、簡述POST 和GET傳輸的最大容量分別是多少?
答:GET是通過URL提交數據,那么GET可提交的數據量就跟URL的長度有直接關系了。而實際上,URL不存在參數上限的問題,HTTP協議規范沒有對URL長度進行限制。這個限制是特定的瀏覽器及服務器對它的限制。IE對URL長度的限制是2083字節(2K+35)。對于其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決于操作系統的支持.
POST理論上講是沒有大小限制的,HTTP協議規范也沒有進行大小限制,POST數據是沒有限制的,起限制作用的是服務器的處理程序的處理能力。例如php.ini中有一個參數
post_max_size(Maximumsize of POST data that PHP will accept)限制post大小。

60、將1234567890轉換成1,234,567,890 每3位用逗號隔開的形式。
答:string number_format ( float$number [, int $decimals = 0 ] )

61、Php中如何判斷一個字符串是否是合法的日期模式:2007-03-13 13:13:13 。要求代碼不超過5行。
答:if(preg_match("/\d{4}-\d{2}-\d{2}\d{2}:\d{2}:\d{2}/", $str)){
Echo “符合”;
}else{
Echo “不符合”;
}

62、zend optimizer是什么
答:Zend Optimizer用優化代碼的方法來提高php應用程序的執行速度。實現的原理是對那些在被最終執行之前由運行編譯器(Run-TimeCompiler)產生的代碼進行優化。

63、寫出下列程序的輸出結果。
<?php
classa{
protected $c;
public function a(){
$this ->c=10;
}
}

class b extends a{
public function print_data(){
return $this->c;
}
}

$b=new b();
echo $b ->print_data();
?>
答:10。當父類有構造函數,子類沒有構造函數時,實例化子類過程中,子類會自動調用父類的構造函數;而如果子類有構造函數,則不管父類是否有構造函數,在實例化子類的過程中,子類都不會自動調用父類構造函數,除非子類顯示的調用父類的構造函數。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • php.ini設置,上傳大文件: post_max_size = 128Mupload_max_filesize ...
    bycall閱讀 6,822評論 3 64
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,837評論 18 139
  • 1.表單中get與post提交方法的區別? 答:get是發送請求HTTP協議通過url參數傳遞進行接收,而post...
    fuyou2324閱讀 1,031評論 0 10
  • 一、php可以做什么 php是一種可以在服務器端運行的編程語言,可以運行在Web服務器端。 php是一門后臺編程語...
    空谷悠閱讀 3,133評論 4 97
  • 思路
    遇見番茄大人閱讀 184評論 0 0