1. 程式人生 > >php常規筆試題(二)

php常規筆試題(二)

內容管理 www 語言 圖片 user 是否 最適 name 開始

1.如何用php的環境變量得到一個網頁地址的內容?ip地址又要怎樣得到?

Gethostbyname()

echo $_SERVER ["PHP_SELF"];
echo $_SERVER ["SERVER_ADDR"];

2. 求兩個日期的差數,例如2007-2-5 ~ 2007-3-6 的日期差數

$begin=strtotime(“2007-2-5″);
$end=strtotime(“2007-3-6″);
echo ($end-$begin)/(24*3600);

2. 給一個變量賦值為0123,但是輸出該變量的值總是為其他數字,請問這是什麽問題?
PHP 解釋器會把以0開始的數字當做是八進制的,所以它的值會變成八進制的。


3.PHP裏面如何定義一個常量(constant)?
通過define()指令,例如:define(”MYCONSTANT”, 100)
4.如何對一個變量進行值傳遞?
可以像C++那樣,在變量的前面加上&, 例如:$a = &$b
5.PHP裏面可以對string 10和整型 11進行比較嗎?
可以,PHP內部實現會把所有東西轉換成整型,所以數字10和11可以進行比較


6.在什麽情況下需要用endif 來結束條件語句?
當if語句後面跟的是冒號”:”而不是大括號{時,需要用endif來結束條件語句


1.表單中 getpost提交方法的區別?
1. get是把參數數據隊列加到提交表單的ACTION屬性所指的URL中,值和表單內各個字段一一對應,在URL中可以看到。post是通過HTTPpost機制,將表單內各個字段與其內容放置在HTML HEADER內一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。

2. 對於get方式,服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。

3. get傳送的數據量較小,不能大於2KB。post傳送的數據量較大,一般被默認為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。

get安全性非常低,post安全性較高。

3. 數據庫中的事務是什麽?
事務(transaction)是作為一個單元的一組有序的數據庫操作。如果組中的所有操作都成功,則認為事務成功,即使只有一個操作失敗,事務也不成功。如果所有操作完成,事務則提交,其修改將作用於所有其他數據庫進程。如果一個操作失敗,則事務將回滾,該事務所有操作的影響都將取消。


7、優化MYSQL數據庫的方法。(4分,多寫多得)
1、選取最適用的字段屬性,盡可能減少定義字段長度,盡量把字段設置NOT NULL,例如’省份,性別’,最好設置為ENUM
2、使用連接(JOIN)來代替子查詢:
3、使用聯合(UNION)來代替手動創建的臨時表
4、事務處理:
5、鎖定表,優化事務處理:
6、使用外鍵,優化鎖定表
7、建立索引:
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[索引字段])
8、優化查詢語句

PHP的意思(1)
PHP Hypertext Preprocessor是一個基於服務端來創建動態網站的腳本語言,您可以用PHP和HTML生成網站主頁


9MYSQL取得當前時間的函數是?,格式化日期的函數是(2)
now(),date_format()


10、實現中文字串截取無亂碼的方法。(3)
functionGBsubstr($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;
}
}

對於大流量的網站,您采用什麽樣的方法來解決訪問量問題?(4)
確認服務器硬件是否足夠支持當前的流量,數據庫讀寫分離,優化數據表,程序功能規則,禁止外部的盜鏈,控制大文件的下載,使用不同主機分流主要流量

12、PHP中,heredoc是一種特殊的字符串,它的結束標誌必須?(1)
heredoc的語法是用”<<<"加上自己定義成對的標簽,在標簽範圍內的文字視為一個字符串
例子:
$str = << my name is Jiang Qihui!
SHOW;


13、談談asp,php,jsp的優缺點(1)
ASP全名Active Server Pages,是一個WEB服務器端的開發環境,利用它可以產生和運
行動態的、交互的、高性能的WEB服務應用程序。ASP采用腳本語言VB Script(Java script
)作為自己的開發語言。
PHP是一種跨平臺的服務器端的嵌入式腳本語言. 它大量地借用C,Java和Perl語言的語法
, 並耦合PHP自己的特性,使WEB開發者能夠快速地寫出動態生成頁面.它支持目前絕大多數數
據庫。還有一點,PHP是完全免費的,不用花錢,你可以從PHP官方站點(http://www.php.ne
t)自由下載。而且你可以不受限制地獲得源碼,甚至可以從中加進你自己需要的特色。
JSP 是Sun公司推出的新一代站點開發語言,他完全解決了目前ASP,PHP的一個通病--
腳本級執行(據說PHP4 也已經在Zend 的支持下,實現編譯運行).Sun 公司借助自己在Jav
a 上的不凡造詣,將Java 從Java 應用程序和 Java Applet 之外,又有新的碩果,就是Js
p--Java Server Page。Jsp 可以在Serverlet和JavaBean的支持下,完成功能強大的站點
程序。
三者都提供在 HTML 代碼中混合某種程序代碼、由語言引擎解釋執行程序代碼的能力。
但JSP代碼被編譯成 Servlet 並由 Java 虛擬機解釋執行,這種編譯操作僅在對 JSP 頁面的
第一次請求時發生。在 ASP 、PHP、JSP 環境下, HTML 代碼主要負責描述信息的顯示樣式
,而程序代碼則用來描述處理邏輯。普通的 HTML 頁面只依賴於 Web 服務器,而 ASP 、PH
P、JSP 頁面需要附加的語言引擎分析和執行程序代碼。程序代碼的執行結果被重新嵌入到
HTML 代碼中,然後一起發送給瀏覽器。 ASP 、PHP、 JSP三者都是面向 Web 服務器的技術
,客戶端瀏覽器不需要任何附加的軟件支持。

