php筆試題

來源:互聯網
上載者:User
文章目錄
  • 12.   如何配置、使用和清除Smarty緩衝?
  • 13.   PHP如何與mysql建立連結?

1.   echo(),print(),print_r()的區別

echo 是語言結構,無傳回值;print 功能和echo基本相同,不同的是print是函數,有傳回值;print_r 是遞迴列印,用於輸出數組對象。

 

2.  PHP中session與cookie的區別?
Cookie是儲存在用戶端的資訊,是一種在遠程瀏覽器儲存資料並以此來跟蹤和識別使用者的機制。PHP的http協議的頭資訊裡發送cookie,因此setcookie()函數必須在其他資訊輸出前調用,和header()函數的限制類似。
Session是儲存在伺服器端的資訊,從這個角度,session比cookie更安全。當會話建立時,伺服器返回用戶端一個加密的session_id 以標識使用者身份,瀏覽器關閉時,session會銷毀,從而session存的值就沒有了。

 

3.  PHP中include require 的區別?
這兩種結構在處理失敗之外有不同,include產生一個警告,而require則導致一個致命的錯誤,換句話說,如果你想在遇到丟失檔案時停止處理頁面就用require。Include就不是這樣,指令碼會繼續執行。
Require的使用方法如require(“Myfile.php”); 這個表式通常放到PHP程式的最前面,PHP執行前,就會讀入require所指定引入的檔案,使它變成PHP程式網頁的一部分。
Include使用方法和上面相同,這個程式一般放到流程式控制制的處理區段,php程式網頁在讀到include的檔案時,才將它讀進來,這種方式,可以把程式執行時的流程簡單化。

當頁面執行到require()時,如果require是一個PHP、HTML頁面的話,這時就會馬上轉到去執行該頁面了。而include,一般是用於include進來一些inc檔案。比如說可以將你的網站的頁頭和頁首作為一個inc檔案,這樣在每個PHP檔案裡面再include進來。include實際只是將你要include的檔案嵌入到當前頁面當中。而require則是馬上去執行你所請求的頁面。
——————————————————————————–
incluce在用到時載入
require在一開始就載入
_once尾碼表示已載入的不載入
php系統在載入php程式時有一個偽編譯過程,可使程式運行速度加快。但incluce的文檔仍為解釋執行
include的檔案中出錯了,主程式繼續往下執行
require的檔案出錯了,主程式也停了
所以包含的檔案出錯對系統影響不大的話(如介面檔案)就用include,否則用require
include_once()函數,require_once()函數會先檢查目標檔案的內容是不是在之前就已經匯入過了,如果是的話,便不會再次重複匯入同樣的內容

 

4.     請說明 PHP 中傳值與傳引用的區別。什麼時候傳值什麼時候傳引用?
答: 傳值只是把某一個變數的值傳給了另一個變數,而引用則說明兩者指向了同一個地方。

 

 

 5.   用PHP寫出顯示用戶端IP與伺服器IP的代碼?
答:列印用戶端IP:echo $_SERVER[‘REMOTE_ADDR’]; 或者: getenv('REMOTE_ADDR');//getenv取得開發環境變數
列印伺服器IP:echo gethostbyname("www.bolaiwu.com") // gethostbyname取得IP地址函數

 

6.   表單中 get與post提交方法的區別?
答:get是發送請求HTTP協議通過url參數傳遞進行接收,而post是實體資料,可以通過表單提交大量資訊.

 

7.   用PHP列印出前一天的時間格式是2006-5-10 22:21:21(2分)
答:echo date(‘Y-m-d H:i:s’, strtotime(‘-1 days’));

8.   寫出如下程式的輸出結果
<?
$str1 = null;
$str2 = false;
echo $str1==$str2 ? ‘相等’ : ‘不相等’;
//相等
$str3 = ”;
$str4 = 0;
echo $str3==$str4 ? ‘相等’ : ‘不相等’;
//相等
$str5 = 0;
$str6 = ’0′;
echo $str5===$str6 ? ‘相等’ : ‘不相等’;
//不相等
?>

 

9.  寫出如下程式的輸出結果
<?$count = 5;
function get_count(){
static $count = 0;
return $count++;
}

echo $count;  //5
++$count;
echo get_count();//0
echo get_count();//1
?>

 

10   寫一個函數,能夠遍曆一個檔案夾下的所有檔案和子檔案夾。
答:
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;
}
}

 

11.    寫一個函數,儘可能高效的,從一個標準 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);
}
}

 

 

12.   如何配置、使用和清除Smarty緩衝?

1、Smarty緩衝的配置
$smarty->cache_dir = “/caches/”; //緩衝目錄
$smarty->caching = true; //開啟緩衝,為flase的時侯快取無效判定
$smarty->cache_lifetime = 60; //緩衝時間
2、Smarty緩衝的使用和清除
$smarty->display(‘cache.tpl’, cache_id); //建立帶ID的緩衝

