1. 程式人生 > >php的一些題目1

php的一些題目1

  1. Http 和Https的區別

    第一:http是超文字傳輸協議,資訊是明文傳輸,https是具有安全性的ssl加密傳輸協議
    第二:http和https使用的是完全不同的連線方式,埠也不一樣,前者80 或者443
    第三:http連線很簡單,是無狀態的。https協議是由ssl+http協議構建的可進行加密傳輸,身份認證的網路協議。
    
  2. 什麼方法來加快頁面的載入速度

    1,用到伺服器資源時在開啟,不用時,立即關閉伺服器資源。
    2,資料庫新增索引
    3,頁面可生成靜態
    4,圖片等大檔案單獨放在一個伺服器
    5,能不查詢資料庫的儘量不去資料取資料,可以放在快取中。
    
  3. 表單中 get與post提交方法的區別?

    答:get是傳送請求HTTP協議通過url引數傳遞進行接收,而post是實體資料,可以通過表單提交大量資訊.
    
  4. echo ,print,print_r 的區別:

    echo 是php語句,無返回值。
    print,print_r是函式,有返回值。
    print()    只能打印出簡單型別變數的值(如int,string)
    print_r() 可以打印出複雜型別變數的值(如陣列,物件)
    echo     輸出一個或者多個字串
    
  5. session與cookie區別

    session與cookie相同:跨頁面、不跨使用者
    session與cookie不相同:
    1、session可以儲存任意型別的資料,但cookie只能儲存字串
    2、cookie產生在伺服器端、儲存在客戶端
    session產生在伺服器端、儲存在伺服器端
    
  6. 魔術常量

    __LINE__檔案中的當前行號。
    __FILE__檔案的完整路徑和檔名。
    __FUNCTION__函式名稱
    __CLASS__類的名稱
    __METHOD__類的方法名
    
  7. 資料庫中的事務是什麼?
    答:事務(transaction)是作為一個單元的一組有序的資料庫操作。如果組中的所有操作都成功,則認為事務成功,即使只有一個 操作失敗,事務也不成功。如果所有操作完成,事務則提交,其修改將作用於所有其他資料庫程序。如果一個操作失敗,則事務將回滾,該事務所有操作的影響都將取消。

  8. 1優化MYSQL資料庫的方法。

    1、選擇合適的欄位的資料型別
    	1)能用數字不用字串
    	2)char、varchar、text  能用varchar不用char
    	3)給欄位加not null 避免在表中出現NULL關鍵字(default 值)
    2、選擇合適的欄位充當主鍵
    	1)建議每張表必須有主鍵
    	2)用數字型別的欄位充當主鍵
    		拆分表
    		拆分欄位,將文章的標題與內容分開
    2)拆分記錄,將今年的記錄與往年的記錄分開
    		給欄位合理新增索引
    
    a.格式:
    (普通索引)->
    建立:CREATE INDEX <索引名> ON tablename (索引欄位)
    修改:ALTER TABLE tablename ADD INDEX [索引名] (索引欄位)
    創表指定索引:CREATE TABLE tablename([...],INDEX[索引名](索引欄位))
    (唯一索引)->
    建立:CREATE UNIQUE <索引名> ON tablename (索引欄位)
    修改:ALTER TABLE tablename ADD UNIQUE [索引名] (索引欄位)
    創表指定索引:CREATE TABLE tablename([...],UNIQUE[索引名](索引欄位))
    (主鍵)->
    它是唯一索引,一般在建立表是建立,格式為:
    CREATA TABLE tablename ([...],PRIMARY KEY[索引欄位])
    
  9. 事務處理:

    a.保證資料完整性,例如新增和修改同時,兩者成立則都執行,一者失敗都失敗
    mysql_query("BEGIN");
    mysql_query("INSERT INTO customerinfo (name) VALUES ('$name1')";
    mysql_query("SELECT * FROM `orderinfo` where customerid=".$id");
    mysql_query(“COMMIT");
    
  10. 鎖定表,優化事務處理:

    a.我們用一個 SELECT 語句取出初始資料,通過一些計算,用 UPDATE 語句將新值更新到表中。
    包含有 WRITE 關鍵字的 LOCK TABLE 語句可以保證在 UNLOCK TABLES 命令被執行之前,
    不會有其它的訪問來對 inventory 進行插入、更新或者刪除的操作
    mysql_query("LOCK TABLE customerinfo READ, orderinfo WRITE");
    mysql_query("SELECT customerid FROM `customerinfo` where id=".$id);
    mysql_query("UPDATE `orderinfo` SET ordertitle='$title' where customerid=".$id);
    mysql_query("UNLOCK TABLES”);
    
  11. 使用外來鍵,優化鎖定表

    a.把customerinfo裡的customerid對映到orderinfo裡的customerid,
    任何一條沒有合法的customerid的記錄不會寫到orderinfo裡
    CREATE TABLE customerinfo(
      customerid INT NOT NULL,
      PRIMARY KEY(customerid)
    )TYPE = INNODB;
    CREATE TABLE orderinfo(
      orderid INT NOT NULL,
      customerid INT NOT NULL,
      PRIMARY KEY(customerid,orderid),
      FOREIGN KEY (customerid) REFERENCES customerinfo
      (customerid) ON DELETE CASCADE
    )TYPE = INNODB;
    注意:'ON DELETE CASCADE',該引數保證當customerinfo表中的一條記錄刪除的話同時也會刪除order
    表中的該使用者的所有記錄,注意使用外來鍵要定義事務安全型別為INNODB;
    
  12. 優化查詢語句

    a用內連線代替子查詢代替子查詢,用sphinx代替like模糊查詢
    b最好在相同欄位進行比較操作,在建立好的索引欄位上儘量減少函式操作
    例子1:
    SELECT * FROM order WHERE YEAR(orderDate)<2008;(慢)
    SELECT * FROM order WHERE orderDate<"2008-01-01";(快)
    例子2:
    SELECT * FROM order WHERE addtime/7<24;(慢)
    SELECT * FROM order WHERE addtime<24*7;(快)
    例子3:
    SELECT * FROM order WHERE title like "%good%";
    SELECT * FROM order WHERE title>="good" and name<"good";
    快取,靜態化
    選擇合適儲存引擎用Innodb增刪改,用myisam查詢
    主從資料庫
    負載均衡
    最好拿數字型別的欄位充當where條件
    最好拿相同型別的欄位進行比對(避免發生資料型別的轉換)
    不要在具有索引的欄位上新增資料庫函式(索引失效)
    
  13. 請簡述專案中優化sql語句執行效率的方法,從哪些方面,sql語句效能如何分析?
    1)選擇最有效率的表名順序
    2)WHERE子句中的連線順序
    3)SELECT子句中避免使用‘*’
    4)用Where子句替換HAVING子句
    5)通過內部函式提高SQL效率
    6)避免在索引列上使用計算。
    7)提高GROUP BY 語句的效率, 可以通過將不需要的記錄在GROUP BY 之前過濾掉。

  14. 對於大流量網站,採用什麼方法解決訪問量問題?

	1,確認伺服器的硬體是否足夠支援當前的流量
	2,優化資料庫的訪問
	3,禁止外部的盜鏈
	4,控制大檔案的下載
	5,使用不同主機分流主要流量
	6,使用流量分析統計軟體
  1. 一個函式,能夠遍歷一個資料夾下的所有檔案和子資料夾