寫出發貼數最多的十個人名字的SQL,利用下表:members(id,username,posts,pass,email)(2)
SELECT * FROM `members` ORDER BYposts DESC limit 0,10;

簡述如何得到當前執行腳本路徑,包括所得到參數。(2)
echo $_SERVER[‘REQUEST_URI’];
21JS表單彈出對話框函數是?獲得輸入焦點函數是? (2)
彈出對話框: alert(),prompt(),confirm()
獲得輸入焦點 focus()


22JS的轉向函數是?怎麽引入一個外部JS文件?(2)
window.location.href,

<script type="text/javascript"src="hello.js"></script>


23foo()@foo()之間有什麽區別?(1)
@foo()控制錯誤輸出


24、如何聲明一個名為myclass的沒有方法和屬性的類? (1)
class myclass{ }


25、如何實例化一個名為myclass的對象?
new myclass()


26、你如何訪問和設置一個類的屬性? (2)
$object = new myclass();
$newstr = $object->test;
$object->test = "info";


28GD庫是做什麽用的? (1)
gd庫提供了一系列用來處理圖片的API,使用GD庫可以處理圖片,或者生成圖片。

在網站上GD庫通常用來生成縮略圖或者用來對圖片加水印或者對網站數據生成報表。

29、指出一些在PHP輸入一段HTML代碼的辦法。(1)
echo "aaa";


30、下面哪個函數可以打開一個文件,以對文件進行讀和寫操作?[ c ]
(a) fget() (b)file_open() (c) fopen() (d) open_file()


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


33、使用php寫一段簡單查詢,查出所有姓名為張三的內容並打印出來 (2)
表名User
NameTel 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"];

}

PDO寫法:

Try{

$dsn= "mysql:host=localhost;dbname=user";

$pdo= new PDO($dsn,‘root‘,‘123456‘);

$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);

$pdo->query(‘setnames utf8‘);

$sql= "SELECT * FROM user WHERE name=‘張三‘";

$result= $pdo->query($sql);

Foreach($resultas $v){

Echo$v[‘tel‘].$v[‘content‘].$v[‘date‘];

}

}catch(PDOException$e){

Echo$e->getCode().‘:‘.$e->getMessage();

}

Mysqli寫法:

$mysqli = newmysqli(‘localhost‘,‘root‘,‘123456‘,‘user‘);

If(mysqli_connect_errno()){

Die(‘連接數據庫失敗,‘.mysqli_connect_error());

}

$mysqli->set_charset(‘utf8‘);

$result = $mysqli->query("SELECT* FROM user WHERE name=‘張三‘");

If($result &&$result->affected_row()){

While($row =$result->fetch_object()){

Echo$row->tel.$row->content.$row->date;

}

}

如何使用下面的類,並解釋下面什麽意思?(3)
classtest{
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方法,實例化類調用方法多字符串加密

寫出以下程序的輸出結果 (1)
<?php

$b=201;
$c=40;
$a=$b>$c?4:5;
echo$a;
?>
答:4


39、檢測一個變量是否有設置的函數是否?是否為空的函數是?(2)
isset($str),empty($str);


40、取得查詢結果集總數的函數是?(1)
答:mysql_num_rows($result);


41$arr = array(‘james‘,‘tom‘, ‘symfony‘); 請打印出第一個元素的值 (1)
答:echo array_shift($arr);


42、請將41題的數組的值用‘,‘號分隔並合並成字串輸出(1)
答:implode(‘,’,$arr);


43$a = ‘abcdef‘; 請取出$a的值並打印出第一個字母(1)
答:echo $a{0} echo substr($a,0,1)


44PHP可以和sql server/oracle等數據庫連接嗎?(1)
答:當然可以


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


46、請寫出php5的構造函數和析構函數(2)
答:__construct , __destruct


47、完成以下:
(
)創建新聞發布系統,表名為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` ISNULL,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_idint(4) not null auto_increment;
categroy_namevarchar(40) not null;
  用戶輸入文章時,通過選擇下拉菜單選定文章分類
  寫出如何實現這個下拉菜單
答:function categoryList(){
$result=mysql_query("select category_id,categroy_name from category")
or die("Invalid query: " . mysql_error());
print(" ... ");
}


3. 寫一個函數,算出兩個文件的相對路徑
  如 $a = ‘/a/b/c/d/e.php‘;
$b = ‘/a/b/12/34/c.php‘;
  計算出 $b 相對於 $a 的相對路徑應該是 http://www.cnblogs.com/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));

returnimplode(‘/‘, $returnPath);

}

echo getRelativePath($a, $b);

php常規筆試題(二)