---恢復內容開始---javascript
strlen 和mb_strlen 都是用於獲取字符串長度的,其中strlen只針對單字節編碼字符,也就是說它計算的是字符串的總字節數,若是是多字節編碼,如gbk和utf8,使用strlen獲得的不是字符串的個數,而是該字符串的總字節數,可使用mb_strlen獲取其字符個數,使用mb_strlen要注意兩點,一是要開啓mbstring擴展,二是要指定字符集。php
示例:html
相關題目1:實現中文字串截取無亂碼的方法。java
方法一,使用php內置函數 mb_substr()mysql
方法二,自定義函數,以utf8爲例,以下:web
代碼分析:正則表達式
//u 表示按unicode(utf-8)匹配(主要針對多字節好比漢字)sql
join — 別名 implode()表示將一個一維數組的值轉化爲字符串數據庫
array_slice() 函數在數組中根據條件取出一段值,並返回express
相關題目2:如何求解字符串「中國2北333京」的字符數(一箇中文一個字符),並找到第四個字符「北」
方法一,使用php內置函數,確保配置中已打開mbstring擴展
方法二,自定義函數實現求其長度,截取使用上面定義的substr_utf8
代碼分析:
A. split
B. implode
C. explode
D. join
答案:A
答案:1
$_SERVER['DOCUMENT_ROOT'] //當前運行腳本所在的文檔根目錄$_SERVER['HTTP_HOST '] //當前請求的 Host: 頭部的內容
$_SERVER['REMOTE_ADDR'] //正在瀏覽當前頁面用戶的 IP 地址
$_SERVER['HTTP_REFERER'] //連接到當前頁面的前一頁面的 URL 地址
$_SERVER['SERVER_NAME'] //當前運行腳本所在服務器主機的名稱
$_FILES //包含有全部上傳的文件信息,他是預約義超級全局數組中惟一的二維數組。
S_FILES['userfile']['name'] //客戶端機器文件的原名稱
$_FILES['userfile']['type'] //文件MIME 類型,若是瀏覽器提供此信息的話,如「image/gif」。
$_FILES['userfile']['size'] //已上傳文件的大小,單位爲字節
$_FILES['userfile']['tmp_name'] //文件被上傳後在服務端儲存的臨時文件名
$_FILES['userfile']['error'] //和該文件上傳相關的錯誤代碼
兩者區別只有一個,那就是對包含文件的需求程度,include就是包含,若是被包含的文件不存在的話,那麼則會提示一個錯誤,可是程序會繼續執行下去。
而require意思是須要,若是被包含文件不存在或者沒法打開的時候,則會提示錯誤,而且會終止程序的執行。
這兩種結構除了在如何處理失敗以外徹底同樣。
once的意思是一次,那麼include_once和require_once表示只包含一次,避免重複包含。
相關題目1:What is the difference between include & include_once? include & require?(Yahoo)
相關題目2:語句 include 和 require 都能把另一個文件包含到當前文件中,它們的區別是____;爲了不屢次包含同一文件,能夠用語句____來代替它們。
在如何處理失敗時,include() 產生一個警告而 require() 則致使一個致命錯誤;require_once()/include_once()
相關題目3:What functions can you use to add library code to the currently running script?(Yahoo)
include、require
POST 根據你php.ini文件配置(默認是8M)
GET的話大小限制在2KB
相關題目:表單中 get與post提交方法的區別?
get是發送請求HTTP協議經過url參數傳遞進行接收,而post是實體數據,能夠經過表單提交大量信息。
A.php:-------
<?php function fa() { echo "in Function A\n"; }?>
B.php:-------
<?php include 'a.php'; ?>
<?php function fb() { fa(); echo "in Function B\n"; } ?>
C.php:-------
<?php include 'a.php'; ?>
<?php include 'b.php'; ?>
<?php fa(); fb(); ?>
答案:存在問題,a.php 被包含了兩次,致使fa()函數重複定義,使用include_once 避免重複包含。(此處應首先想到考點可能就是include和include_once)(總結:函數不能重複定義)
echo 是一個語言結構,輸出一個或多個字符串;
print() 實際上不是一個函數(它是一個語言結構),所以你能夠沒必要使用圓括號來括起它的參數列表,它輸出一個字符串;
print_r () 是一個函數,打印變量的信息,基本類型,數組,對象。
注意 ,是echo自己支持的一種語法,而. 則是字符串鏈接操做符,使用 , 的效率要高一些。
相關題目:What is the difference between "print()" and "echo( )"? (騰訊)
answer: print is a function,echo is a language construct
相關題目:求兩個日期的差數,例如2009-3-1 ~ 2009-4-4 的日期差數
(strtotime("2009-4-4")-strtotime("2009-3-1"))/3600*24
方案一:
方案二:
對字符進行編碼,好比base64_encode,要保證編碼是可逆的
變量默認老是傳值賦值。那也就是說,當將一個表達式的值賦予一個變量時,整個原始表達式的值被賦值到目標變量。這意味着,例如,當一個變量的值賦予另一個變量時,改變其中一個變量的值,將不會影響到另一個變量。
PHP 也提供了另一種方式給變量賦值:引用賦值。這意味着新的變量簡單引用(換言之,「成爲其別名」 或者 「指向」)了原始變量。改動新的變量將影響到原始變量,反之亦然。使用引用賦值,簡單地將一個 & 符號加到將要賦值的變量前(源變量)。
對象默認是傳引用。
須要操做原始數據,則引用,不能影響原始數據,則值傳遞。
相關題目1:What would the following code print to the browser? Why?
輸出 10 (調用函數的題必定要考慮是否有返回值)
相關題目2:What is the difference between a reference and a regular variable? How do you pass by reference & why would you want to?(Yahoo)
reference 傳送的是變量的地址而非它的值,因此在函數中改變一個變量的值時,整個應用都見到這個變量的新值。
一個regular variable傳送給函數的是它的值,當函數改變這個變量的值時,只有這個函數才見到新值,應用的其餘部分仍然見到舊值。
相關題目1:如何實現字符串翻轉?
strrev(),不過這種方法都不能解決中文字符串翻轉的問題,會出錯的。
相關題目2:假設如今有一個字符串www.baidu.com如何使用PHP對它進行操做使字符串以moc.udiab.輸出? (億郵)
客戶端IP:$_SERVER["REMOTE_ADDR"]
服務器端IP:$_SERVER["SERVER_ADDR"]
獲取當前執行腳本路徑使用$_SERVER["SCRIPT_FILENAME"] 或 __FILE__
獲取參數,使用$_SERVER["QUERY_STRING"]
__FILE__ :被稱爲PHP魔術常量,返回當前執行PHP腳本的完整路徑和文件名,包含一個絕對路徑
foo() 會執行這個函式,任何解譯錯誤、語法錯誤、執行錯誤都會在頁面上顯示出來。@foo() 在執行這個函式時,會隱藏全部上述的錯誤訊息。
不少應用程序都使用 @mysql_connect() 和 @mysql_query 來隱藏 mysql 的錯誤信息,這是不對的,由於錯誤不應被隱藏,你必須妥善處理它們,可能的話解決它們。
A. $users[ ] = "john";
B. array_add($users, "john"); //PHP中沒有array_add這個函數
C. array_push($users, "john");
D. $users ||= "john" ;
答案:BD
isset 檢測一個變量是否設置
empty 檢測是否爲空
注意兩者的區別,若是 變量是非空或非零的值,則 empty() 返回 FALSE。換句話說,""、0、"0"、NULL、FALSE、array() 以及沒有任何屬性的對象都將被認爲是空的。
當前腳本名稱:$_SERVER["PHP_SELF"] 或者 $_SERVER["SCRIPT_NAME"];
連接到當前頁面的前一頁面的 URL 地址:$_SERVER["HTTP_REFERER"]。
sort(),根據數組中元素的值,以英文字母順序排序,索引鍵會由 0 到 n-1 從新編號。主要是當數組索引鍵的值可有可無時用來把數組排序。
assort(),PHP 沒有 assort() 函式,因此多是 asort() 的筆誤。
asort(),對數組進行排序,數組的索引保持和單元的關聯。主要用於對那些單元順序很重要的結合數組進行排序。
ksort(),根據數組中索引鍵的值,以英文字母順序排序,特別適合用於但願把索引鍵排序的關聯數組。
打開或者關閉錯誤報告,如:
error_reporting(0);
error_reporting(E_ALL & ~ E_NOTICE);
error_reporting(E_ALL);
相關題目:error_reporting(2047) 什麼做用?(新浪)
2047 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256 + 512 + 1024
其中,1對應E_ERROR,2對應E_WARNING,4對應E_PARSE,8對應E_NOTICE,16對應E_CORE_ERROR,32對應E_CORE_WARNING,64對應E_COMPILE_ERROR, 128對應E_COMPILE_WARNING,256對應E_USER_ERROR,512對應E_USER_WARNING,1024對應E_USER_NOTICE。error_reporting(2047)意味着上述錯誤都會顯示出來。
hotdogok
相關題目:什麼是可變變量?
獲取一個普通變量的值做爲這個可變變量的變量名。
定義常量:define() ,
檢測常量是否認義:defined(),如
define("TEST","happy new year!");
if( defined("TEST")){
echo TEST;
}
%爲取模運算,輸出0
$a % $b 其結果的正負取決於 $a 的符號。
echo ((-8)%3)."<br />"; //輸出 -2
echo (8%(-3))."<br />"; //輸出 2
arsort:對數組進行逆向排序並保持索引關係
error_reporting(2047)的做用 report All errors and warnings,見21題中相關題目。
LoadModule php5_module "c:/php/php5apache2.dll";
AddType application/x-httpd-php .php
allow_call_time_pass_reference :是否啓用在函數調用時強制參數被按照引用傳遞,默認關閉。
頂格寫,而且不能包含任何其它字符除";",如:
$str = <<<SHOW
my name is Jiang Qihui!
SHOW;
輸出1
count :計算數組中的單元數目或對象中的屬性個數,一般是一個 array,任何其它類型都只有一個單元。
對於對象,若是安裝了 SPL,能夠經過實現 Countable 接口來調用 count()。該接口只有一個方法 count(),此方法返回 count() 函數的返回值。
若是 var 不是數組類型或者實現了 Countable 接口的對象,將返回 1,有一個例外,若是 var 是 NULL 則結果是 0。
相關題目:What will be the output of the following PHP code: (騰訊)
<?php
echo count(strlen("http://php.net"));
?>
answer: 1
PHP( Hypertext Preprocessor,超文本預處理器的字母縮寫)是一種被普遍應用的開放源代碼的多用途腳本語言,它可嵌入到 HTML中,尤爲適合 web 開發。
PHP 能作任何事。PHP 主要是用於服務端的腳本程序,所以能夠用 PHP 來完成任何其它的 CGI 程序可以完成的工做,例如收集表單數據,生成動態網頁,或者發送/接收 Cookies。但 PHP 的功能遠不侷限於此。
PHP 腳本主要用於如下三個領域:
1) 服務端腳本。這是 PHP 最傳統,也是最主要的目標領域。
2) 命令行腳本。能夠編寫一段 PHP 腳本,而且不須要任何服務器或者瀏覽器來運行它。經過這種方式,僅僅只須要 PHP 解析器來執行。
3) 編寫桌面應用程序。
你可使用 PHP 中任何一種輸出語句,包括echo、print、printf,大部分人都使用以下例的 echo:
echo "My string $variable";
你也可使用這種方法:
echo <<<END
This text is written to the screen as output and this $variable is parsed too. If you wanted you can have <span> HTML tags in here as well.</span> The END; remarks must be on a line of its own, and can't contain any extra white space.
END;
輸出結果爲 4
打印第一個元素:echo $arr[0];
以’,’合併成字符串:echo implode(',',$arr);
echo $a{0} 或 echo $a[0]
相關題目:$string="abcdefg",那麼$string{4}的值是? (卓望)
值是 e
=== 表示全等,是指的兩個變量的值和類型都相等。
如 if (strpos('abc','a') == false) 和 if (strpos('abc','a') === false)
A. printf("%.2d\n", 42);
B. printf("%1.2f\n", 42);
C. printf("%1.2u\n", 42);
answer:B
A. print substr($text, strchr($text, ':'));
B. print substr($text, strchr($text, ':') + 1);
C. print substr($text, strpos($text, ':') + 1);
D. print substr($text, strpos($text, ':') + 2);
E. print substr($text, 0, strchr($text, ':'));
answer:C
answer:A
answer:C
hello
1
ture
使用intval函數,echo intval("09"),或者使用int強制類型轉換。
參考代碼:
<?php
$array = array ('a', 'b', 'c', 'd');
?>
A. array_flip()
B. array_reverse()
C. sort()
D. rsort()
答案:BD
array(2,5,7)
max用法示例以下:
雙引號串中的內容能夠被解釋並且替換,而單引號串中的內容總被認爲是普通字符。
使用 Switch 語句能夠避免冗長的 if..elseif..else 代碼塊,case只能處理整數,或者能像整數同樣運算的類型,好比char,使用時case 後用'',注意 break不能少,default是爲了處理一些以前沒有包含到的狀況,這樣更爲安全。
GB2312支持的漢字較少,GBK是相比GB2312漢字更爲豐富,包括所有中日韓漢字,GB18030相比GBK增長了一些少數名族漢字漢字庫更爲多樣,可是常人很難用到,通常簡體中文使用GBK而繁體中文使用BIG5。
echo substr_count ( $text,'g');
print_r($val = 333); // 正確
$a += ($b = 4) + 5; // notice,$a未定義,但能夠正確運行
$foo[bar] = 'enemy'; // notice,最好bar加上引號
function x($a = "1", $b){} // 無,但給參數默認值應儘可能從右向左
相等
相等
不相等
true true true true true false true false
aaaaaa
5 0 1
在PHP中,做用域是不重疊的,函數以外的是全局變量,函數內部定義的則是局部變量,兩者是兩個不一樣的變量,除非在函數內使用global顯式聲明使用全局變量或直接用$_GLOBALS來引用。
5 2
1 2
array_unshift($arr,’jack’);
echo $arr[0];
echo implode(‘,’,$arr);
$arr = explode(‘,’,$str);
arsort($arr);
print_r($arr);
echo strstr($mail,'163');
echo substr($mail,7);
echo substr($mail, strpos($mail, '@')+1);
$arr = explode("@",$mail); echo $arr[1];
// 註釋內容 C風格的單行註釋
# 註釋內容 unix風格的單行註釋
/* 註釋內容 */ C風格的多行註釋
global $a 或者 $GLOBALS['a']
aa is 'aa'
相關題目:字符串怎麼轉成整數,有幾種方法?怎麼實現?
1) 強制類型轉換: (整型)字符串變量名;
2) 直接轉換:settype(字符串變量,整型);
3) intval(字符串變量);
break 和 continue 能夠用在 switch 語句中,或是循環結構中
它們的區別主要是體如今循環語句中,break 表示 跳出整個循環,再也不執行,循環將終止,而continue則表示跳出本次循環,繼續下一次的循環,不會終止循環。
當使用默認參數時,任何默認參數必須放在任何非默認參數的右側;不然,函數將不會按照預期的狀況工做。
$arr[ ] = $value;
array_push($arr, $value);
array -- 聲明一個數組
count -- 計算數組中的單元數目或對象中的屬性個數
foreach -- 遍歷數組
list -- 遍歷數組
explode -- 將字符串轉成數組
implode -- 將數組轉成一個新字符串
array_merge -- 合併一個或多個數組
is_array -- 檢查是不是數組
print_r -- 輸出數組
sort -- 數組排序
array_keys -- 返回數組中全部的鍵名
array_values -- 返回數組中全部的值
key -- 從關聯數組中取得鍵名
trim() -- 去除字符串首尾處的空白字符(或者其餘字符)
strlen() -- 字符串長度
substr() -- 截取字符串
str_replace() -- 替換字符串函數
substr_replace() -- 對指定字符串中的部分字符串進行替換
strstr() -- 檢索字符串函數
explode() -- 分割字符串函數
implode() -- 將數組合併成字符串
str_repeat() -- 重複一個字符串
addslashes(); -- 轉義字符串
htmlspecialchars() -- THML實體轉義
A. a
B. false
C. true
D. b
E. c
答案:B
mixed array_rand( array $input [, int $num_req ] )
從數組中隨機取出一個或多個單元,它接受 input 做爲輸入數組和一個可選的參數 num_req,指明瞭你想取出多少個單元 - 若是沒有指定,默認爲 1。
若是你只取出一個,array_rand() 返回一個隨機單元的鍵名,不然就返回一個包含隨機鍵名的數組。
因此使用array_rand函數,返回結果要麼是鍵名,有麼是數組,在這個例子中,數組是索引數組,因此返回的是整型。
A. 1
B. 2
C. 3
D. 4
E. 5
答案:B
A. 不區分
B. 區分
答案:A
函數名是大小寫無關的,不過在調用函數的時候,一般使用其在定義時相同的形式。以
A. null
B. true
C. false
D. 1
答案:C
is_null -- 檢測變量是否爲 NULL,若是變量是 null 則返回 TRUE,不然返回 FALSE。
在下列狀況下一個變量被認爲是 NULL:
1) 被賦值爲 NULL
2) 還沒有被賦值
3) 被unset()
$_ENV;
$_SERVER;
$_REQUEST;
$_FILES;
$_SESSION;
$_COOKIE;
$_GET;
$_POST;
$GLOBALS;
使用in_array 函數,代碼以下:
使用array_merge()函數
$a 爲false,$b = $c = 0
public:公有,任何地方均可以訪問
protected:繼承,只能在本類或子類中訪問,在其它地方不容許訪問
private:私有,只能在本類中訪問,在其餘地方不容許訪問
相關題目:請寫出PHP5權限控制修飾符
private protected public
請用PHP5代碼編寫類實如今每次對數據庫鏈接的訪問中都只能得到惟一的一個數據庫鏈接,具體鏈接數據庫的詳細代碼忽略,請寫出主要邏輯代碼(新浪網技術部)
輸出結果 10
__sleep serialize以前被調用
__wakeup unserialize時被調用
__toString 打印一個對象時被調用
__set_state 調用var_export時被調用,用__set_state的返回值做爲var_export的返回值
__construct 構造函數,實例化對象時被調用
__destruct 析構函數,當對象銷燬時被調用
__call 對象調用某個方法,若存在該方法,則直接調用,若不存在,則調用__call 函數
__get 讀取一個對象屬性時,若屬性存在,則直接返回,若不存在,則調用__get 函數
__set 設置一個對象的屬性時,若屬性存在,則直接賦值,若不存在,則調用__set函數
__isset 檢測一個對象的屬性是否存在時被調用
__unset unset一個對象的屬性時被調用
__clone 克隆對象時被調用
__autoload 實例化一個對象時,若是對應的類不存在,則該方法被調用
相關題目:請寫出php5的構造函數和析構函數
構造函數:__construct
析構函數:__destruct
雙重md5加密
$testObject = new test();
$encryption = $testObject->Get_test("itcast");
class myclass{};
相關題目:如何聲明一個名爲「myclass」的沒有方法和屬性的類?
$obj= new myclass();
相關題目:如何實例化一個名爲「myclass」的對象?
使用語句:$this->propertyName,例如:
A. will work, class definitions can be split up into multiple PHP blocks.
B. will not work, class definitions must be in a single PHP block.
C. will not work, class definitions must be in a single file but can be in multiple PHP blocks.
D. will work, class definitions can be split up into multiple files and multiple PHP blocks.
答案: B
serialize() 和 unserialize()
A. tmp
B. Picachu
C. disName
D. Doraemon
E. 無輸出
答案:D
抽象類是一種不能被實例化的類,只能做爲其餘類的父類來使用。抽象類是經過關鍵字 abstract 來聲明的。
抽象類與普通類類似,都包含成員變量和成員方法,二者的區別在於,抽象類中至少要包含一個抽象方法,
抽象方法沒有方法體,該方法天生就是要被子類重寫的。
抽象方法的格式爲:abstract function abstractMethod();
接口是經過interface關鍵字來聲明的,接口中的成員常量和方法都是public的,方法能夠不寫關鍵字public,
接口中的方法也是沒有方法體。接口中的方法也天生就是要被子類實現的。
抽象類和接口實現的功能十分類似,最大的不一樣是接口能實現多繼承。在應用中選擇抽象類仍是接口要看具體實現。
子類繼承抽象類使用extends,子類實現接口使用implements。
類中的常量也就是成員常量,常量就是不會改變的量,是一個恆值。定義常量使用關鍵字const,例如:const PI = 3.1415326;
不管是類內仍是類外,常量的訪問和變量是不同的,常量不須要實例化對象,
訪問常量的格式都是類名加做用域操做符號(雙冒號)來調用,即:類名:: 類常量名。
使用這個魔術函數的基本條件是類文件的文件名要和類的名字保持一致。
當程序執行到實例化某個類的時候,若是在實例化前沒有引入這個類文件,那麼就自動執行__autoload()函數。
這個函數會根據實例化的類的名稱來查找這個類文件的路徑,當判斷這個類文件路徑下確實存在這個類文件後就執行include或者require來載入該類,而後程序繼續執行,若是這個路徑下不存在該文件時就提示錯誤。
A. MVC
B. 代理模式
C. 狀態模式
D. 抽象工廠模式
E. 單件模式
答案:E
A. 1個
B. 2個
C. 取決於系統資源
D. 3個
E. 想要幾個有幾個
答案:A
A. a
B. 一個錯誤警告
C. 一個致命性的報錯
答案:C 由於類a是抽象類,不能被實例化
A. echo class a something echo class b something
B. echo class b something echo class a something
C. echo class a something
D. echo class b something
答案:D
類b繼承自類a,兩個類都定義了構造函數,因爲兩者名字相同,因此子類中的構造函數覆蓋了父類的構造函數,要想子類對象實例化時也執行父類的構造函數,須要在子類構造函數中使用parent::__construct()來顯示調用父類構造函數。
是的
單例模式,工廠模式
單例模式 實現代碼 見 第二題
速度快,編譯型,緩存技術,插件機制,強大的表現邏輯
safe_mode,php安全模式,它提供一個基本安全的共享環境,在一個有多個用戶帳戶存在的php開發的web服務器上。當安全模式打開的時候,一些函數將被徹底的禁止,而另外一些函數的功能將會受到限制,如:chdir, move_uploaded_file,chgrp,parse_ini_file, chown, rmdir, copy, rename, fopen, require,mkdir, unlink等。
注意,在php5.3以上版本,safe_mode被棄用,在php5.4以上版本,則將此特性徹底去除了。
PHP 能夠自動進行內存管理,清除再也不須要的對象。PHP使用了引用計數(reference counting)這種單純的垃圾回收(garbage collection)機制。每一個對象都內含一個引用計數器,每一個reference鏈接到對象,計數器加1。當reference離開生存空間或被設爲 NULL,計數器減1。當某個對象的引用計數器爲零時,PHP知道你將再也不須要使用這個對象,釋放其所佔的內存空間。
核心思路:加鎖
參考方案1:
參考方案2:
相關題目:使用五種以上方式獲取一個文件的擴展名,要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,必須使用PHP自帶的處理函數進行處理,方法不能明顯重複,能夠封裝成函數,好比 get_ext1($file_name), get_ext2($file_name)
建立類別表以下:
CREATE TABLE category(
cat_id smallint unsigned not null auto_increment primary key comment '類別ID',
cat_name VARCHAR(30) NOT NULL DEFAULT '' COMMENT '類別名稱',
parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '類別父ID'
)engine=MyISAM charset=utf8;
編寫一個函數,遞歸遍歷,實現無限分類
mysql_fetch_row() 把數據庫的一列儲存在一個以零爲基數的數組中,第一欄在數組的索引 0,第二欄在索引 1,依此類推。
mysql_fetch_assoc() 把數據庫的一列儲存在一個關聯數組中,數組的索引就是字段名稱,例如個人數據庫查詢送回「first_name」、「last_name」、 「email」三個字段,數組的索引即是「first_name」、「last_name」和「email」。mysql_fetch_array() 能夠同時送回 mysql_fetch_row() 和 mysql_fetch_assoc() 的值。
方法1(對於PHP5及更高版本):
$readcontents = fopen("http://www.phpres.com/index.html", "rb");
$contents = stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;
方法2:
echo file_get_contents("http://www.phpres.com/index.html");
由模型(model),視圖(view),控制器(controller)完成的應用程序,model層負責提供數據,和數據庫有關的操做都交給模型層來處理,view層則提供交互的界面,並輸出數據,而controller層則負責接收請求,並分發給相應的model來處理,而後調用view層來顯示。
GD庫提供了一系列用來處理圖片的API,使用GD庫能夠處理圖片,或者生成圖片。 在網站上GD庫一般用來生成縮略圖或者用來對圖片加水印或者對網站數據生成報表。自從 PHP 4.3.0 版本後 GD 便內建在 PHP 系統中。
A. fget();
B. file_open();
C. fopen();
D. open_file();
答案:C
fget() 這不是一個 PHP 函數,會引致執行錯誤。
file_open() 這不是一個 PHP 函數,會引致執行錯誤。
fopen()這是正確答案,fopen() 能夠用來開啓檔案以便讀寫。
open_file() 這不是一個 PHP 函數,會引致執行錯誤。
smarty是一個模板引擎,使用smarty主要是爲了實現邏輯和外在內容的分離,若是不使用模板的話,一般的作法就是php代碼和html代碼混編。使用了模板以後,則能夠將業務邏輯都放到php文件中,而負責顯示內容的模板則放到html文件中。Smarty在執行display方法的時候,讀取模板文件,並進行數據替換,生成編譯文件,以後每次訪問都會直接訪問編譯文件,讀取編譯文件省去了讀取模板文件,和字符串替換的時間,因此能夠更快,編譯文件裏時間戳記錄模板文件修改時間,若是模板被修改過就能夠檢測到,而後從新編譯(編譯是把靜態內容保存起來,動態內容根據傳入的參數不一樣而不一樣)。 若是啓用了緩存,則會根據編譯文件生成緩存文件,在訪問的時候若是有緩存文件而且緩存文件沒有過時,則直接訪問緩存文件。
相關題目1:可以使HTML和PHP分離開使用的模板
smarty,phplib等
相關題目2:您是否用過模板引擎? 若是有您用的模板引擎的名字是?
Smarty
方法一:php函數跳轉,缺點,header頭以前不能有輸出,跳轉後的程序繼續執行,可用exit中斷執行後面的程序。
header("Location: 網址"); //直接跳轉
header("refresh:3;url=http://axgle.za.net"); //三秒後跳轉
方法二:利用meta
echo "<meta http-equiv=refresh content='0; url=網址'>";
能夠
SVN 或者 CVS
相關題目:您是否用過版本控制軟件? 若是有您用的版本控制軟件的名字是?
TortoiseSVN-1.2.6
過濾javascript腳本參考:
方案一,使用PHP 內建函數 strip_tags() 除去 HTML 標籤
方案二,自定義函數,以下:
preg_match('/^[\w\-\.]+@[\w\-]+(\.\w+)+$/', $email);
相關題目:請用正則表達式寫一個函數,驗證電子郵件的格式是否正確。 (鑫衆人云)
主要區別有如下三種:
1) preg_replace()裏面的正則能夠寫成型如:"/.xxx/"而ereg_replace()裏面的正則需寫成型如"xxx"
2) preg_replace()能操做數組,而ereg_replace()不能夠
3) 在逆向引用用preg_replace()可以使用0-99個,而ereg_replace()最多爲9個
使用 Perl 兼容正則表達式語法的 preg_match() 函數一般是比 ereg() 更快的替代方案。
首先進入php安裝目錄
php -f d:/wamp/www/1.php 其中-f參數指定要執行的php文件
php -r phpinfo(); 其中-r表示直接執行php代碼,無需寫開始結束標記
編寫以下函數:
function getAttrValue($str, $tagName, $attrName){
$pattern1 = "/<" . $tagName . "(\\s+\\w+\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)
(\\2))*\\s+" . $attrName . "\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\5)
(\\s+\\w+\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\9))*\\s*>/i";
$arr = array();
$re = preg_match($pattern1, $str, $arr);
if($re){
echo "<br />\$arr[6]={$arr[6]}";
}
else{
echo "<br />沒找到。";
}
}
測試:
$str1 = "<test attr='ddd'>";
getAttrValue($str1,"test","attr"); //找test標籤中attr屬性的值,結果爲ddd
$str2 = "<test2 attr='ddd' attr2='ddd2' t1=\"t1 value\" t2 = 't2 value'>";
getAttrValue($str2,"test2","t1"); //找test2標籤中t1屬性的值,結果爲t1 value
這是把一個日期從 MM/DD/YYYY 的格式轉爲 DD/MM/YYYY 格式。
輸出26/08/2003
答案:B
redir() 這不是一個 PHP 函數,會引致執行錯誤。
header() 這個是正確答案,header()函數發送頭信息,能夠用來使瀏覽器轉向到另外一個頁面,例如:header("Location: http://www.search-this.com/")。
location() 這不是一個 PHP 函數,會引致執行錯誤。
redirect() 這不是一個 PHP 函數,會引致執行錯誤。
A. show_errors, enable
B. show_errors, show
C. register_globals, enhance
D. register_globals, inject
答案:C
allow_call_time_pass_reference
是否啓用在函數調用時強制參數被按照引用傳遞
請注意:
4) 須要處理完整的 html 頁面,即不光此 meta 語句
(2) 忽略大小寫
11. ' 和 " 在此處是能夠互換的
12. 'Content-Type' 兩側的引號是能夠忽略的,但 'text/html; charset=gbk' 兩側的不行
13. 注意處理多餘空格
編寫正則表達式以下:
$reg1 = "/(<meta\\s*http-equiv\\s*=\\s*(['\"]?)Content-Type(\\2)\\s*content\\s*=\\s*(['\"])
text\/html;charset=)(UTF-8)(\\4)(\\s*\/?>)/i";
使用 key() 能夠得到數組中當前元素的鍵名,使用current()則能夠返回當前元素的值。使用array_keys()則能夠獲得數組中全部的鍵名。使用foreach結構foreach($arr as $key=>$value) 能夠經過$key 和 $value分別獲取鍵名和值。
$data = array(
0 => array('id' => 8, 'name' => 'name1'),
1 => array('id' => 10, 'name' => 'name2'),
2 => array('id' => 15, 'name' => 'name3')
);
寫出在模板頁的代碼?若用foreach語句又要怎樣顯示呢?
用section語句:
<{section name=test loop=$data start=0 step=1}>
id:<{$data[test].id}><br />
name:<{$data[test].name}><br /><br />
<{sectionelse}>
數組爲空
<{/section}>
用foreach語句:
<{foreach from=$data item=test}>
id:<{$test.id}><br />
name:<{$test.name}><br /><br />
<{foreachelse}>
數組爲空
<{/foreach}>
A. ******xyz
B. *****_xyz1
C. ******xyz2
D. _*xyz
答案:C
A. E_WARNING
B. E_USER_ERROR
C. E_PARSE
D. E_NOTICE
答案:B
A. E_WARNING
B. E_USER_ERROR
C. E_PARSE
D. E_NOTICE
答案:C
匹配以0個或多個空白符開頭或者0個或多個空白符結尾的字符串
能夠,還能夠在須要控制的子目錄下建立.htaccess文件,寫入訪問控制。
從如下幾個方面考慮:
1) 數據庫中庫和表都用utf8編碼
2) php鏈接mysql,指定數據庫編碼爲utf8 mysql_query(「set names utf8」);
3) php文件指定頭部編碼爲utf-8 header(「content-type:text/html;charset=utf-8」);
4) 網站下全部文件的編碼爲utf8
5) html文件指定編碼爲utf-8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
md5($str);
sha1($str);
htmlspecialchars 或者 htmlentities
mb_sring、iconv、curl、GD、XML、socket、MySQL、PDO 等
FleaPHP、Zend Framework、CakePHP、Symfony、ThinkPHP、YII、CodeIgniter等
上傳文件的表單使用post方式,而且要在form中添加enctype='multipart/form-data'。
通常能夠加上隱藏域:<input type=hidden name='MAX_FILE_SIZE' value=dddddd>,位置在file域前面。value的值是上傳文件的客戶端字節限制。能夠避免用戶在花時間等待上傳大文件以後才發現文件過大上傳失敗的麻煩。
使用file文件域來選擇要上傳的文件,當點擊提交按鈕以後,文件會被上傳到服務器中的臨時目錄,在腳本運行結束時會被銷燬,因此應該在腳本結束以前,將其移動到服務器上的某個目錄下,能夠經過函數move_uploaded_file()來移動臨時文件,要獲取臨時文件的信息,使用$_FILES。
限制上傳文件大小的因素有:
1) 客戶端的隱藏域MAX_FILE_SIZE的數值(能夠被繞開)。
2) 服務器端的upload_max_filesize,post_max_size和memory_limit。這幾項不可以用腳原本設置。
3) 自定義文件大小限制邏輯。即便服務器的限制是能本身決定,也會有須要個別考慮的狀況。因此這個限制方式常常是必要的。
UBB代碼是HTML的一個變種,經過程序自定義咱們的標籤,好比「[a]PHP中UBB的使用[/a]」這樣的標籤,其實質就是查找[a][/a]標籤,將其替換成<a></a>的標準html,說白了,就是將標準的html標記經過技術手段使其簡化,其輸出出來的結果仍是標準的 html。
明白了ubb的原理,那麼再製做一個簡單的 ubb 編輯器就不難了,和 fck 之類的編輯器比較起來,ubb 代碼最大的優勢就是代碼簡單,功能不多,簡單的ubb只須要一個文件,並且 ubb 標籤能夠本身來定義,更改起來很方便,在 php 中就是利用替換函數就能夠將 html 進行標籤化,輸出時進行標籤的轉化。
能夠本身設置上傳文件的保存目錄,與文件名拼湊造成一個文件路徑,使用move_uploaded_file(),就能夠完成將文件保存到指定目錄。能夠經過上傳的文件名獲取到文件後綴,而後使用時間戳+隨機數+文件後綴的方式爲文件從新命名,這樣就避免了重名。
中,用來判斷錯誤是如何發生的。 (奇矩互動)
debug_print_backtrace()
1),array('id' => 2),……) id=>0-10000 ,怎麼判斷當id=>500,讓輸出的值在HTML裏變爲紅色? (億郵)
設數組分配過來的數組名爲 $ids
{section name = temp loop = $ids}
{if $ids[temp].id == 500}
<span style = ‘color: #f00;’>{$ids[temp].id}</span>
{esle}
{$ids[temp].id}
{/if}
{/section}
使用{$smarty.now} 來獲取當前時間,獲得的是unix系統時間戳
使用變量調節器進行格式化,以下:
{$smarty.now | date_format : 「%Y-%m-%d %H:%M:%S」 }
$smarty.get.變量 #顯示經過get方式傳過來的指定變量的值
$smarty.post.變量 #顯示經過post方式傳過來的指定變量的值
$smarty.cookies.變量 #顯示經過cookie中指定變量的值
$smarty.server.SERVER_NAME #顯示server變量值,$_SERVER系列變量
$smarty.env.PATH #顯示系統環境變量值,$_ENV系列變量
$smarty.session.變量 #顯示session中指定變量的值
$smarty.request.變量 #顯示經過post、get、cookie中指定變量的值
使用模板分隔符包含,傳遞參數則使用HTML屬性的方式,例如:
{html_image file="pumpkin.jpg"}
mysql,gd,pdo,XML,zip,filesystem,mail等
utf8_to_gb2312 或者 utf8togb2312
<IfModulemod_rewrite.c>
RewriteEngineon
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteBase/
RewriteRule./index.php[L]
</IfModule>
若是REQUEST_FILENAME文件存在,就直接訪問文件,不進行下面的rewrite規則,若是REQUEST_FILENAME目錄存在,就直接訪問目錄,不進行下面的rewrite規則,RewriteRule./index.php[L]的意思是把全部的請求都給index.php處理。
D:\src\init.php:7) in D:\src\init.php on line10一般什麼狀況下php會報該警告信息?(卓望)
通常是在header、set_cookie以及session_start函數前面有輸出(包括空格)的狀況下,會報該警告信息
能夠,COOKIE和SESSION都是用來實現會話機制的,因爲http協議是無狀態的,因此要想跟蹤一個用戶在同一個網站之間不一樣頁面的 狀態,須要有這麼一個機制----會話機制。
COOKIE:將會話信息的保存到瀏覽器端。
SESSION:將會話信息保存到服務器端。
SESSION默認狀況下是基於COOKIE的,對於SESSION來講,每生成一個SESSIONID,都會將其發送到瀏覽器端,讓後將其保存到cookie當中。
若是禁用了COOKIE,則基於COOKIE的SESSION很差使了,咱們可使用get,傳遞SID,或者直接開啓透明的SID(此時須要關閉基於cookie的SESSION配置項)。
相關題目:SESSION與COOKIE的區別?
COOKIE保存在客戶端,而SESSION則保存服務器端。
從安全性的角度來說,SESSION的安全性要高。
從保存內容的類型的角度來說,COOKIE只保存字符串(及可以自動轉換成字符串),而session則能夠保存全部的數據類型。
從保存內容的大小的角度來說,COOKIE保存的內容是有限制的,比較小,而SESSION基本上沒有這個限制。
從性能的角度來說,用SESSION的話,對服務器的壓力會更大一些。
用戶名(username):溫柔一刀
密碼(pwd):&123=321&321=123&
我的簡介(intro):Hello world!
且該http server須要如下cookie來進行簡單的用戶動做跟蹤:
cur_query:you&me
last_tm:...(上次請求的unix時間戳,定爲當前請求時間前10分鐘)
cur_tm:...(當前請求的unix時間戳)
設置超時爲10秒,發出請求後,將http server的響應內容輸出 (騰訊)
參考代碼:
if($fp = fsockopen('localhost', '80')) {
//鏈接成功
$request_data = "POST /2.php HTTP/1.1" . "\r\n"; //請求行
$request_data .= "Host: localhost" . "\r\n"; //host頭信息
$request_data .= "User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" . "\r\n";//host頭信息
$request_content = "username=".urlencode('溫柔一刀')."&pwd=".urlencode('&123=321&321=123&')."&intro=".urlencode("Hello world!");
$request_data .= "Content-Type: application/x-www-form-urlencoded" . "\r\n";
$request_data .= "Content-Length: " . strlen($request_content) . "\r\n";
$cur_query = urlencode("you&me");
$last_tm = time()-10*60;
$cur_tm = time();
$request_data .= "Cookie:cur_query=$cur_query;last_tm=$last_tm;cur_tm=$cur_tm" . "\r\n";
$request_data .= "\r\n"; //請求頭信息結束時的空行
//請求主體數據部分
$request_data .= $request_content;
//利用創建好的通道,將數據發送過去
fwrite($fp, $request_data); //寫入數據(發送數據)
//讀取數據
while(!feof($fp)) { //判斷是否沒有到文件末尾
$resp_data = fgets($fp);
echo $resp_data . '<br>';
}
}
未經受權:訪問因爲憑據無效被拒絕
header("HTTP/1.0 404 Not Found")
要注意這裏的生存時間指的是什麼? 因爲session默認是基於cookie的,也就是說使用session會話技術,首先是將session數據保存到服務器端,其次會將sessionID 保存到瀏覽器端,保存在服務器端的session文件生命週期由php.ini中的session.gc_maxlifetime、gc_probability和gc_divisor來決定,而保存在客戶端的sessionID由客戶端cookie來決定,默認其生存週期直到瀏覽器關閉,它也能夠經過php.ini中的設置session.cookie_lifetime 來控制,兩者共同來決定session 的生存時間,兩者中的其中任意一個失效了,就會形成session失效,要根據本身的需求來決定是要從哪方面來修改其生存時間。
參考1:將php.ini中的session.gc_maxlifetime設置爲9999重啓apache
參考2:
$savePath = "./session_save_dir/";
$lifeTime = 小時 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
參考3:
session_start();
$lifeTime = 24 * 3600; // 保存一天
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
最主要的兩個選擇是SESSION和COOKIE。使用SESSION的方法是在每一頁的開始加session_start(),而後利用$_SESSION來存取 SESSION變量。至於 COOKIE你只需記着一個原則:在輸出任何文字以前調用 set_cookie() 函數設置COOKIE,使用 $_COOKIE 獲取COOKIE變量。
6. PHP程序中如何設置當前頁面的編碼爲utf-8?
header(「content-type:text/html;charset=utf-8」);
setcookie(‘username’,’jack’,time()+7*24*3600);
cookie的總數量沒有限制,可是每一個域名的COOKIE數量和每一個COOKIE的大小是有限制的!
IE每一個域名限制爲50個。
Firefox每一個域名cookie限制爲50個。
Opera每一個域名cookie限制爲30個。
Safari/webkit貌似沒有cookie限制。可是假如cookie不少,則會使header大小超過服務器的處理的限制,會致使錯誤發生。
不一樣瀏覽器間每一個cookie文件大小也不一樣
Firefox和safari是4097個字節,包括名(name)、值(value)和等號。
Opera是4096個字節,包括:名(name)、值(value)和等號。
IE是4095個字節,包括:名(name)、值(value)和等號。
session_start()前面不能有任何輸出,包括空行。
相關題目:使用setcookie函數前,須要注意什麼?
前面不能有任何輸出,包括空行。
物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層
11. 說說下面這些這些協議的全稱和中文解釋(提示:都是工做在應用層)SMTP、POP3、HTTP、FTP、DNS (小米)
SMTP (Simple Mail Transfer Protocol) 簡單郵件傳輸協議
POP3 (Post Office Protocol 3) 郵局協議第3版
HTTP (Hypertext Transfer Protocol) 超文本傳輸協議
FTP (File Transfer Protocol)文件傳輸協議
DNS (Domain Name System and Domain Name Service protocol) 域名系統(服務)協議
COOKIE和SESSION都是用於會話機制,COOKIE保存在客戶端,而SESSION則保存在服務器端。在默認狀況下,SESSION機制是基於COOKIE的,每生成一個SESSIONID,都會將其發送到瀏覽器端,讓後將其保存到COOKIE當中,在下次請求的時候,由瀏覽器攜帶這個COOKIE。
要想多臺web服務器共享SESSION,能夠利用MySQL數據庫存儲SESSION數據。
200 OK 服務器成功處理了請求
301 Moved Permanently(重定向)請求的URL已移走
304 Not Modified(未修改)客戶的緩存資源是最新的, 要客戶端使用緩存
403 Forbidden(禁止)請求被服務器拒絕了
404 Not Found 未找到資源
Internal Server Error(內部服務器錯誤) 服務器遇到一個錯誤,使其沒法爲請求提供服務
session機制是一種服務器端的機制,它將數據保存到服務器端。
當程序須要爲某個客戶端的請求建立一個session的時候,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識, 稱爲 sessionid,若是已包含一個sessionid則說明之前已經爲此客戶端建立過session,服務器就按照sessionid把這個 session檢索出來使用(若是檢索不到,可能會新建一個),若是客戶端請求不包含sessionid,則爲此客戶端建立一個session而且生成一個與此session相關聯的sessionid,sessionid的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個 sessionid將被在本次響應中返回給客戶端以cookie的形式保存。
session在大訪問量網站上確實影響系統性能,影響性能的緣由之一由文件系統設計形成,在同一個目錄下超過10000個文件時,文件的定位將很是耗時,另外就是小文件的效率問題,通常咱們的session數據都不會太大(1~2K),若是有大量這樣1~2K的文件在磁盤上,IO效率確定會不好,咱們能夠採用改寫session存儲機制,好比存放到數據庫中。
6個,255.255.255.248換算成二進制就是11111111.11111111.11111111.11111000
後面的三位用來表示主機,前面的29位用來表示網絡。
三位表示主機,就是能夠用來表示2^3=8個,再減去網絡地址和廣播地址,就是6個了。
TCP是主機對主機層的傳輸控制協議,提供可靠的鏈接服務,採用三次握手確認創建一個鏈接:
第一次握手:創建鏈接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
完成三次握手,客戶端與服務器開始傳送數據。
header函數
POST www.10086.cn HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://localhost/a.html
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; KB974487)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost
Content-Length: 25
Connection: Keep-Alive
username=abc&password=123
---恢復內容結束---
strlen 和mb_strlen 都是用於獲取字符串長度的,其中strlen只針對單字節編碼字符,也就是說它計算的是字符串的總字節數,若是是多字節編碼,如gbk和utf8,使用strlen獲得的不是字符串的個數,而是該字符串的總字節數,可使用mb_strlen獲取其字符個數,使用mb_strlen要注意兩點,一是要開啓mbstring擴展,二是要指定字符集。
示例:
相關題目1:實現中文字串截取無亂碼的方法。
方法一,使用php內置函數 mb_substr()
方法二,自定義函數,以utf8爲例,以下:
代碼分析:
//u 表示按unicode(utf-8)匹配(主要針對多字節好比漢字)
join — 別名 implode()表示將一個一維數組的值轉化爲字符串
array_slice() 函數在數組中根據條件取出一段值,並返回
相關題目2:如何求解字符串「中國2北333京」的字符數(一箇中文一個字符),並找到第四個字符「北」
方法一,使用php內置函數,確保配置中已打開mbstring擴展
方法二,自定義函數實現求其長度,截取使用上面定義的substr_utf8
代碼分析:
A. split
B. implode
C. explode
D. join
答案:A
答案:1
$_SERVER['DOCUMENT_ROOT'] //當前運行腳本所在的文檔根目錄$_SERVER['HTTP_HOST '] //當前請求的 Host: 頭部的內容
$_SERVER['REMOTE_ADDR'] //正在瀏覽當前頁面用戶的 IP 地址
$_SERVER['HTTP_REFERER'] //連接到當前頁面的前一頁面的 URL 地址
$_SERVER['SERVER_NAME'] //當前運行腳本所在服務器主機的名稱
$_FILES //包含有全部上傳的文件信息,他是預約義超級全局數組中惟一的二維數組。
S_FILES['userfile']['name'] //客戶端機器文件的原名稱
$_FILES['userfile']['type'] //文件MIME 類型,若是瀏覽器提供此信息的話,如「image/gif」。
$_FILES['userfile']['size'] //已上傳文件的大小,單位爲字節
$_FILES['userfile']['tmp_name'] //文件被上傳後在服務端儲存的臨時文件名
$_FILES['userfile']['error'] //和該文件上傳相關的錯誤代碼
兩者區別只有一個,那就是對包含文件的需求程度,include就是包含,若是被包含的文件不存在的話,那麼則會提示一個錯誤,可是程序會繼續執行下去。
而require意思是須要,若是被包含文件不存在或者沒法打開的時候,則會提示錯誤,而且會終止程序的執行。
這兩種結構除了在如何處理失敗以外徹底同樣。
once的意思是一次,那麼include_once和require_once表示只包含一次,避免重複包含。
相關題目1:What is the difference between include & include_once? include & require?(Yahoo)
相關題目2:語句 include 和 require 都能把另一個文件包含到當前文件中,它們的區別是____;爲了不屢次包含同一文件,能夠用語句____來代替它們。
在如何處理失敗時,include() 產生一個警告而 require() 則致使一個致命錯誤;require_once()/include_once()
相關題目3:What functions can you use to add library code to the currently running script?(Yahoo)
include、require
POST 根據你php.ini文件配置(默認是8M)
GET的話大小限制在2KB
相關題目:表單中 get與post提交方法的區別?
get是發送請求HTTP協議經過url參數傳遞進行接收,而post是實體數據,能夠經過表單提交大量信息。
A.php:-------
<?php function fa() { echo "in Function A\n"; }?>
B.php:-------
<?php include 'a.php'; ?>
<?php function fb() { fa(); echo "in Function B\n"; } ?>
C.php:-------
<?php include 'a.php'; ?>
<?php include 'b.php'; ?>
<?php fa(); fb(); ?>
答案:存在問題,a.php 被包含了兩次,致使fa()函數重複定義,使用include_once 避免重複包含。(此處應首先想到考點可能就是include和include_once)(總結:函數不能重複定義)
echo 是一個語言結構,輸出一個或多個字符串;
print() 實際上不是一個函數(它是一個語言結構),所以你能夠沒必要使用圓括號來括起它的參數列表,它輸出一個字符串;
print_r () 是一個函數,打印變量的信息,基本類型,數組,對象。
注意 ,是echo自己支持的一種語法,而. 則是字符串鏈接操做符,使用 , 的效率要高一些。
相關題目:What is the difference between "print()" and "echo( )"? (騰訊)
answer: print is a function,echo is a language construct
相關題目:求兩個日期的差數,例如2009-3-1 ~ 2009-4-4 的日期差數
(strtotime("2009-4-4")-strtotime("2009-3-1"))/3600*24
方案一:
方案二:
對字符進行編碼,好比base64_encode,要保證編碼是可逆的
變量默認老是傳值賦值。那也就是說,當將一個表達式的值賦予一個變量時,整個原始表達式的值被賦值到目標變量。這意味着,例如,當一個變量的值賦予另一個變量時,改變其中一個變量的值,將不會影響到另一個變量。
PHP 也提供了另一種方式給變量賦值:引用賦值。這意味着新的變量簡單引用(換言之,「成爲其別名」 或者 「指向」)了原始變量。改動新的變量將影響到原始變量,反之亦然。使用引用賦值,簡單地將一個 & 符號加到將要賦值的變量前(源變量)。
對象默認是傳引用。
須要操做原始數據,則引用,不能影響原始數據,則值傳遞。
相關題目1:What would the following code print to the browser? Why?
輸出 10 (調用函數的題必定要考慮是否有返回值)
相關題目2:What is the difference between a reference and a regular variable? How do you pass by reference & why would you want to?(Yahoo)
reference 傳送的是變量的地址而非它的值,因此在函數中改變一個變量的值時,整個應用都見到這個變量的新值。
一個regular variable傳送給函數的是它的值,當函數改變這個變量的值時,只有這個函數才見到新值,應用的其餘部分仍然見到舊值。
相關題目1:如何實現字符串翻轉?
strrev(),不過這種方法都不能解決中文字符串翻轉的問題,會出錯的。
相關題目2:假設如今有一個字符串www.baidu.com如何使用PHP對它進行操做使字符串以moc.udiab.輸出? (億郵)
客戶端IP:$_SERVER["REMOTE_ADDR"]
服務器端IP:$_SERVER["SERVER_ADDR"]
獲取當前執行腳本路徑使用$_SERVER["SCRIPT_FILENAME"] 或 __FILE__
獲取參數,使用$_SERVER["QUERY_STRING"]
__FILE__ :被稱爲PHP魔術常量,返回當前執行PHP腳本的完整路徑和文件名,包含一個絕對路徑
foo() 會執行這個函式,任何解譯錯誤、語法錯誤、執行錯誤都會在頁面上顯示出來。@foo() 在執行這個函式時,會隱藏全部上述的錯誤訊息。
不少應用程序都使用 @mysql_connect() 和 @mysql_query 來隱藏 mysql 的錯誤信息,這是不對的,由於錯誤不應被隱藏,你必須妥善處理它們,可能的話解決它們。
A. $users[ ] = "john";
B. array_add($users, "john"); //PHP中沒有array_add這個函數
C. array_push($users, "john");
D. $users ||= "john" ;
答案:BD
isset 檢測一個變量是否設置
empty 檢測是否爲空
注意兩者的區別,若是 變量是非空或非零的值,則 empty() 返回 FALSE。換句話說,""、0、"0"、NULL、FALSE、array() 以及沒有任何屬性的對象都將被認爲是空的。
當前腳本名稱:$_SERVER["PHP_SELF"] 或者 $_SERVER["SCRIPT_NAME"];
連接到當前頁面的前一頁面的 URL 地址:$_SERVER["HTTP_REFERER"]。
sort(),根據數組中元素的值,以英文字母順序排序,索引鍵會由 0 到 n-1 從新編號。主要是當數組索引鍵的值可有可無時用來把數組排序。
assort(),PHP 沒有 assort() 函式,因此多是 asort() 的筆誤。
asort(),對數組進行排序,數組的索引保持和單元的關聯。主要用於對那些單元順序很重要的結合數組進行排序。
ksort(),根據數組中索引鍵的值,以英文字母順序排序,特別適合用於但願把索引鍵排序的關聯數組。
打開或者關閉錯誤報告,如:
error_reporting(0);
error_reporting(E_ALL & ~ E_NOTICE);
error_reporting(E_ALL);
相關題目:error_reporting(2047) 什麼做用?(新浪)
2047 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256 + 512 + 1024
其中,1對應E_ERROR,2對應E_WARNING,4對應E_PARSE,8對應E_NOTICE,16對應E_CORE_ERROR,32對應E_CORE_WARNING,64對應E_COMPILE_ERROR, 128對應E_COMPILE_WARNING,256對應E_USER_ERROR,512對應E_USER_WARNING,1024對應E_USER_NOTICE。error_reporting(2047)意味着上述錯誤都會顯示出來。
hotdogok
相關題目:什麼是可變變量?
獲取一個普通變量的值做爲這個可變變量的變量名。
定義常量:define() ,
檢測常量是否認義:defined(),如
define("TEST","happy new year!");
if( defined("TEST")){
echo TEST;
}
%爲取模運算,輸出0
$a % $b 其結果的正負取決於 $a 的符號。
echo ((-8)%3)."<br />"; //輸出 -2
echo (8%(-3))."<br />"; //輸出 2
arsort:對數組進行逆向排序並保持索引關係
error_reporting(2047)的做用 report All errors and warnings,見21題中相關題目。
LoadModule php5_module "c:/php/php5apache2.dll";
AddType application/x-httpd-php .php
allow_call_time_pass_reference :是否啓用在函數調用時強制參數被按照引用傳遞,默認關閉。
頂格寫,而且不能包含任何其它字符除";",如:
$str = <<<SHOW
my name is Jiang Qihui!
SHOW;
輸出1
count :計算數組中的單元數目或對象中的屬性個數,一般是一個 array,任何其它類型都只有一個單元。
對於對象,若是安裝了 SPL,能夠經過實現 Countable 接口來調用 count()。該接口只有一個方法 count(),此方法返回 count() 函數的返回值。
若是 var 不是數組類型或者實現了 Countable 接口的對象,將返回 1,有一個例外,若是 var 是 NULL 則結果是 0。
相關題目:What will be the output of the following PHP code: (騰訊)
<?php
echo count(strlen("http://php.net"));
?>
answer: 1
PHP( Hypertext Preprocessor,超文本預處理器的字母縮寫)是一種被普遍應用的開放源代碼的多用途腳本語言,它可嵌入到 HTML中,尤爲適合 web 開發。
PHP 能作任何事。PHP 主要是用於服務端的腳本程序,所以能夠用 PHP 來完成任何其它的 CGI 程序可以完成的工做,例如收集表單數據,生成動態網頁,或者發送/接收 Cookies。但 PHP 的功能遠不侷限於此。
PHP 腳本主要用於如下三個領域:
1) 服務端腳本。這是 PHP 最傳統,也是最主要的目標領域。
2) 命令行腳本。能夠編寫一段 PHP 腳本,而且不須要任何服務器或者瀏覽器來運行它。經過這種方式,僅僅只須要 PHP 解析器來執行。
3) 編寫桌面應用程序。
你可使用 PHP 中任何一種輸出語句,包括echo、print、printf,大部分人都使用以下例的 echo:
echo "My string $variable";
你也可使用這種方法:
echo <<<END
This text is written to the screen as output and this $variable is parsed too. If you wanted you can have <span> HTML tags in here as well.</span> The END; remarks must be on a line of its own, and can't contain any extra white space.
END;
輸出結果爲 4
打印第一個元素:echo $arr[0];
以’,’合併成字符串:echo implode(',',$arr);
echo $a{0} 或 echo $a[0]
相關題目:$string="abcdefg",那麼$string{4}的值是? (卓望)
值是 e
=== 表示全等,是指的兩個變量的值和類型都相等。
如 if (strpos('abc','a') == false) 和 if (strpos('abc','a') === false)
A. printf("%.2d\n", 42);
B. printf("%1.2f\n", 42);
C. printf("%1.2u\n", 42);
answer:B
A. print substr($text, strchr($text, ':'));
B. print substr($text, strchr($text, ':') + 1);
C. print substr($text, strpos($text, ':') + 1);
D. print substr($text, strpos($text, ':') + 2);
E. print substr($text, 0, strchr($text, ':'));
answer:C
answer:A
answer:C
hello
1
ture
使用intval函數,echo intval("09"),或者使用int強制類型轉換。
參考代碼:
<?php
$array = array ('a', 'b', 'c', 'd');
?>
A. array_flip()
B. array_reverse()
C. sort()
D. rsort()
答案:BD
array(2,5,7)
max用法示例以下:
雙引號串中的內容能夠被解釋並且替換,而單引號串中的內容總被認爲是普通字符。
使用 Switch 語句能夠避免冗長的 if..elseif..else 代碼塊,case只能處理整數,或者能像整數同樣運算的類型,好比char,使用時case 後用'',注意 break不能少,default是爲了處理一些以前沒有包含到的狀況,這樣更爲安全。
GB2312支持的漢字較少,GBK是相比GB2312漢字更爲豐富,包括所有中日韓漢字,GB18030相比GBK增長了一些少數名族漢字漢字庫更爲多樣,可是常人很難用到,通常簡體中文使用GBK而繁體中文使用BIG5。
echo substr_count ( $text,'g');
print_r($val = 333); // 正確
$a += ($b = 4) + 5; // notice,$a未定義,但能夠正確運行
$foo[bar] = 'enemy'; // notice,最好bar加上引號
function x($a = "1", $b){} // 無,但給參數默認值應儘可能從右向左
相等
相等
不相等
true true true true true false true false
aaaaaa
5 0 1
在PHP中,做用域是不重疊的,函數以外的是全局變量,函數內部定義的則是局部變量,兩者是兩個不一樣的變量,除非在函數內使用global顯式聲明使用全局變量或直接用$_GLOBALS來引用。
5 2
1 2
array_unshift($arr,’jack’);
echo $arr[0];
echo implode(‘,’,$arr);
$arr = explode(‘,’,$str);
arsort($arr);
print_r($arr);
echo strstr($mail,'163');
echo substr($mail,7);
echo substr($mail, strpos($mail, '@')+1);
$arr = explode("@",$mail); echo $arr[1];
// 註釋內容 C風格的單行註釋
# 註釋內容 unix風格的單行註釋
/* 註釋內容 */ C風格的多行註釋
global $a 或者 $GLOBALS['a']
aa is 'aa'
相關題目:字符串怎麼轉成整數,有幾種方法?怎麼實現?
1) 強制類型轉換: (整型)字符串變量名;
2) 直接轉換:settype(字符串變量,整型);
3) intval(字符串變量);
break 和 continue 能夠用在 switch 語句中,或是循環結構中
它們的區別主要是體如今循環語句中,break 表示 跳出整個循環,再也不執行,循環將終止,而continue則表示跳出本次循環,繼續下一次的循環,不會終止循環。
當使用默認參數時,任何默認參數必須放在任何非默認參數的右側;不然,函數將不會按照預期的狀況工做。
$arr[ ] = $value;
array_push($arr, $value);
array -- 聲明一個數組
count -- 計算數組中的單元數目或對象中的屬性個數
foreach -- 遍歷數組
list -- 遍歷數組
explode -- 將字符串轉成數組
implode -- 將數組轉成一個新字符串
array_merge -- 合併一個或多個數組
is_array -- 檢查是不是數組
print_r -- 輸出數組
sort -- 數組排序
array_keys -- 返回數組中全部的鍵名
array_values -- 返回數組中全部的值
key -- 從關聯數組中取得鍵名
trim() -- 去除字符串首尾處的空白字符(或者其餘字符)
strlen() -- 字符串長度
substr() -- 截取字符串
str_replace() -- 替換字符串函數
substr_replace() -- 對指定字符串中的部分字符串進行替換
strstr() -- 檢索字符串函數
explode() -- 分割字符串函數
implode() -- 將數組合併成字符串
str_repeat() -- 重複一個字符串
addslashes(); -- 轉義字符串
htmlspecialchars() -- THML實體轉義
A. a
B. false
C. true
D. b
E. c
答案:B
mixed array_rand( array $input [, int $num_req ] )
從數組中隨機取出一個或多個單元,它接受 input 做爲輸入數組和一個可選的參數 num_req,指明瞭你想取出多少個單元 - 若是沒有指定,默認爲 1。
若是你只取出一個,array_rand() 返回一個隨機單元的鍵名,不然就返回一個包含隨機鍵名的數組。
因此使用array_rand函數,返回結果要麼是鍵名,有麼是數組,在這個例子中,數組是索引數組,因此返回的是整型。
A. 1
B. 2
C. 3
D. 4
E. 5
答案:B
A. 不區分
B. 區分
答案:A
函數名是大小寫無關的,不過在調用函數的時候,一般使用其在定義時相同的形式。以
A. null
B. true
C. false
D. 1
答案:C
is_null -- 檢測變量是否爲 NULL,若是變量是 null 則返回 TRUE,不然返回 FALSE。
在下列狀況下一個變量被認爲是 NULL:
1) 被賦值爲 NULL
2) 還沒有被賦值
3) 被unset()
$_ENV;
$_SERVER;
$_REQUEST;
$_FILES;
$_SESSION;
$_COOKIE;
$_GET;
$_POST;
$GLOBALS;
使用in_array 函數,代碼以下:
使用array_merge()函數
$a 爲false,$b = $c = 0
public:公有,任何地方均可以訪問
protected:繼承,只能在本類或子類中訪問,在其它地方不容許訪問
private:私有,只能在本類中訪問,在其餘地方不容許訪問
相關題目:請寫出PHP5權限控制修飾符
private protected public
請用PHP5代碼編寫類實如今每次對數據庫鏈接的訪問中都只能得到惟一的一個數據庫鏈接,具體鏈接數據庫的詳細代碼忽略,請寫出主要邏輯代碼(新浪網技術部)
輸出結果 10
__sleep serialize以前被調用
__wakeup unserialize時被調用
__toString 打印一個對象時被調用
__set_state 調用var_export時被調用,用__set_state的返回值做爲var_export的返回值
__construct 構造函數,實例化對象時被調用
__destruct 析構函數,當對象銷燬時被調用
__call 對象調用某個方法,若存在該方法,則直接調用,若不存在,則調用__call 函數
__get 讀取一個對象屬性時,若屬性存在,則直接返回,若不存在,則調用__get 函數
__set 設置一個對象的屬性時,若屬性存在,則直接賦值,若不存在,則調用__set函數
__isset 檢測一個對象的屬性是否存在時被調用
__unset unset一個對象的屬性時被調用
__clone 克隆對象時被調用
__autoload 實例化一個對象時,若是對應的類不存在,則該方法被調用
相關題目:請寫出php5的構造函數和析構函數
構造函數:__construct
析構函數:__destruct
雙重md5加密
$testObject = new test();
$encryption = $testObject->Get_test("itcast");
class myclass{};
相關題目:如何聲明一個名爲「myclass」的沒有方法和屬性的類?
$obj= new myclass();
相關題目:如何實例化一個名爲「myclass」的對象?
使用語句:$this->propertyName,例如:
A. will work, class definitions can be split up into multiple PHP blocks.
B. will not work, class definitions must be in a single PHP block.
C. will not work, class definitions must be in a single file but can be in multiple PHP blocks.
D. will work, class definitions can be split up into multiple files and multiple PHP blocks.
答案: B
serialize() 和 unserialize()
A. tmp
B. Picachu
C. disName
D. Doraemon
E. 無輸出
答案:D
抽象類是一種不能被實例化的類,只能做爲其餘類的父類來使用。抽象類是經過關鍵字 abstract 來聲明的。
抽象類與普通類類似,都包含成員變量和成員方法,二者的區別在於,抽象類中至少要包含一個抽象方法,
抽象方法沒有方法體,該方法天生就是要被子類重寫的。
抽象方法的格式爲:abstract function abstractMethod();
接口是經過interface關鍵字來聲明的,接口中的成員常量和方法都是public的,方法能夠不寫關鍵字public,
接口中的方法也是沒有方法體。接口中的方法也天生就是要被子類實現的。
抽象類和接口實現的功能十分類似,最大的不一樣是接口能實現多繼承。在應用中選擇抽象類仍是接口要看具體實現。
子類繼承抽象類使用extends,子類實現接口使用implements。
類中的常量也就是成員常量,常量就是不會改變的量,是一個恆值。定義常量使用關鍵字const,例如:const PI = 3.1415326;
不管是類內仍是類外,常量的訪問和變量是不同的,常量不須要實例化對象,
訪問常量的格式都是類名加做用域操做符號(雙冒號)來調用,即:類名:: 類常量名。
使用這個魔術函數的基本條件是類文件的文件名要和類的名字保持一致。
當程序執行到實例化某個類的時候,若是在實例化前沒有引入這個類文件,那麼就自動執行__autoload()函數。
這個函數會根據實例化的類的名稱來查找這個類文件的路徑,當判斷這個類文件路徑下確實存在這個類文件後就執行include或者require來載入該類,而後程序繼續執行,若是這個路徑下不存在該文件時就提示錯誤。
A. MVC
B. 代理模式
C. 狀態模式
D. 抽象工廠模式
E. 單件模式
答案:E
A. 1個
B. 2個
C. 取決於系統資源
D. 3個
E. 想要幾個有幾個
答案:A
A. a
B. 一個錯誤警告
C. 一個致命性的報錯
答案:C 由於類a是抽象類,不能被實例化
A. echo class a something echo class b something
B. echo class b something echo class a something
C. echo class a something
D. echo class b something
答案:D
類b繼承自類a,兩個類都定義了構造函數,因爲兩者名字相同,因此子類中的構造函數覆蓋了父類的構造函數,要想子類對象實例化時也執行父類的構造函數,須要在子類構造函數中使用parent::__construct()來顯示調用父類構造函數。
是的
單例模式,工廠模式
單例模式 實現代碼 見 第二題
速度快,編譯型,緩存技術,插件機制,強大的表現邏輯
safe_mode,php安全模式,它提供一個基本安全的共享環境,在一個有多個用戶帳戶存在的php開發的web服務器上。當安全模式打開的時候,一些函數將被徹底的禁止,而另外一些函數的功能將會受到限制,如:chdir, move_uploaded_file,chgrp,parse_ini_file, chown, rmdir, copy, rename, fopen, require,mkdir, unlink等。
注意,在php5.3以上版本,safe_mode被棄用,在php5.4以上版本,則將此特性徹底去除了。
PHP 能夠自動進行內存管理,清除再也不須要的對象。PHP使用了引用計數(reference counting)這種單純的垃圾回收(garbage collection)機制。每一個對象都內含一個引用計數器,每一個reference鏈接到對象,計數器加1。當reference離開生存空間或被設爲 NULL,計數器減1。當某個對象的引用計數器爲零時,PHP知道你將再也不須要使用這個對象,釋放其所佔的內存空間。
核心思路:加鎖
參考方案1:
參考方案2:
相關題目:使用五種以上方式獲取一個文件的擴展名,要求:dir/upload.image.jpg,找出 .jpg 或者 jpg ,必須使用PHP自帶的處理函數進行處理,方法不能明顯重複,能夠封裝成函數,好比 get_ext1($file_name), get_ext2($file_name)
建立類別表以下:
CREATE TABLE category(
cat_id smallint unsigned not null auto_increment primary key comment '類別ID',
cat_name VARCHAR(30) NOT NULL DEFAULT '' COMMENT '類別名稱',
parent_id SMALLINT UNSIGNED NOT NULL DEFAULT 0 COMMENT '類別父ID'
)engine=MyISAM charset=utf8;
編寫一個函數,遞歸遍歷,實現無限分類
mysql_fetch_row() 把數據庫的一列儲存在一個以零爲基數的數組中,第一欄在數組的索引 0,第二欄在索引 1,依此類推。
mysql_fetch_assoc() 把數據庫的一列儲存在一個關聯數組中,數組的索引就是字段名稱,例如個人數據庫查詢送回「first_name」、「last_name」、 「email」三個字段,數組的索引即是「first_name」、「last_name」和「email」。mysql_fetch_array() 能夠同時送回 mysql_fetch_row() 和 mysql_fetch_assoc() 的值。
方法1(對於PHP5及更高版本):
$readcontents = fopen("http://www.phpres.com/index.html", "rb");
$contents = stream_get_contents($readcontents);
fclose($readcontents);
echo $contents;
方法2:
echo file_get_contents("http://www.phpres.com/index.html");
由模型(model),視圖(view),控制器(controller)完成的應用程序,model層負責提供數據,和數據庫有關的操做都交給模型層來處理,view層則提供交互的界面,並輸出數據,而controller層則負責接收請求,並分發給相應的model來處理,而後調用view層來顯示。
GD庫提供了一系列用來處理圖片的API,使用GD庫能夠處理圖片,或者生成圖片。 在網站上GD庫一般用來生成縮略圖或者用來對圖片加水印或者對網站數據生成報表。自從 PHP 4.3.0 版本後 GD 便內建在 PHP 系統中。
A. fget();
B. file_open();
C. fopen();
D. open_file();
答案:C
fget() 這不是一個 PHP 函數,會引致執行錯誤。
file_open() 這不是一個 PHP 函數,會引致執行錯誤。
fopen()這是正確答案,fopen() 能夠用來開啓檔案以便讀寫。
open_file() 這不是一個 PHP 函數,會引致執行錯誤。
smarty是一個模板引擎,使用smarty主要是爲了實現邏輯和外在內容的分離,若是不使用模板的話,一般的作法就是php代碼和html代碼混編。使用了模板以後,則能夠將業務邏輯都放到php文件中,而負責顯示內容的模板則放到html文件中。Smarty在執行display方法的時候,讀取模板文件,並進行數據替換,生成編譯文件,以後每次訪問都會直接訪問編譯文件,讀取編譯文件省去了讀取模板文件,和字符串替換的時間,因此能夠更快,編譯文件裏時間戳記錄模板文件修改時間,若是模板被修改過就能夠檢測到,而後從新編譯(編譯是把靜態內容保存起來,動態內容根據傳入的參數不一樣而不一樣)。 若是啓用了緩存,則會根據編譯文件生成緩存文件,在訪問的時候若是有緩存文件而且緩存文件沒有過時,則直接訪問緩存文件。
相關題目1:可以使HTML和PHP分離開使用的模板
smarty,phplib等
相關題目2:您是否用過模板引擎? 若是有您用的模板引擎的名字是?
Smarty
方法一:php函數跳轉,缺點,header頭以前不能有輸出,跳轉後的程序繼續執行,可用exit中斷執行後面的程序。
header("Location: 網址"); //直接跳轉
header("refresh:3;url=http://axgle.za.net"); //三秒後跳轉
方法二:利用meta
echo "<meta http-equiv=refresh content='0; url=網址'>";
能夠
SVN 或者 CVS
相關題目:您是否用過版本控制軟件? 若是有您用的版本控制軟件的名字是?
TortoiseSVN-1.2.6
過濾javascript腳本參考:
方案一,使用PHP 內建函數 strip_tags() 除去 HTML 標籤
方案二,自定義函數,以下:
preg_match('/^[\w\-\.]+@[\w\-]+(\.\w+)+$/', $email);
相關題目:請用正則表達式寫一個函數,驗證電子郵件的格式是否正確。 (鑫衆人云)
主要區別有如下三種:
1) preg_replace()裏面的正則能夠寫成型如:"/.xxx/"而ereg_replace()裏面的正則需寫成型如"xxx"
2) preg_replace()能操做數組,而ereg_replace()不能夠
3) 在逆向引用用preg_replace()可以使用0-99個,而ereg_replace()最多爲9個
使用 Perl 兼容正則表達式語法的 preg_match() 函數一般是比 ereg() 更快的替代方案。
首先進入php安裝目錄
php -f d:/wamp/www/1.php 其中-f參數指定要執行的php文件
php -r phpinfo(); 其中-r表示直接執行php代碼,無需寫開始結束標記
編寫以下函數:
function getAttrValue($str, $tagName, $attrName){
$pattern1 = "/<" . $tagName . "(\\s+\\w+\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)
(\\2))*\\s+" . $attrName . "\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\5)
(\\s+\\w+\\s*=\\s*([\\'\\\"]?)([^\\'\\\"]*)(\\9))*\\s*>/i";
$arr = array();
$re = preg_match($pattern1, $str, $arr);
if($re){
echo "<br />\$arr[6]={$arr[6]}";
}
else{
echo "<br />沒找到。";
}
}
測試:
$str1 = "<test attr='ddd'>";
getAttrValue($str1,"test","attr"); //找test標籤中attr屬性的值,結果爲ddd
$str2 = "<test2 attr='ddd' attr2='ddd2' t1=\"t1 value\" t2 = 't2 value'>";
getAttrValue($str2,"test2","t1"); //找test2標籤中t1屬性的值,結果爲t1 value
這是把一個日期從 MM/DD/YYYY 的格式轉爲 DD/MM/YYYY 格式。
輸出26/08/2003
答案:B
redir() 這不是一個 PHP 函數,會引致執行錯誤。
header() 這個是正確答案,header()函數發送頭信息,能夠用來使瀏覽器轉向到另外一個頁面,例如:header("Location: http://www.search-this.com/")。
location() 這不是一個 PHP 函數,會引致執行錯誤。
redirect() 這不是一個 PHP 函數,會引致執行錯誤。
A. show_errors, enable
B. show_errors, show
C. register_globals, enhance
D. register_globals, inject
答案:C
allow_call_time_pass_reference
是否啓用在函數調用時強制參數被按照引用傳遞
請注意:
4) 須要處理完整的 html 頁面,即不光此 meta 語句
(2) 忽略大小寫
11. ' 和 " 在此處是能夠互換的
12. 'Content-Type' 兩側的引號是能夠忽略的,但 'text/html; charset=gbk' 兩側的不行
13. 注意處理多餘空格
編寫正則表達式以下:
$reg1 = "/(<meta\\s*http-equiv\\s*=\\s*(['\"]?)Content-Type(\\2)\\s*content\\s*=\\s*(['\"])
text\/html;charset=)(UTF-8)(\\4)(\\s*\/?>)/i";
使用 key() 能夠得到數組中當前元素的鍵名,使用current()則能夠返回當前元素的值。使用array_keys()則能夠獲得數組中全部的鍵名。使用foreach結構foreach($arr as $key=>$value) 能夠經過$key 和 $value分別獲取鍵名和值。
$data = array(
0 => array('id' => 8, 'name' => 'name1'),
1 => array('id' => 10, 'name' => 'name2'),
2 => array('id' => 15, 'name' => 'name3')
);
寫出在模板頁的代碼?若用foreach語句又要怎樣顯示呢?
用section語句:
<{section name=test loop=$data start=0 step=1}>
id:<{$data[test].id}><br />
name:<{$data[test].name}><br /><br />
<{sectionelse}>
數組爲空
<{/section}>
用foreach語句:
<{foreach from=$data item=test}>
id:<{$test.id}><br />
name:<{$test.name}><br /><br />
<{foreachelse}>
數組爲空
<{/foreach}>
A. ******xyz
B. *****_xyz1
C. ******xyz2
D. _*xyz
答案:C
A. E_WARNING
B. E_USER_ERROR
C. E_PARSE
D. E_NOTICE
答案:B
A. E_WARNING
B. E_USER_ERROR
C. E_PARSE
D. E_NOTICE
答案:C
匹配以0個或多個空白符開頭或者0個或多個空白符結尾的字符串
能夠,還能夠在須要控制的子目錄下建立.htaccess文件,寫入訪問控制。
從如下幾個方面考慮:
1) 數據庫中庫和表都用utf8編碼
2) php鏈接mysql,指定數據庫編碼爲utf8 mysql_query(「set names utf8」);
3) php文件指定頭部編碼爲utf-8 header(「content-type:text/html;charset=utf-8」);
4) 網站下全部文件的編碼爲utf8
5) html文件指定編碼爲utf-8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
md5($str);
sha1($str);
htmlspecialchars 或者 htmlentities
mb_sring、iconv、curl、GD、XML、socket、MySQL、PDO 等
FleaPHP、Zend Framework、CakePHP、Symfony、ThinkPHP、YII、CodeIgniter等
上傳文件的表單使用post方式,而且要在form中添加enctype='multipart/form-data'。
通常能夠加上隱藏域:<input type=hidden name='MAX_FILE_SIZE' value=dddddd>,位置在file域前面。value的值是上傳文件的客戶端字節限制。能夠避免用戶在花時間等待上傳大文件以後才發現文件過大上傳失敗的麻煩。
使用file文件域來選擇要上傳的文件,當點擊提交按鈕以後,文件會被上傳到服務器中的臨時目錄,在腳本運行結束時會被銷燬,因此應該在腳本結束以前,將其移動到服務器上的某個目錄下,能夠經過函數move_uploaded_file()來移動臨時文件,要獲取臨時文件的信息,使用$_FILES。
限制上傳文件大小的因素有:
1) 客戶端的隱藏域MAX_FILE_SIZE的數值(能夠被繞開)。
2) 服務器端的upload_max_filesize,post_max_size和memory_limit。這幾項不可以用腳原本設置。
3) 自定義文件大小限制邏輯。即便服務器的限制是能本身決定,也會有須要個別考慮的狀況。因此這個限制方式常常是必要的。
UBB代碼是HTML的一個變種,經過程序自定義咱們的標籤,好比「[a]PHP中UBB的使用[/a]」這樣的標籤,其實質就是查找[a][/a]標籤,將其替換成<a></a>的標準html,說白了,就是將標準的html標記經過技術手段使其簡化,其輸出出來的結果仍是標準的 html。
明白了ubb的原理,那麼再製做一個簡單的 ubb 編輯器就不難了,和 fck 之類的編輯器比較起來,ubb 代碼最大的優勢就是代碼簡單,功能不多,簡單的ubb只須要一個文件,並且 ubb 標籤能夠本身來定義,更改起來很方便,在 php 中就是利用替換函數就能夠將 html 進行標籤化,輸出時進行標籤的轉化。
能夠本身設置上傳文件的保存目錄,與文件名拼湊造成一個文件路徑,使用move_uploaded_file(),就能夠完成將文件保存到指定目錄。能夠經過上傳的文件名獲取到文件後綴,而後使用時間戳+隨機數+文件後綴的方式爲文件從新命名,這樣就避免了重名。
中,用來判斷錯誤是如何發生的。 (奇矩互動)
debug_print_backtrace()
1),array('id' => 2),……) id=>0-10000 ,怎麼判斷當id=>500,讓輸出的值在HTML裏變爲紅色? (億郵)
設數組分配過來的數組名爲 $ids
{section name = temp loop = $ids}
{if $ids[temp].id == 500}
<span style = ‘color: #f00;’>{$ids[temp].id}</span>
{esle}
{$ids[temp].id}
{/if}
{/section}
使用{$smarty.now} 來獲取當前時間,獲得的是unix系統時間戳
使用變量調節器進行格式化,以下:
{$smarty.now | date_format : 「%Y-%m-%d %H:%M:%S」 }
$smarty.get.變量 #顯示經過get方式傳過來的指定變量的值
$smarty.post.變量 #顯示經過post方式傳過來的指定變量的值
$smarty.cookies.變量 #顯示經過cookie中指定變量的值
$smarty.server.SERVER_NAME #顯示server變量值,$_SERVER系列變量
$smarty.env.PATH #顯示系統環境變量值,$_ENV系列變量
$smarty.session.變量 #顯示session中指定變量的值
$smarty.request.變量 #顯示經過post、get、cookie中指定變量的值
使用模板分隔符包含,傳遞參數則使用HTML屬性的方式,例如:
{html_image file="pumpkin.jpg"}
mysql,gd,pdo,XML,zip,filesystem,mail等
utf8_to_gb2312 或者 utf8togb2312
<IfModulemod_rewrite.c>
RewriteEngineon
RewriteCond%{REQUEST_FILENAME}!-f
RewriteCond%{REQUEST_FILENAME}!-d
RewriteBase/
RewriteRule./index.php[L]
</IfModule>
若是REQUEST_FILENAME文件存在,就直接訪問文件,不進行下面的rewrite規則,若是REQUEST_FILENAME目錄存在,就直接訪問目錄,不進行下面的rewrite規則,RewriteRule./index.php[L]的意思是把全部的請求都給index.php處理。
D:\src\init.php:7) in D:\src\init.php on line10一般什麼狀況下php會報該警告信息?(卓望)
通常是在header、set_cookie以及session_start函數前面有輸出(包括空格)的狀況下,會報該警告信息
能夠,COOKIE和SESSION都是用來實現會話機制的,因爲http協議是無狀態的,因此要想跟蹤一個用戶在同一個網站之間不一樣頁面的 狀態,須要有這麼一個機制----會話機制。
COOKIE:將會話信息的保存到瀏覽器端。
SESSION:將會話信息保存到服務器端。
SESSION默認狀況下是基於COOKIE的,對於SESSION來講,每生成一個SESSIONID,都會將其發送到瀏覽器端,讓後將其保存到cookie當中。
若是禁用了COOKIE,則基於COOKIE的SESSION很差使了,咱們可使用get,傳遞SID,或者直接開啓透明的SID(此時須要關閉基於cookie的SESSION配置項)。
相關題目:SESSION與COOKIE的區別?
COOKIE保存在客戶端,而SESSION則保存服務器端。
從安全性的角度來說,SESSION的安全性要高。
從保存內容的類型的角度來說,COOKIE只保存字符串(及可以自動轉換成字符串),而session則能夠保存全部的數據類型。
從保存內容的大小的角度來說,COOKIE保存的內容是有限制的,比較小,而SESSION基本上沒有這個限制。
從性能的角度來說,用SESSION的話,對服務器的壓力會更大一些。
用戶名(username):溫柔一刀
密碼(pwd):&123=321&321=123&
我的簡介(intro):Hello world!
且該http server須要如下cookie來進行簡單的用戶動做跟蹤:
cur_query:you&me
last_tm:...(上次請求的unix時間戳,定爲當前請求時間前10分鐘)
cur_tm:...(當前請求的unix時間戳)
設置超時爲10秒,發出請求後,將http server的響應內容輸出 (騰訊)
參考代碼:
if($fp = fsockopen('localhost', '80')) {
//鏈接成功
$request_data = "POST /2.php HTTP/1.1" . "\r\n"; //請求行
$request_data .= "Host: localhost" . "\r\n"; //host頭信息
$request_data .= "User-Agent:Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)" . "\r\n";//host頭信息
$request_content = "username=".urlencode('溫柔一刀')."&pwd=".urlencode('&123=321&321=123&')."&intro=".urlencode("Hello world!");
$request_data .= "Content-Type: application/x-www-form-urlencoded" . "\r\n";
$request_data .= "Content-Length: " . strlen($request_content) . "\r\n";
$cur_query = urlencode("you&me");
$last_tm = time()-10*60;
$cur_tm = time();
$request_data .= "Cookie:cur_query=$cur_query;last_tm=$last_tm;cur_tm=$cur_tm" . "\r\n";
$request_data .= "\r\n"; //請求頭信息結束時的空行
//請求主體數據部分
$request_data .= $request_content;
//利用創建好的通道,將數據發送過去
fwrite($fp, $request_data); //寫入數據(發送數據)
//讀取數據
while(!feof($fp)) { //判斷是否沒有到文件末尾
$resp_data = fgets($fp);
echo $resp_data . '<br>';
}
}
未經受權:訪問因爲憑據無效被拒絕
header("HTTP/1.0 404 Not Found")
要注意這裏的生存時間指的是什麼? 因爲session默認是基於cookie的,也就是說使用session會話技術,首先是將session數據保存到服務器端,其次會將sessionID 保存到瀏覽器端,保存在服務器端的session文件生命週期由php.ini中的session.gc_maxlifetime、gc_probability和gc_divisor來決定,而保存在客戶端的sessionID由客戶端cookie來決定,默認其生存週期直到瀏覽器關閉,它也能夠經過php.ini中的設置session.cookie_lifetime 來控制,兩者共同來決定session 的生存時間,兩者中的其中任意一個失效了,就會形成session失效,要根據本身的需求來決定是要從哪方面來修改其生存時間。
參考1:將php.ini中的session.gc_maxlifetime設置爲9999重啓apache
參考2:
$savePath = "./session_save_dir/";
$lifeTime = 小時 * 秒;
session_save_path($savePath);
session_set_cookie_params($lifeTime);
session_start();
參考3:
session_start();
$lifeTime = 24 * 3600; // 保存一天
setcookie(session_name(), session_id(), time() + $lifeTime, "/");
最主要的兩個選擇是SESSION和COOKIE。使用SESSION的方法是在每一頁的開始加session_start(),而後利用$_SESSION來存取 SESSION變量。至於 COOKIE你只需記着一個原則:在輸出任何文字以前調用 set_cookie() 函數設置COOKIE,使用 $_COOKIE 獲取COOKIE變量。
6. PHP程序中如何設置當前頁面的編碼爲utf-8?
header(「content-type:text/html;charset=utf-8」);
setcookie(‘username’,’jack’,time()+7*24*3600);
cookie的總數量沒有限制,可是每一個域名的COOKIE數量和每一個COOKIE的大小是有限制的!
IE每一個域名限制爲50個。
Firefox每一個域名cookie限制爲50個。
Opera每一個域名cookie限制爲30個。
Safari/webkit貌似沒有cookie限制。可是假如cookie不少,則會使header大小超過服務器的處理的限制,會致使錯誤發生。
不一樣瀏覽器間每一個cookie文件大小也不一樣
Firefox和safari是4097個字節,包括名(name)、值(value)和等號。
Opera是4096個字節,包括:名(name)、值(value)和等號。
IE是4095個字節,包括:名(name)、值(value)和等號。
session_start()前面不能有任何輸出,包括空行。
相關題目:使用setcookie函數前,須要注意什麼?
前面不能有任何輸出,包括空行。
物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層、應用層
11. 說說下面這些這些協議的全稱和中文解釋(提示:都是工做在應用層)SMTP、POP3、HTTP、FTP、DNS (小米)
SMTP (Simple Mail Transfer Protocol) 簡單郵件傳輸協議
POP3 (Post Office Protocol 3) 郵局協議第3版
HTTP (Hypertext Transfer Protocol) 超文本傳輸協議
FTP (File Transfer Protocol)文件傳輸協議
DNS (Domain Name System and Domain Name Service protocol) 域名系統(服務)協議
COOKIE和SESSION都是用於會話機制,COOKIE保存在客戶端,而SESSION則保存在服務器端。在默認狀況下,SESSION機制是基於COOKIE的,每生成一個SESSIONID,都會將其發送到瀏覽器端,讓後將其保存到COOKIE當中,在下次請求的時候,由瀏覽器攜帶這個COOKIE。
要想多臺web服務器共享SESSION,能夠利用MySQL數據庫存儲SESSION數據。
200 OK 服務器成功處理了請求
301 Moved Permanently(重定向)請求的URL已移走
304 Not Modified(未修改)客戶的緩存資源是最新的, 要客戶端使用緩存
403 Forbidden(禁止)請求被服務器拒絕了
404 Not Found 未找到資源
Internal Server Error(內部服務器錯誤) 服務器遇到一個錯誤,使其沒法爲請求提供服務
session機制是一種服務器端的機制,它將數據保存到服務器端。
當程序須要爲某個客戶端的請求建立一個session的時候,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識, 稱爲 sessionid,若是已包含一個sessionid則說明之前已經爲此客戶端建立過session,服務器就按照sessionid把這個 session檢索出來使用(若是檢索不到,可能會新建一個),若是客戶端請求不包含sessionid,則爲此客戶端建立一個session而且生成一個與此session相關聯的sessionid,sessionid的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個 sessionid將被在本次響應中返回給客戶端以cookie的形式保存。
session在大訪問量網站上確實影響系統性能,影響性能的緣由之一由文件系統設計形成,在同一個目錄下超過10000個文件時,文件的定位將很是耗時,另外就是小文件的效率問題,通常咱們的session數據都不會太大(1~2K),若是有大量這樣1~2K的文件在磁盤上,IO效率確定會不好,咱們能夠採用改寫session存儲機制,好比存放到數據庫中。
6個,255.255.255.248換算成二進制就是11111111.11111111.11111111.11111000
後面的三位用來表示主機,前面的29位用來表示網絡。
三位表示主機,就是能夠用來表示2^3=8個,再減去網絡地址和廣播地址,就是6個了。
TCP是主機對主機層的傳輸控制協議,提供可靠的鏈接服務,採用三次握手確認創建一個鏈接:
第一次握手:創建鏈接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SEND狀態,等待服務器確認;
第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時本身也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED狀態,完成三次握手。
完成三次握手,客戶端與服務器開始傳送數據。
header函數
POST www.10086.cn HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Referer: http://localhost/a.html
Accept-Language: zh-CN
User-Agent: Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0; KB974487)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: localhost
Content-Length: 25
Connection: Keep-Alive
username=abc&password=123