1.isset()和empty()的區別
兩者都是測試變量用的。但是isset()是測試變量是否被賦值,而empty()是測試一個已經被賦值的變量是否為空。如果一個變量沒被賦值就引用在php里是被允許的,但會有notice提示。如果一個變量被賦空值,$foo=”"或者$foo=0或者$foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是說賦空值不會注銷一個變量。要注銷一個變量,可以用 unset($foo)或者$foo=NULL。
2.如何顯示錯誤信息
當php.ini的display_errors = On并且error_reporting = E_ALL時,將顯示所有的錯誤和提示,調試的時候最好打開以便糾錯,如果你用以前php寫法錯誤信息多半是關于未定義變量的。變量在賦值以前調用會有提示,解決辦法是探測或者屏蔽
3.單引號 雙引號什么區別?分別什么時侯用
單引號中,任何變量($var)、特殊轉義字符(如”t r n”等)不會被解析,因此PHP的解析速度更快,轉義字符僅僅支持”’”和””這樣對單引號和反斜杠本身的轉義;雙引號中,變量($var)值會代入字符串中,特殊轉義字符也會被解析成特定的單個字符,還有一些專門針對上述兩項特性的特殊功能性轉義,例如”$”和”。這樣雖然程序編寫更加方便,但同時PHP的解析也很慢;數組中,如果下標不是整型,而是字符串類型,請務必用單引號將下標括起,正確的寫法為$array['key'],而不是$array[key],因為不正確的寫法會使PHP解析器認為key是一個常量,進而先判斷常量是否存在,不存在時才以”key”作為下標帶入表達式中,同時出發錯誤事件,產生一條Notice級錯誤。因此,在絕大多數可以使用單引號的場合,不要使用雙引號。
4.print,echo,print_r什么區別?分別什么時侯用?
echo和print都可以做輸出,不同的是,echo不是函數,沒有返回值,而print是一個函數有返回值,所以相對而言如果只是輸出 echo 會更快,而print_r通常用于打印變量的相關信息,通常在調試中使用
5.在PHP中有些時候需要打開遠程文件
打開遠程文件函數為:fopen(http://XXX.com/a.php),fsockopen(http://XXX.com/a.php) , file_get_contents(http://XXX.com/a.php)等)
在php5,apache2.2.X環境下,會提示你無法打開文件流,http請求失敗(failed to open stream: HTTP request failed!)
在php.ini中,有這樣兩個選項:
allow_url_fopen =on(表示可以通過url打開遠程文件),user_agent=”PHP”(表示通過哪種腳本訪問網絡,默認前面有個 ” ; ” 去掉即可。),重啟Apache服務即可。
6.如何預先獲取auto_increment的值?
7.利用獲得客戶端信息
getenv(”REMOTE_ADDR”)可以得到瀏覽者的IP
getenv(”HTTP_USER_AGENT”)可以得到瀏覽者的操作系統類型,瀏覽器類型
getenv能得到所有$_ENV這個全局變量的所有東西
print_r($_ENV)可以看到很多東西,比如
echo getenv(ALLUSERSPROFILE); 可以看到ALLUSERSPROFILE的值
echo getenv(PATHEXT);可以看到PATHEXT的值
8.mysql_fetch_row()和mysql_fetch_array()的區別
mysql_fetch_array() 是 mysql_fetch_row() 的擴展版本。除了將數據以數字索引方式儲存在數組中之外,還可以將數據作為關聯索引儲存,用字段名作為鍵名。用 mysql_fetch_array()并不明顯比用 mysql_fetch_row()慢,而且還提供了明顯更多的值。
mysql_fetch_array() 中可選的第二個參數 result_type 是一個常量,可以接受以下值:MYSQL_ASSOC,MYSQL_NUM 和MYSQL_BOTH。本特性是PHP 3.0.7 起新加的。本參數的默認值是 MYSQL_BOTH。
9.EOD的用法和功效
就是比單引號和雙引號好些,能包含換行。EOD可以改成其他字符。
10.用gdate()獲得一長串數字怎么轉換成正常的時間?
gmdate 返回 GMT 時間,除此以外和 date() 函數完全一樣。如果你需要本地時間,就用 date() 來格式化時間戳。
11.正則里面的()//區別何在?
//是模式定界符,代表里面是一個正則規則。
()代表的是子模式,一個//中可以有很多的()組成,可以用1 2 或 $1 $2來匹配前面子模式的值。
12.require和require_once有啥區別?
require重復調用會多次加載你飲用的文件;require_once只加載一次,而不管你實際上調用了多少次,主要用于復雜的文件包含關系,例如b包含a,c包含a,但同時c又包含了b,那么如果用require的話可能會導致兩次加載a
13.三個IP地址的獲取有什么區別?
$_SERVER['REMOTE_ADDR'];
$_SERVER['HTTP_CLIENT_IP'];
$_SERVER['HTTP_X_FORWARDED_FOR'];
$_SERVER['REMOTE_ADDR']; //訪問端(有可能是用戶,有可能是代理的)IP
$_SERVER['HTTP_CLIENT_IP']; //代理端的(有可能存在,可偽造)
$_SERVER['HTTP_X_FORWARDED_FOR']; //用戶是在哪個IP使用的代理(有可能存在,也可以偽造)
14.$_GET和$_POST的區別?
一:get 方法是限制傳值的大小,不能超過2K. 而post不限制傳值的大小.
二:Get是用來從服務器上獲得數據,而Post是用來向服務器上傳遞數據。
三:Get將表單中數據的按照variable=value的形式,添加到action所指向的URL后面,并且兩者使用”?”連接,而各個變量之間使用”&”連接;Post是將表單中的數據放在form的數據體中,按照變量和值相對應的方式,傳遞到action所指向URL。
四:Get是不安全的,因為在傳輸過程,數據被放在請求的URL中,而如今現有的很多服務器、代理服務器或者用戶代理都會將請求URL記錄到日志文件中,然后放在某個地方,這樣就可能會有一些隱私的信息被第三方看到。另外,用戶也可以在瀏覽器上直接看到提交的數據,一些系統內部消息將會一同顯示在用戶面前。Post的所有操作對用戶來說都是不可見的。
15.在類里面的函數前面可以加public,private,但在函數庫中的函數前面不能加呢?
function自定的隨便你,public是公開使用的類屬性對象,privat是獨立使用的類屬性對象;
類中 public 或 private 是指這個方法(要注意叫”方法”)是對外公開還是是屬于類私有而你指的函數庫,它是”函數”的庫,不屬于類中的方法,所以不必也不能有前置修飾。
16.頁面執行時間怎么算的?
17. UTF8編碼腳本session_start(),header(),settcookie()等函數出錯,提示”headers already sent “。
UTF8編碼腳本通常的編輯器都會在文件頭部加上三字節的BOM編碼來識別UTF8編碼格式,這三個字節是普通文件編輯器看不到,而輸出時去先行以HTML輸出了。執行以上函數時就會提示以上錯誤。解決辦法:用editplus等可以清除BOM的編輯器,清除BOM(設置為utf8清除BOM)保存一下即可。
18. PHP中單引號,雙引號,反引號的區別
PHP單引號(’),雙引號(”")反引號(`)都能引用字串。單引號中變量不被轉義,雙引號轉義變量,而反引號中變量轉義作為shell命令被執行。
上一篇 php中正則匹配中文漢字
下一篇 QQ群一鍵加入?