function dir_recurse($dir) {
	$i = 1;
	if($handle = opendir($dir)) {
		while(false !== ($file = readdir($handle))) {
			if($file != "."&& $file != ".." ) {
				if(is_dir($dir."/".$file) == true) {
					$fullpath = $dir."/".$file;
					dir_recurse($fullpath);
					echo "$fullpath\n";
					$i++;
				}else {
					$fullpath = $dir."/".$file;
					echo "$fullpath\n";
					$i++;
				}
			}
		}
		closedir($handle);
	}
}

  1. 寫一個函式,能夠遍歷一個資料夾下的所有檔案和子資料夾。
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;
	}
}
  1. 能夠使HTML和PHP分離開使用的模板
    答:Smarty,Dwoo,TinyButStrong,TemplateLite,Savant,phemplate,XTemplate

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

  3. 如何實現字串翻轉
    英文: strrev($a)
    中文或其他文字:中文:GB2312, 程式碼是使用GB2312編碼

<?php
function reverse($str)
{
	$ret = "";
len=mb s trwidth( len=mbstrwidth(len = mb_strwidth(str,"GB2312");
for(i=0; i=0;i=0; i< len; len;len; i++)
{
	arr[]=mb s ubstr( arr[]=mbsubstr(arr[] = mb_substr(str, $i, 1, "GB2312");
}
return implode("", array_reverse($arr));
}
print_r(reverse("你好"));
  1. PHP的意思
    PHP是一個基於服務端來建立動態網站的指令碼語言,您可以用PHP和HTML生成網站主頁

  2. MYSQL取得當前時間的函式是?,格式化日期的函式是
    答:now(),date()

  3. 用PHP寫出顯示客戶端IP與伺服器IP的程式碼1分)
    答:列印客戶端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv(‘REMOTE_ADDR’);
    列印伺服器IP:echo gethostbyname(“www.bolaiwu.com”)

  4. 語句include和require的區別是什麼?為避免多次包含同一檔案,可用(?)語句代替它們?
    答:require->require是無條件包含也就是如果一個流程里加入require,無論條件成立與否 都會先執行require
    include->include有返回值,而require沒有(可能因為如此require的速度比include快)
    注意:包含檔案不存在或者語法錯誤的時候require是致命的,include不是

  5. http請求返回狀態碼
    400 請求無效
    401 未授權
    403 請求被禁止
    404 請求資源不存在
    405 請求資源被禁止
    406 無法接受
    407 要求代理身份驗證
    500 Internal Server Error 服務端原始碼錯誤
    600 源站沒有返回響應頭部,只返回實現內容

  6. linux授權碼:
    600 屬主有讀寫許可權
    644 屬主有讀寫許可權,屬性組有讀許可權
    700 屬主有讀寫執行許可權
    755 屬主有讀寫執行許可權,屬性組有讀,執行許可權
    711 屬主有讀寫執行許可權,屬性組有執行許可權
    666 所有使用者都有檔案的讀寫許可權
    777 所有使用者都有檔案的讀寫執行許可權

  7. 有一個網頁地址, 比如PHP開發資源網主頁: http://www.phpres.com/index.html,如何得到它的內容?($1分)
    答:方法1(對於PHP5及更高版本):
    $readcontents = fopen(“http://www.phpres.com/index.html”, “rb”);
    c o n t e n t s = s t r e a m g e t c o n t e n t s ( contents = stream_get_contents( readcontents);
    fclose($readcontents);
    echo $contents;
    方法2:
    echo file_get_contents(“http://www.phpres.com/index.html”);

  8. 在PHP中error_reporting這個函式有什麼作用? (1分)
    答:設定錯誤級別與錯誤資訊回報

  9. JS表單彈出對話方塊函式是?獲得輸入焦點函式是? (2分)
    答:彈出對話方塊: alert(),prompt(),confirm()
    獲得輸入焦點 focus()

  10. foo()和@foo()之間有什麼區別?(1分)
    答:@foo()控制錯誤輸出

  11. mysql_fetch_row() 和mysql_fetch_array之間有什麼區別? (1分)
    答:mysql_fetch_row是從結果集取出1行陣列,作為列舉
    mysql_fetch_array是從結果集取出一行陣列作為關聯陣列,或數字陣列,兩者兼得

  12. GD庫是做什麼用的? (1分)
    答:gd庫提供了一系列用來處理圖片的API,使用GD庫可以處理圖片,或者生成圖片。
    在網站上GD庫通常用來生成縮圖或者用來對圖片加水印或者對網站資料生成報表。

  13. 面向物件程式設計
    有兩個重要的概念:類和物件
    類是具備某項功能的抽象模型,實際應用中,還需要對類進行例項化後使用。這樣就引入了物件的概念。
    物件是類進行例項化後的一個產物,是一個實體。
    封裝 :把客觀的事物封裝成一個抽象的類。
    繼承:子類繼承父類,可以使用父類的屬性和方法。可以實現介面,同時實現介面中的所有方法
    多型:覆蓋和過載 子類可以覆蓋父類中的方法;一個類中可以同時擁有同一個函式名的方法,但是方法的引數不同,實現的結果也不同。

  14. php框架
    熟悉YII ,Thinkphp還有laravel ,symfony2,cakephp

  15. mysql儲存引擎
    ISAM: 查詢速度快、增刪改慢,支援全文索引、不支援外來鍵、不支援事務
    MyISAM: ISAM升級版
    Memory: 資料駐留在記憶體、速度快、資料管理不穩定、斷電後資料全部丟失

    InnoDB: 速度較慢、支援外來鍵、支援事務、不支援全文索引
    使用的儲存引擎
    MyISAM:內容管理系統(新聞、官網、電商、軟體下載、房屋、招聘…) 可讀不可改 大部分是瀏覽資訊
    InnoDB:技術型網站(bbs、blog、webo、oa…)

  16. 資料庫操作流程
    l i n k = m y s q l c o n n e c t ( &quot; l o c a l h o s t &quot; , &quot; r o o t &quot; , &quot; r o o t &quot; ) ; m y s q l s e l e c t d b ( &quot; t e s t &quot; , link = mysql_connect(&quot;localhost&quot;,&quot;root&quot;,&quot;root&quot;); mysql_select_db(&quot;test&quot;, link);
    $sql =“select * from table”;
    r e s u l t = m y s q l q u e r y ( result = mysql_query( sql);
    while( r o w = m y s q l f e t c h ( row =mysql_fetch_****( result) ){
    a r r [ ] = arr[]= row;
    }
    r o w = m y s q l f e t c h a r r a y ( row = mysql_fetch_array( result) 意思: r o w [ n a m e ] row[&#x27;name&#x27;] 和 row[1] 都可以取到值
    r o w = m y s q l f e t c h r o w ( row = mysql_fetch_row( result)) 意思:$row[1] 只有用索引取值,偏移量從0開始。
    r o w = m y s q l f e t c h a s s o c ( row = mysql_fetch_assoc( result)) 意思: $row[‘name’] 欄位名作為索引取值 抽取一條記錄轉為 關聯陣列,失敗返回false

  17. php 加密函式
    crypt( s t r [ , str[, slat]) 可以完成單向加密功能
    md5()
    sha1() 返回一個40位的十六進位制數,
    加密擴充套件庫
    Mcrypt() 和Mash

  18. 字串“to upper case” 分別用php,shell ,js實現將字串中的字元全部轉換成大寫並輸出。(5分)
    Php實現: echo strtoupper(‘to upper case’)
    Shell實現:echo “to upper case” | tr ‘a-z’ ‘A-Z’
    Js實現:

  1. 防止SQL注入
    1)一般使用 addslashes 函式
    addslashes 函式在制定的預定義字元前新增反斜槓
    對欄位和密碼MD5加密處理
    預處理過濾處理

  2. 用PHP打印出前一天的時間,格式是2006-5-10 22:21:21

<?php //echo date('Y-m-d H:i:s',time()-60*60*24 echo date("Y:m:d H:i:s",strtotime("-1 day")); ?>
  1. 如何實現字串翻轉?
    其實PHP本身就有字串翻轉的函式:strrev(),不妨試試echo strrev($str);不過
    所有的這三種方法都不能解決中文字串翻轉的問題,會出錯的。
    程式碼
<?php 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; ?>
  1. 實現中文字串擷取無亂碼的方法。
    mb_substr()

  2. 以下哪一句不會把 John 新增到 users 陣列?
    u s e r s [ ] = j o h n ; J o h n u s e r s a r r a y a d d ( users[] = &#x27;john&#x27;; 成功把 John 新增到陣列 users。 array_add( users,’john’);
    函式 array_add() 無定義。
    array_push($users,‘john’);
    成功把 John 新增到陣列 users。
    $users ||= ‘john’;
    語法錯誤。

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

  4. 以下的程式碼會產生什麼?為什麼?
    $num =10;
    function multiply(){
    n u m = num = num *10;
    }
    multiply();
    echo $num;
    由於函式 multiply() 沒有指定 $num 為全域變數(例如 global $num 或者
    $_GLOBALS[‘num’]),所以 $num 的值是 10。

  5. 些函式可以用來在現正執行的指令碼中插入函式庫?
    對這道題目不同的理解會有不同的答案,我的第一個想法是插入 PHP 函式庫不外乎
    include()、include_once()、require ()、require_once(),但細心再想,“函式庫”也應該包括 com 物件和 .net 函式庫,所以我們的答案也要分別包括
    com_load 和 dotnet_load,下次有人提起“函式庫”的時候,別忘記這兩個函式。

  6. foo() 與 @foo() 有什麼分別?
    foo() 會執行這個函式,任何解譯錯誤、語法錯誤、執行錯誤都會在頁面上顯示出來。
    @foo() 在執行這個函式時,會隱藏所有上述的錯誤訊息。
    很多應用程式都使用 @mysql_connect() 和 @mysql_query 來隱藏 mysql 的錯誤訊息,我認為這是很嚴重的失誤,因為錯誤 不該被隱藏,你必須妥善處理它們,可能的話解決它們。
    “=”是什麼?試舉一個“”是真但“=”是假的例子。
    =”是給既可以送回布林值“假”,也可以送回一個不是布林值但卻可以賦與“假”值的函式,strpos() 和 strrpos() 便是其中兩個例子。
    問題的第二部份有點困難,想一個“”是假,但是“=”是真的例子卻很容易,
    相反的例子卻很少。但我終於找到以下的 例子:
    if (strpos(“abc”, “a”) == true){ // 這部分永不會被執行,因為 “a” 的位
    置是 0,換算成布林值“假”}if (strpos(“abc”, “a”) === true){ // 這部份
    會被執行,因為“===”保證函式 strpos() 的送回值不會換算成布林值.}

  7. 如何修改SESSION的生存時間(1分).
    答:方法1:將php.ini中的session.gc_maxlifetime設定為9999重啟apache
    方法2:$savePath = “./session_save_dir/”;
    l i f e T i m e = ; s e s s i o n s a v e p a t h ( lifeTime = 小時 * 秒; session_save_path( savePath);
    session_set_cookie_params( l i f e T i m e ) ; s e s s i o n s t