在什麼情況下,$name和%_POST['name']可以通用:
設定PHP全域變數,在php.ini檔案中register_globals = On。
在實際開發中,不推薦使用,會給程式帶來安全隱患。
表單預設採用get方式傳遞資料
PHP的含義是什麼:
PHP是Hypertext Preprocessor(超文本前置處理器)的縮寫,是一種伺服器端的、跨平台的、HTML嵌入式的指令碼語言。其獨特的文法混合了C、Java和Perl語言的特點,是一種被廣泛應用的開原市的多用途指令碼語言,尤其適合Web開發。
PHP的優缺點:
優良的PHP代碼應該是結構化的。大段的代碼應該被分割整理成一個個函數或方法,而那些不起眼的小段代碼則應該加上注釋,以便日後清楚它們的用途,而且應該儘可能低把前台代碼如HTML、Css、Js等從程式中分離出來。PHP的物件導向編程特性可以很好地協助程式員將代碼整理有序。
優良的PHP代碼應該是正常化的。無論是為變數名和函數名設定命名規則,還是隊一些會重複使用的過程如資料庫操作和錯誤處理進行標準化,抑或是簡單到規定好代碼是怎樣縮排的,這些正常化都可以讓代碼的可讀性大大提高。
優良的PHP代碼應該是自適應的。PHP有血多特性,如magic quotes和short tags,這些特性的開啟和關閉會影響到程式的運行。所以,一個好的程式員應該在他的代碼中加上適當的語句來使程式能夠根據環境進行調整。
優良的PHP代碼應該是安全的。雖然PHP是一種高效、靈活的語言,沒有固定的架構,但它卻把安全問題留給了程式員。對潛在安全性漏洞的深刻理解,如跨站指令碼攻擊(XSS)、跨站請求偽造(CSRF)、代碼注入漏洞、字元編碼迴圈漏洞等,對於今天的專業程式員來說是至關重要的。
簡化下面代碼:
<? echo ("abvcc".$_GET['query']); ?>
這段代碼的主要問題在於它把使用者提交的資料直接顯示到了網頁上,從而產生XSS漏洞。有很多方法可以填補這個漏洞:
<? echo ("abvcc".htmlspecialchars($_GET['query']));?>
這是最低要求,XSS漏洞用htmlspecialchars()函數填補了,從而屏蔽了非法字元。
<?php if(isset($_GET['query'])){ echo 'abvcc',htmlspecailchars($_GET['query'],ENT_QUOTES); }?>
這段代碼進行了如下改進:
1. <?被替換成了<?php這樣更符合XML規範。
2. 在輸出$_GET['query']的值之前先判斷它是否為空白。
3. echo命令中多餘的括弧被去掉了。
4. 字串用單引號限定,從而節省了PHP從字串中搜尋可替換的變數的時間。
5. 用逗號代替句號節省了echo時間。
6. 將ENT_QUOTES表示傳遞給htmlspecialchars()函數,從而保證單引號也會被轉移。
談談ASP、PHP和JSP的優缺點:
ASP是一個WEB伺服器端的開發環境,通過它可以產生和運行動態、互動的、高效能的Web服務應用程式。ASP採用指令碼語言VB作為自己的開發語言。
JSP是Sun公司推出的新一地啊網站開發語言,他完全解決了目前ASP和PHP的一個通病--指令碼及執行。
三者都提供在HTML代碼中混合某種程式碼、由語言引擎解釋執行程式代碼的能力。但JSP代碼被編譯成Servlet並有Java虛擬機器解釋執行,這種編譯操作僅在對JSP頁面的第一次請求時發生。在ASP、PHP、JSP環境下,HTML代碼主要負責描述資訊的顯示樣式,而程式碼則用來描述處理邏輯。普通的HTML頁面只依賴於Web伺服器,而ASP、PHP、JSP頁面需要附加的語言引擎分析和執行程式代碼。程式碼的執行結果被重新嵌入到HTML代碼中,然後一起發送到瀏覽器。ASP、PHP、JSP三者都是面向Web伺服器的技術,用戶端瀏覽器不需要任何附加的軟體支援。
列舉PHP中資料類型轉換和判斷方式:
可以通過settype()函數來完成類型轉換或強制類型轉換:
bool settype(mixed var,string type);
type有7個可選值:boolean、float、integer、array、null、object和string。如果轉換成功則返回true。
PHP內建檢測類型的系列函數。可以對不同類型的資料進行檢測,判斷是否屬於某個類型:
is_boole、is_string、is_float/is_double、is_integer/is_int、is_null、is_array、is_object、is_numeric
列舉一個"=="是真,但"==="是假的例子:
通過strpos()函數尋找指定字串在另一個字串中首次出現的位置,傳回值為字串所在的位置,如果失敗則返回false。
<?php if(strpos("abc","a") == true) //這部分代碼不會被執行,因為a的位置是0,換算成boolean值是假 if(strpos("abc","a") === true) //這部分會被執行,因為===保證函數strpos的傳回值不會被換算成boolean值。?>
PHP編寫的代碼是否區分大小寫:
PHP在定義變數時、擷取變數的值時確定是不區分大小寫,但是與Web頁面進行互動即通過GET、POST擷取值時是區分大小寫。
echo("abc")這個語句會輸出什麼內容:
count()函數統計數組中單元的數目,任何其他類型只有一個單元,因此輸出1.
在PHP中如何擷取用戶端和伺服器端的IP地址:
擷取用戶端和伺服器的IP地址可以通過getenv()函數來實現
如果是擷取指定網域名稱的IP地址,則使用gethostbyname()函數
getenv('REMOTE_ADDR');getenv('SERVER_ADDR');gethostbyname("www.baidu.com");
如何?PHP與JSP的互動:
通過PHP內建的機制完成PHP與JSP的互動,例如:$php_java = new Java('java.lang.System');
開啟php.ini檔案中safe_mode選項會影響到哪些函數:
開啟safe_mode函數後PHP將檢查當前指令碼的擁有者是否和被操作檔案的擁有者相同。
pathinfo、basename、fopen和exec等函數。
mysql_fetch_row()和mysql_fetch_array()的區別:
兩個函數的功能都是擷取結果集中的記錄,其傳回值都是數組。mysql_fetch_row()函數返回的結果集是數字索引數組,mysql_fetch_array()返回的是關聯陣列。