文章目錄
- 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人
要求:將三者同步,使用統一的註冊流程 ,寫出設計思路