$smarty->clear_all_cache(); //清除所有緩衝
$smarty->clear_cache(‘index.htm’); //清除index.tpl的緩衝
$smarty->clear_cache(‘index.htm’,cache_id); //清除指定id的緩衝

 

13.   PHP如何與mysql建立連結?

php.ini 載入mysql組件:
extension=php_mysql.dll 前的; 去掉
extension_dir = ” ” 路徑是否正確
PHP連結mysql函數
mysql_connect: 開啟 MySQL 連結
mysql_select_db: 開啟一個資料庫
@ 和 or die 隱藏錯誤 和 條件顯示
mysql_connect(“主機”, “使用者名稱”, “密碼”)
mysql_select_db(“開啟資料庫”,串連標識符);
如果不特別聲明串連標識符,則預設為是上一次開啟的串連。

14.   如何處理簡單的PHP錯誤

1. 把PHP.ini 裡的 display_errors   =   On 才可以顯示錯誤位置
2. 習慣使用echo 或者 print 列印
3. 使用注釋來屏蔽符號來調試
// ……….
/*………… */
#…………..
4. 看錯誤資訊

 

 

15 .    用最少5種方法取得某一檔案路徑的副檔名(例如:www.test.com/index.php,取得php)

第1種方法

function get_extension($file)

{

    substr(strrchr($file,'.'),1);

}

第2種方法:

function get_extension($file)

{

    return substr($file, strrpos($file,'.')+1);

}

第3種方法:

function get_extension($file)

{

    returnend(explode('.',
$file));

}

第4種方法:

function get_extension($file)

{

    $info = pathinfo($file);

    return $info['extension'];

}

第5種方法:

function get_extension($file)

{

    return pathinfo($file, PATHINFO_EXTENSION);

}

以上幾種方式粗看了一下,好像都行,特別是1、2種方法,在我不知道pathinfo有第二個參數之前也一直在用。但是仔細考慮一下,前四種方法都有各種各樣的毛病。要想完全正確擷取檔案的副檔名,必須要能處理以下三種特殊情況。

  1.沒有副檔名

  2.路徑中包含了字元.,如/home/test.d/test.txt

  3.路徑中包含了字元.,但檔案沒有副檔名。如/home/test.d/test

    很明顯:1、2不能處理第三種情況,3不能正確處理第一三種情況。4可以正確處理,但是在不存在副檔名時,會發出一個警告。只有第5種方法才是最正確的方法。順便看一下pathinfo方法。

     

     16.     請寫出PHP中用來完成如下功能的函數  
                       A.判斷一個變數的值是否為空白:  empty($bianliang)  
                       B.判斷一個變數是否為NULL:    null($bianliang)
                       C.判斷一個變數是否存在:      isset($myvar)                              
                       D.釋放一個變數:         

     

    17.     抓取遠程圖片到本地,你會用什麼函數?
    socket & file;

     

    18.     用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"));
    ?>

     

    19.     PHP本身就有字串翻轉的函數:strrev(),當然也可以定義簡單的函數來完成,下面的方法一和方法二隻能翻轉非漢字字串,方法三用來翻轉字串。

    <?php
    //方法一:PHP系統函數
    echo
    strrev("ABCDEF")."<br />";
    //方法二:自訂函數,不能翻轉漢字。
    function
    myStrrev($str)
    {
    $newStr =
    "";
    for($i=0;$i<strlen($str);$i++)
    {
    $newStr =
    $str[$i].$newStr;
    }
    return
    $newStr;
    }
    echo
    myStrrev("ABCDEF")."<br />";
    //方法三,翻轉漢字
    $newcnStr ="";
    $cnStr =
    str_split("我愛你",3); //每個漢字佔3個位元組
    //也可以使用array_reverse()翻轉後輸出
    for($j=count($cnStr)-1;$j>=0;$j--)
    {
    $newcnStr .=$cnStr[$j];
    }
    echo
    $newcnStr;
    ?>

     

    20 .  寫一個函數,算出兩個檔案的相對路徑
    如 $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);

     

    21、不用新變數直接交換現有兩個變數的值.  (考php基本功)
    答案:list($a, $b) = array($b, $a);

    22、SQL查詢語句如下:

    select * from table where (ID = 10) or (ID = 32) or (ID = 22) or (ID = 76) or (ID = 13) or (ID = 44)
    讓結果按10,32,22,76,13,44的順序檢索出來,請問如何書寫? (sql能力)

    23、php同時調用3個資料庫中的一個表的資訊(架設A.a.aid=B.b.bid=C.c.cid),請說明思路及書寫部分代碼

    24、現有一IM軟體,使用id、email做為註冊條件,假設登入1040人,有一zh_cn論壇,使用id、email做為註冊條件,假設登入200人,有一en_us論壇,使用id、email做為註冊條件,假設登入150人
    要求:將三者同步,使用統一的註冊流程 ,寫出設計思路

     

     

    相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.