- HTTP協議中幾個狀態碼的含義:1xx(臨時響應)
- 表示臨時響應並須要請求者繼續執行操做的狀態代碼。
- 代碼 說明
- 100 (繼續) 請求者應當繼續提出請求。 服務器返回此代碼表示已收到請求的第一部分,正在等待其他部分。
- 101 (切換協議) 請求者已要求服務器切換協議,服務器已確認並準備切換。
- 2xx (成功)
- 表示成功處理了請求的狀態代碼。
- 代碼 說明
- 200 (成功) 服務器已成功處理了請求。 一般,這表示服務器提供了請求的網頁。
- 201 (已建立) 請求成功而且服務器建立了新的資源。
- 202 (已接受) 服務器已接受請求,但還沒有處理。
- 203 (非受權信息) 服務器已成功處理了請求,但返回的信息可能來自另外一來源。
- 204 (無內容) 服務器成功處理了請求,但沒有返回任何內容。
- 205 (重置內容) 服務器成功處理了請求,但沒有返回任何內容。
- 206 (部份內容) 服務器成功處理了部分 GET 請求。
- 3xx (重定向)
- 表示要完成請求,須要進一步操做。 一般,這些狀態代碼用來重定向。
- 代碼 說明
- 300 (多種選擇) 針對請求,服務器可執行多種操做。 服務器可根據請求者 (user agent) 選擇一項操做,或提供操做列表供請求者選擇。
- 301 (永久移動) 請求的網頁已永久移動到新位置。 服務器返回此響應(對 GET 或 HEAD 請求的響應)時,會自動將請求者轉到新位置。
- 302 (臨時移動) 服務器目前從不一樣位置的網頁響應請求,但請求者應繼續使用原有位置來進行之後的請求。
- 303 (查看其餘位置) 請求者應當對不一樣的位置使用單獨的 GET 請求來檢索響應時,服務器返回此代碼。
- 304 (未修改) 自從上次請求後,請求的網頁未修改過。 服務器返回此響應時,不會返回網頁內容。
- 305 (使用代理) 請求者只能使用代理訪問請求的網頁。 若是服務器返回此響應,還表示請求者應使用代理。
- 307 (臨時重定向) 服務器目前從不一樣位置的網頁響應請求,但請求者應繼續使用原有位置來進行之後的請求。
- 4xx(請求錯誤)
- 這些狀態代碼表示請求可能出錯,妨礙了服務器的處理。
- 代碼 說明
- 400 (錯誤請求) 服務器不理解請求的語法。
- 401 (未受權) 請求要求身份驗證。 對於須要登陸的網頁,服務器可能返回此響應。
- 403 (禁止) 服務器拒絕請求。
- 404 (未找到) 服務器找不到請求的網頁。
- 405 (方法禁用) 禁用請求中指定的方法。
- 406 (不接受) 沒法使用請求的內容特性響應請求的網頁。
- 407 (須要代理受權) 此狀態代碼與 401(未受權)相似,但指定請求者應當受權使用代理。
- 408 (請求超時) 服務器等候請求時發生超時。
- 409 (衝突) 服務器在完成請求時發生衝突。 服務器必須在響應中包含有關衝突的信息。
- 410 (已刪除) 若是請求的資源已永久刪除,服務器就會返回此響應。
- 411 (須要有效長度) 服務器不接受不含有效內容長度標頭字段的請求。
- 412 (未知足前提條件) 服務器未知足請求者在請求中設置的其中一個前提條件。
- 413 (請求實體過大) 服務器沒法處理請求,由於請求實體過大,超出服務器的處理能力。
- 414 (請求的 URI 過長) 請求的 URI(一般爲網址)過長,服務器沒法處理。
- 415 (不支持的媒體類型) 請求的格式不受請求頁面的支持。
- 416 (請求範圍不符合要求) 若是頁面沒法提供請求的範圍,則服務器會返回此狀態代碼。
- 417 (未知足指望值) 服務器未知足"指望"請求標頭字段的要求。
- 5xx(服務器錯誤)
- 這些狀態代碼表示服務器在嘗試處理請求時發生內部錯誤。 這些錯誤多是服務器自己的錯誤,而不是請求出錯。
- 代碼 說明
- 500 (服務器內部錯誤) 服務器遇到錯誤,沒法完成請求。
- 501 (還沒有實施) 服務器不具有完成請求的功能。 例如,服務器沒法識別請求方法時可能會返回此代碼。
- 502 (錯誤網關) 服務器做爲網關或代理,從上游服務器收到無效響應。
- 503 (服務不可用) 服務器目前沒法使用(因爲超載或停機維護)。 一般,這只是暫時狀態。
- 504 (網關超時) 服務器做爲網關或代理,可是沒有及時從上游服務器收到請求。
- 505 (HTTP 版本不受支持) 服務器不支持請求中所用的 HTTP 協議版本。
- Include require include_once require_once 的區別.
- PHP/Mysql中幾個版本的進化史,好比mysql4.0到4.1,PHP 4.x到5.1的重大改進等等。
- MySQL:
- 1、從 4.0 到 4.1 的主要變化
- 若是在4.1.0到4.1.3版本的MySQL中建立了包含 TIMESTAMP 字段的 InnoDB表。則在升級到4.1.4及更高時須要重建表,由於存儲格式發生變化了。
- 字符串根據標準SQL來比較:比較以前不刪除末尾的空格,之前用末尾空格擴展了比較短的字符串。如今的結果是
- 'a' > 'a\t',之前則不這樣。能夠用 mysqlcheck 來檢查一下數據表。
- TIMESTAMP 返回 'YYYY-MM-DD HH:MM:SS' 格式的字符串。在MySQL 4.0中,能夠增長選項 --new 來得到ySQL 4.1中這方面的特性。
- 在MySQL4.1.1前,語句解析器不是那麼嚴格,它在處理字符串轉時間轉換時會忽略第一個數字前的其餘字符。在4.1.1以後,就比較嚴格了,返回結果是 DATE, DATETIME, 或 TIME 類型的函數的結果會被轉換成時間型
- 2、再看從 4.1 到 5.0 的主要變化
- ◆InnoDB 和 MyISAM 表中空格結尾的 TEXT 字段索引順序改變了。所以須要運行"CHECK TABLE" 語句修復數據表,若是出現錯誤,就運行 "OPTIMIZE TABLE" 或 "REPAIR TABLE" 語句修復,甚至從新轉儲(用mysqldump)。
- ◆MySQL 5.0.15開始,如何處理 BINARY 字段中填充的值已經改變了。填充的值如今是0x00 而非空格了,而且在取值的時候不會去除末尾的空格。
- ◆從MySQL 5.0.3開始,DECIMAL 的實現方式已經改變了,5.0對 DECIMAL的格式限制嚴格多了。在MySQL 5.0.3到5.0.5之間版本的 MyISAM 和 InnoDB 表中建立的 DECIMAL字段升級到5.0.6以後會發生崩潰。從5.0.3開始,DECIMAL 用更有效的格式來存儲。5.0.3開始,在計算 DECIMAL 值和舍入精確值的時候採用精確數學。
- ◆在之前,等待超時的鎖會致使 InnoDB回滾當前所有事務,從5.0.13開始,就只回滾最近的SQL語句了。
- ◆在4.1.13/5.0.8之前,DATETIME 的加0後就轉換成 YYYYMMDDHHMMSS 格式,如今變爲YYYYMMDDHHMMSS.000000 格式了
- ◆4.1中,FLOAT 或 DOUBLE 之間的比較碰巧沒問題,但在5.0中可能就不行了
- ◆從5.0.3開始,VARCHAR 和 VARBINARY 字段中末尾的空格再也不刪除
- ◆增長了一個新的啓動選項 innodb_table_locks,它致使 LOCK TABLE 時也能夠請求InnoDB 表鎖。這個選項默認打開,不過可能在 AUTOCOMMIT=1 和 LOCK TABLES應用中會致使死鎖。看來,我只需主要關注 時間(TIMESTAMP, DATETIME< DATE, TIME) 和數值型(FLOAD, DOUBLE, DECIMAL) 這兩種類型的變化;另外,我升級過程當中暫時還不須要涉及到字符集問題,所以相對輕鬆一些。
- 升級步驟以下:
- 執行
- FLUSH TABLES WITH READ LOCK;
- 直接拷貝 MyISAM 表文件
- 用 mysqldump 導出 Innodb 類型的表
- 整個過程都很順利,新系統啓動以後,發現以下2個問題:
- 新增了關鍵字 INOUT,所以須要檢查表結構中還有其餘什麼字段使用關鍵字了
- DATE_FORMAT 函數要求嚴謹多了,
- DATE_FORMAT('2006/11/24 09:14:00', '%Y-%m-%d %T')
- 和DATE_FORMAT('2006/11/2409:14:00', '%Y-%m-%d %T')
- 的結果徹底不同,在 4.0 中,能兼容這兩種格式,而在 5.0 中,只能正確的使用前者了,後者則會有問題。這也應該是上面提到的時間類型發生的變化所致。
- PHP5如下幾個改進值得關注:
- 一、極大地提升了面向對象能力;
- 二、支持try/catch異常處理;
- 三、改進了字符串地處理;
- 四、改經了xml和web服務支持;
- 五、對SQlite內置支持。
- HEREDOC介紹
- Heredoc技術,在正規的PHP文檔中和技術書籍中通常沒有詳細講述,只是提到了這是一種Perl風格的字符串輸出技術。可是如今的一些論壇程序,和部分文章系統,都巧妙的使用heredoc技術,來部分的實現了界面與代碼的準分離,phpwind模板就是一個典型的例子。
- 1.以<<<End開始標記開始,以End結束標記結束,結束標記必須頂頭寫,不能有縮進和空格,且在結束標記末尾要有分號 。開始標記和開始標記相同,好比經常使用大寫的EOT、EOD、EOF來表示,可是不僅限於那幾個,只要保證開始標記和結束標記不在正文中出現便可。
- 2.位於開始標記和結束標記之間的變量能夠被正常解析,可是函數則不能夠。在heredoc中,變量不須要用鏈接符.或,來拼接,以下:
- $v=2;
- $a= <<<EOF
- "abc"$v
- "123"
- EOF;
- echo $a; //結果連同雙引號一塊兒輸出:"abc"2 "123"
- 3.heredoc經常使用在輸出包含大量HTML語法d文檔的時候。好比:函數outputhtml()要輸出HTML的主頁。能夠有兩種寫法。很明顯第二種寫法比較簡單和易於閱讀。
- function outputhtml(){
- echo "<html>";
- echo "<head><title>主頁</title></head>";
- echo "<body>主頁內容</body>";
- echo "</html>;
- }
- function outputhtml()
- {
- echo <<<EOT
- <html>
- <head><title>主頁</title></head>
- <body>主頁內容</body>
- </html>
- EOT;
- }
- outputhtml();
- 在heredoc中會自動替換其中的$變量,將命令和輸入放在一塊,方便
- 寫出一些php魔幻方法;
- php規定以兩個下劃線(__)開頭的方法都保留爲魔術方法,因此建議你們函數名最好不用__開頭,除非是爲了重載已有的魔術方法。
- PHP中的魔術方法有 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep, __wakeup, __toString, __set_state, __clone, __autoload
- 一、__get、__set
- 這兩個方法是爲在類和他們的父類中沒有聲明的屬性而設計的
- __get( $property ) 當調用一個未定義的屬性時,此方法會被觸發,傳遞的參數是被訪問的屬性名
- __set( $property, $value ) 給一個未定義的屬性賦值時,此方法會被觸發,傳遞的參數是被設置的屬性名和值
- 這裏的沒有聲明包括當使用對象調用時,訪問控制爲proteced,private的屬性(即沒有權限訪問的屬性)。
- 二、__isset、__unset
- __isset( $property ) 當在一個未定義的屬性上調用isset()函數時調用此方法
- __unset( $property ) 當在一個未定義的屬性上調用unset()函數時調用此方法
- 與__get方法和__set方法相同,這裏的沒有聲明包括當使用對象調用時,訪問控制爲proteced,private的屬性(即沒有權限訪問的屬性)
- 三、__call
- __call( $method, $arg_array ) 當調用一個未定義的方法是調用此方法
- 這裏的未定義的方法包括沒有權限訪問的方法;若是方法不存在就去父類中找這個方法,若是父類中也不存在就去調用本類的__call()方法,若是本類中不存在__call()方法就去找父類中的__call()方法
- 四、__autoload
- __autoload 函數,它會在試圖使用還沒有被定義的類時自動調用。經過調用此函數,腳本引擎在 PHP 出錯失敗前有了最後一個機會加載所需的類。
- 若是要定義一個全局的自動加載類,則必須用spl_autoload_register()方法將處理類註冊到PHP標準庫:
- view plaincopy to clipboardprint?
- <?php
- class Loader
- {
- static function autoload_class($class_name)
- {
- //尋找正確的$class_name類,並引入,沒有則拋出異常
- }
- }
- /**
- * 設置對象的自動載入
- * spl_autoload_register — Register given function as __autoload() implementation
- */
- spl_autoload_register(array('Loader', 'autoload_class'));
- $a = new Test();//Test沒用require就實例化,實現自動加載,不少框架就用這種方法自動加載類
- ?>
- 注意: 在 __autoload 函數中拋出的異常不能被 catch 語句塊捕獲並致使致命錯誤,因此應該在函數自己作捕獲。
- 五、__construct、__destruct
- __construct 構造方法,當一個對象建立時調用此方法,相對於PHP4使用此方法的好處是:可使構造方法有一個獨一無二的名稱,不管它所在的類的名稱是什麼.這樣你在改變類的名稱時,就不須要改變構造方法的名稱
- __destruct 析構方法,PHP將在對象被銷燬前(即從內存中清除前)調用這個方法。默認狀況下,PHP僅僅釋放對象屬性所佔用的內存並銷燬對象相關的資源,析構函數容許你在使用一個對象以後執行任意代碼來清除內存。當PHP決定你的腳本再也不與對象相關時,析構函數將被調用。
- 在一個函數的命名空間內,這會發生在函數return的時候。
- 對於全局變量,這發生於腳本結束的時候。
- 若是你想明確地銷燬一個對象,你能夠給指向該對象的變量分配任何其它值.一般將變量賦值勤爲NULL或者調用unset.
- 六、__clone
- PHP5中的對象賦值是使用的引用賦值,若是想複製一個對象則須要使用clone方法,在調用此方法是對象會自動調用__clone魔術方法,若是在對象複製須要執行某些初始化操做,能夠在__clone方法實現。
- 七、__toString
- __toString方法在將一個對象轉化成字符串時自動調用,好比使用echo打印對象時。
- 若是類沒有實現此方法,則沒法經過echo打印對象,不然會顯示:Catchable fatal error: Object of class test could not be converted to string in
- 此方法必須返回一個字符串。
- 在PHP 5.2.0以前,__toString方法只有結合使用echo() 或 print()時 才能生效。PHP 5.2.0以後,則能夠在任何字符串環境生效(例如經過printf(),使用%s修飾符),但 不能用於非字符串環境(如使用%d修飾符)。從PHP 5.2.0,若是將一個未定義__toString方法的對象 轉換爲字符串,會報出一個E_RECOVERABLE_ERROR錯誤。
- 八、__sleep、__wakeup
- __sleep 串行化的時候用
- __wakeup 反串行化的時候調用
- serialize() 檢查類中是否有魔術名稱 __sleep 的函數。若是這樣,該函數將在任何序列化以前運行。它能夠清除對象並應該返回一個包含有該對象中應被序列化的全部變量名的數組。
- 使用 __sleep 的目的是關閉對象可能具備的任何數據庫鏈接,提交等待中的數據或進行相似的清除任務。此外,若是有很是大的對象而並不須要徹底儲存下來時此函數也頗有用。
- 相反地,unserialize() 檢查具備魔術名稱 __wakeup 的函數的存在。若是存在,此函數能夠重建對象可能具備的任何資源。
- 使用 __wakeup 的目的是重建在序列化中可能丟失的任何數據庫鏈接以及處理其它從新初始化的任務。
- 九、__set_state
- 當調用var_export()時,這個靜態 方法會被調用(自PHP 5.1.0起有效)。
- 本方法的惟一參數是一個數組,其中包含按array(’property’ => value, …)格式排列的類屬性。
- 十、__invoke
- 當嘗試以調用函數的方式調用一個對象時,__invoke 方法會被自動調用。
- PHP5.3.0以上版本有效
- 十一、__callStatic
- 它的工做方式相似於 __call() 魔術方法,__callStatic() 是爲了處理靜態方法調用,
- PHP5.3.0以上版本有效
- PHP 確實增強了對 __callStatic() 方法的定義;它必須是公共的,而且必須被聲明爲靜態的。一樣,__call() 魔術方法必須被定義爲公共的,全部其餘魔術方法都必須如此
- 一些編譯php時的configure 參數
- ./configure
- –prefix=/usr/local/php php 安裝目錄
- –with-apxs2=/usr/local/apache/bin/apxs
- –with-config-file-path=/usr/local/php/etc 指定php.ini位置
- –with-mysql=/usr/local/mysql mysql安裝目錄,對mysql的支持
- –with-mysqli=/usr/local/mysql/bin/mysql_config mysqli文件目錄,優化支持
- –enable-safe-mode 打開安全模式
- –enable-ftp 打開ftp的支持
- –enable-zip 打開對zip的支持
- –with-bz2 打開對bz2文件的支持
- –with-jpeg-dir 打開對jpeg圖片的支持
- –with-png-dir 打開對png圖片的支持
- –with-freetype-dir 打開對freetype字體庫的支持
- –without-iconv 關閉iconv函數,種字符集間的轉換
- –with-libxml-dir 打開libxml2庫的支持
- –with-xmlrpc 打開xml-rpc的c語言
- –with-zlib-dir 打開zlib庫的支持
- –with-gd 打開gd庫的支持
- –enable-gd-native-ttf 支持TrueType字符串函數庫
- –with-curl 打開curl瀏覽工具的支持
- –with-curlwrappers 運用curl工具打開url流
- –with-ttf 打開freetype1.*的支持,能夠不加了
- –with-xsl 打開XSLT 文件支持,擴展了libxml2庫 ,須要libxslt軟件
- –with-gettext 打開gnu 的gettext 支持,編碼庫用到
- –with-pear 打開pear命令的支持,php擴展用的
- –enable-calendar 打開日曆擴展功能
- –enable-mbstring 多字節,字符串的支持
- –enable-bcmath 打開圖片大小調整,用到zabbix監控的時候用到了這個模塊
- –enable-sockets 打開 sockets 支持
- –enable-exif 圖片的元數據支持
- –enable-magic-quotes 魔術引用的支持
- –disable-rpath 關閉額外的運行庫文件
- –disable-debug 關閉調試模式
- –with-mime-magic=/usr/share/file/magic.mime 魔術頭文件位置
- cgi方式安裝才用的參數
- –enable-fpm 打上php-fpm 補丁後纔有這個參數,cgi方式安裝的啓動程序
- –enable-fastcgi 支持fastcgi方式啓動php
- –enable-force-cgi-redirect 同上 ,幫助裏沒有解釋
- –with-ncurses 支持ncurses 屏幕繪製以及基於文本終端的圖形互動功能的動態庫
- –enable-pcntl freeTDS須要用到的,多是連接mssql 纔用到
- mhash和mcrypt算法的擴展
- –with-mcrypt 算法
- –with-mhash 算法
- –with-gmp
- –enable-inline-optimization
- –with-openssl openssl的支持,加密傳輸時用到的
- –enable-dbase
- –with-pcre-dir=/usr/local/bin/pcre-config perl的正則庫案安裝位置
- –disable-dmalloc
- –with-gdbm dba的gdbm支持
- –enable-sigchild
- –enable-sysvsem
- –enable-sysvshm
- –enable-zend-multibyte 支持zend的多字節
- –enable-mbregex
- –enable-wddx
- –enable-shmop
- –enable-soap
- PHP配置選項完整列表
- 數據庫選項
- –with-dbplus
- 包括 dbplus 的支持。
- –with-adabas[=DIR]
- 包括 Adabas D 的支持。DIR 是 Adabas 的基本安裝目錄,默認爲 /usr/local。
- –with-sapdb[=DIR]
- 包括 SAP DB 的支持。DIR 是 SAP DB 的基本安裝目錄,默認爲 /usr/local。
- –with-solid[=DIR]
- 包括 Solid 的支持。DIR 是 Solid 的基本安裝目錄,默認爲 /usr/local/solid。
- –with-ibm-db2[=DIR]
- 包括 IBM DB2 的支持。DIR 是 DB2 的基本安裝目錄,默認爲 /home/db2inst1/sqllib。
- –with-empress[=DIR]
- 包括 Empress 的支持。DIR 是 Empress 的基本安裝目錄,默認爲 $EMPRESSPATH。自 PHP4 起,本選項僅支持 Empress 8.60 及以上版本。
- –with-empress-bcs[=DIR]
- 包括 Empress Local Access 的支持。DIR 是 Empress 的基本安裝目錄,默認爲 $EMPRESSPATH。自 PHP4 起,本選項僅支持 Empress 8.60 及以上版本。
- –with-birdstep[=DIR]
- 包括 Birdstep 的支持。DIR 是 Birdstep 的基本安裝目錄,默認爲 /usr/local/birdstep。
- –with-custom-odbc[=DIR]
- 包 括用戶自定義 ODBC 的支持。DIR 是 ODBC 的基本安裝目錄,默認爲 /usr/local。要確認定義了 CUSTOM_ODBC_LIBS 而且在 include 目錄中有某個 odbc.h。例如,對於 QNX 下的 Sybase SQL Anywhere 5.5.00,在運行 configure 腳本以前應該先定義如下環境變量: CPPFLAGS=」-DODBC_QNX -DSQLANY_BUG」 LDFLAGS=-lunix CUSTOM_ODBC_LIBS=」-ldblib -lodbc」.
- –with-iodbc[=DIR]
- 包括 iODBC 的支持。DIR 是 iODBC 的基本安裝目錄,默認爲 /usr/local。
- –with-esoob[=DIR]
- 包括 Easysoft OOB 的支持。DIR 是 OOB 的基本安裝目錄,默認爲 /usr/local/easysoft/oob/client。
- –with-unixODBC[=DIR]
- 包括 unixODBC 的支持。DIR 是 unixODBC 的基本安裝目錄,默認爲 /usr/local。
- –with-openlink[=DIR]
- 包括 OpenLink ODBC 的支持。DIR 是 OpenLink 的基本安裝目錄,默認爲 /usr/local。這和 iODBC 同樣。
- –with-dbmaker[=DIR]
- 包括 DBMaker 的支持。DIR 是 DBMaker 的基本安裝目錄,默認爲最新版 DBMaker 安裝的目錄(例如 /home/dbmaker/3.6)。
- –disable-unified-odbc
- 取消對 unified ODBC 的支持。僅適用於激活了 iODBC,Adabas,Solid,Velocis 或用戶自定義 ODBC 界面。僅能用於 PHP 3!
- 圖像選項
- –without-gd
- 禁用 GD 支持。僅用於 PHP 3!
- –with-imagick
- Imagick 擴展被移到 PEAR 中的 PECL 中去了,能夠在這裏找到。PHP 4 中的安裝指示能夠在 PEAR 站點中找到。
- 只用 –with-imagick 僅在 PHP 3 中支持,除非依照 PEAR 站點的指示去作。
- –with-ming[=DIR]
- 包括 ming 支持。
- 雜類選項
- –enable-force-cgi-redirect
- 激活服務器內部重定向的安全檢查。若是是在 Apache 中以 CGI 方式使用 PHP 則應該使用此選項。
- –enable-discard-path
- 使用此選項可使 PHP 的 CGI 可執行程序安全地放置在 web 目錄樹之外的地方,而且別人也不能繞過 .htaccess 的安全設置。
- –with-fastcgi
- 將 PHP 編譯成 FastCGI 應用程序。
- –enable-debug
- 編譯時加入調試符號。
- –with-layout=TYPE
- 設置安裝後的文件佈局。TYPE 能夠是 PHP(默認值)或者 GNU。
- –with-pear=DIR
- 將 PEAR 安裝在 DIR 目錄中(默認爲 PREFIX/lib/php)。
- –without-pear
- 不安裝 PEAR。
- –enable-sigchild
- 激活 PHP 本身的 SIGCHLD 句柄。
- –disable-rpath
- 禁止傳遞附加的運行時庫搜索路徑。
- –enable-libgcc
- 激活顯式 libgcc 鏈接。
- –enable-php-streams
- 包含試驗的 PHP 流。除非是測試源代碼,不然不要使用!
- –with-zlib-dir=<DIR>;
- 定義 zlib 的安裝路徑。
- –with-aspell[=DIR]
- 包含 ASPELL 支持。
- –with-ccvs[=DIR]
- 包含 CCVS 支持。
- –with-cybercash[=DIR]
- 包含 CyberCash 支持。DIR 是 CyberCash MCK 的安裝目錄。
- –with-icap[=DIR]
- 包含 ICAP 支持。
- –with-ircg-config
- ircg-config 腳本的路徑。
- –with-ircg
- 包含 ircg 支持。
- –enable-mailparse
- 包含 mailparse 支持。
- –with-muscat[=DIR]
- 包含 muscat 支持。
- –with-satellite[=DIR]
- 激活經過 Satellite(試驗性質)的 CORBA 支持。DIR 是 ORBit 的主目錄。
- –enable-trans-sid
- 激活透明的 session id 傳播。
- –with-regex[=TYPE]
- 使用系統 regex 庫(不同意)。
- –with-vpopmail[=DIR]
- 包含 vpopmail 支持。
- –with-tsrm-pthreads
- 使用 POSIX 線程(默認值)。
- –enable-shared[=PKGS]
- 編譯共享庫 [default=yes]。
- –enable-static[=PKGS]
- 編譯靜態庫 [default=yes]。
- –enable-fast-install[=PKGS]
- 爲快速安裝而優化 [default=yes]。
- –with-gnu-ld
- 假定 C 編譯器使用 GNU ld [default=no]。
- –disable-libtool-lock
- 避免鎖死(可能會破壞並行編譯)。
- –with-pic
- 嘗試只使用 PIC/non-PIC 對象 [default=use both]。
- –enable-memory-limit
- 編譯時加入內存限制支持。
- –disable-url-fopen-wrapper
- 禁止經過 URL 的 fopen wrapper,不能經過 HTTP 或 FTP 訪問文件。
- –enable-versioning
- 僅輸出所須要的符號。更多信息見 INSTALL 文件。
- –with-imsp[=DIR]
- 包含 IMSp 支持(DIR 是 IMSP 的 include 目錄和 libimsp.a 目錄)。僅用於 PHP 3!
- –with-mck[=DIR]
- 包含 Cybercash MCK 支持。DIR 是 cybercash mck 編譯目錄,默認爲 /usr/src/mck-3.2.0.3-linux。幫助見 extra/cyberlib。僅用於 PHP 3!
- –with-mod-dav=DIR
- 包含經過 Apache 的 mod_dav 的 DAV 支持。DIR 是 mod_dav 的安裝目錄(僅用於 Apache 模塊版本!)僅用於 PHP 3!
- –enable-debugger
- 編譯入遠程調試函數。僅用於 PHP 3!
- –enable-versioning
- 利用 Solaris 2.x 和 Linux 提供的版本控制與做用範圍的優點。僅用於 PHP 3!
- PHP 選項
- –enable-maintainer-mode
- 激活將編譯規則和未使用的(以及一些混淆的)依賴文件放入臨時安裝中。
- –with-config-file-path=PATH
- 設定 php.ini 所在的路徑,默認爲 PREFIX/lib。
- –enable-safe-mode
- 默認激活安全模式。
- –with-exec-dir[=DIR]
- 安全模式下只容許此目錄下執行程序。默認爲 /usr/local/php/bin。
- –enable-magic-quotes
- 默認激活 magic quotes。
- –disable-short-tags
- 默認禁止簡寫的 PHP 開始標記 <?。
- 服務器選項
- –with-aolserver=DIR
- 指定已安裝的 AOLserver 的路徑。
- –with-apxs[=FILE]
- 編譯共享 Apache 模塊。FILE 是可選的 Apache 的 apxs 工具的路徑,默認爲 apxs。確保指定的 apxs 版本是安裝後的文件而不是 Apache 源程序中包中的。
- –with-apache[=DIR]
- 編譯 Apache 模塊。DIR 是 Apache 源程序的最高一級目錄。默認爲 /usr/local/apache。
- –with-mod_charset
- 激活 mod_charset 中的傳遞表(Apache 中)。
- –with-apxs2[=FILE]
- 編譯共享的 Apache 2.0 模塊。FILE 是可選的 Apache 的 apxs 工具的路徑,默認爲 apxs。
- –with-fhttpd[=DIR]
- 編譯 fhttpd 模塊。DIR 是 fhttpd 的源代碼路徑,默認爲 /usr/local/src/fhttpd。
- –with-isapi=DIR
- 將 PHP 編譯爲 ISAPI 模塊用於 Zeus。
- –with-nsapi=DIR
- 指定已安裝的 Netscape 服務器路徑。
- –with-phttpd=DIR
- 暫無信息。
- –with-pi3web=DIR
- 將 PHP 編譯爲用於 Pi3Web 的模塊。
- –with-roxen=DIR
- 將 PHP 編譯爲一個 Pike 模塊。DIR 是 Roxen 的根目錄,一般爲 /usr/local/roxen/server。
- –enable-roxen-zts
- 編譯 Roxen 模塊,使用 Zend Thread Safety。
- –with-servlet[=DIR]
- 包含 servlet 支持。DIR 是 JSDK 的基本安裝目錄。本 SAPI 須要 java 擴展必須被編譯爲共享的 dl。
- –with-thttpd=SRCDIR
- 將 PHP 編譯爲 thttpd 模塊。
- –with-tux=MODULEDIR
- 向php傳入參數的兩種方法。
- (mysql)請寫出數據類型(int char varchar datetime text)的意思; 請問varchar和char有什麼區別;
- char是一種固定長度的類型,varchar則是一種可變長度的類型,它們的區別是:
- char(M)類型的數據列裏,每一個值都佔用M個字節,若是某個長度小於M,MySQL就會在它的右邊用空格字符補足.(在檢索操做中那些填補出來的空格字符將被去掉)在varchar(M)類型的數據列裏,每一個值只佔用恰好夠用的字節再加上一個用來記錄其長度的字節(即總長度爲L+1字節).
- 在MySQL中用來判斷是否須要進行對據列類型轉換的規則
- 一、在一個數據表裏,若是每個數據列的長度都是固定的,那麼每個數據行的長度也將是固定的.
- 二、只要數據表裏有一個數據列的長度的可變的,那麼各數據行的長度都是可變的.
- 三、若是某個數據表裏的數據行的長度是可變的,那麼,爲了節約存儲空間,MySQL會把這個數據表裏的固定長度類型的數據列轉換爲相應的可變長度類型.
- 例外:長度小於4個字符的char數據列不會被轉換爲varchar類型
- 一個定長
- 一個不定長
- a char(10)
- b varchar(10)
- 都存入'abc'
- a 10字節
- b 3字節
- error_reporting 等調試函數使用
- 您是否用過版本控制軟件? 若是有您用的版本控制軟件的名字是?
- posix和perl標準的正則表達式區別;
- 正則表達式(Regular Expression,縮寫爲regexp,regex或regxp),又稱正規表達式、正規表示式或常規表達式或正規化表示法或正規表示法,是指一個用來描述或者匹配一系列符合某個句法規則的字符串的單個字符串 。在不少文本編輯器或其餘工具裏,正則表達式一般被用來檢索和/或替換那些符合某個模式的文本內容 。許多程序設計語言都支持利用正則表達式進行字符串操做。例如,在Perl中就內建了一個功能強大的在正則表達式引擎。正則表達式這個概念最初是由 Unix中的工具軟件(例如sed和grep)普及開的。(摘自維基百科)
- PHP同時使用兩套正則表達式規則,一套是由電氣和電子工程師協會(IEEE)制定的POSIX Extended 1003.2兼容正則(事實上PHP對此標準的支持並不完善),另外一套來自PCRE(Perl Compatible Regular Expression)庫提供PERL兼容正則,這是個開放源代碼的軟件,做者爲 Philip Hazel。
- 使用POSIX兼容規則的函數有:
- ereg_replace()
- ereg()
- eregi()
- eregi_replace()
- split()
- spliti()
- sql_regcase()
- mb_ereg_match()
- mb_ereg_replace()
- mb_ereg_search_getpos()
- mb_ereg_search_getregs()
- mb_ereg_search_init()
- mb_ereg_search_pos()
- mb_ereg_search_regs()
- mb_ereg_search_setpos()
- mb_ereg_search()
- mb_ereg()
- mb_eregi_replace()
- mb_eregi()
- mb_regex_encoding()
- mb_regex_set_options()
- mb_split()
- 使用PERL兼容規則的函數有:
- preg_grep()
- preg_replace_callback()
- preg_match_all()
- preg_match()
- preg_quote()
- preg_split()
- preg_replace()
- 定界符:
- POSIX兼容正則沒有定界符,函數的相應參數會被認爲是正則。
- PERL兼容正則可使用任何不是字母、數字或反斜線(\)的字符做爲定界符,若是做爲定界符的字符必須被用在表達式自己中,則須要用反斜線轉義。也可使用(),{},[] 和 <> 做爲定界符
- 修正符:
- POSIX兼容正則沒有修正符。
- PERL兼容正則中可能使用的修正符(修正符中的空格和換行被忽略,其它字符會致使錯誤):
- i (PCRE_CASELESS):
- 匹配時忽略大小寫。
- m(PCRE_MULTILINE):
- 當設定了此修正符,行起始(^)和行結束($)除了匹配整個字符串開頭和結束外,還分別匹配其中的換行符(\n)的以後和以前。
- s(PCRE_DOTALL):
- 若是設定了此修正符,模式中的圓點元字符(.)匹配全部的字符,包括換行符。沒有此設定的話,則不包括換行符。
- x(PCRE_EXTENDED):
- 若是設定了此修正符,模式中的空白字符除了被轉義的或在字符類中的之外徹底被忽略。
- e:
- 若是設定了此修正符,preg_replace() 在替換字符串中對逆向引用做正常的替換,將其做爲 PHP 代碼求值,並用其結果來替換所搜索的字符串。 只有 preg_replace() 使用此修正符,其它 PCRE 函數將忽略之。
- A(PCRE_ANCHORED):
- 若是設定了此修正符,模式被強制爲「anchored」,即強制僅從目標字符串的開頭開始匹配。
- D(PCRE_DOLLAR_ENDONLY):
- 若是設定了此修正符,模式中的行結束($)僅匹配目標字符串的結尾。沒有此選項時,若是最後一個字符是換行符的話,也會被匹配在裏面。若是設定了 m 修正符則忽略此選項。
- S:
- 當一個模式將被使用若干次時,爲加速匹配起見值得先對其進行分析。若是設定了此修正符則會進行額外的分析。目前,分析一個模式僅對沒有單一固定起始字符的 non-anchored 模式有用。
- U(PCRE_UNGREEDY):
- 使「?」的默認匹配成爲貪婪狀態的。
- X(PCRE_EXTRA):
- 模式中的任何反斜線後面跟上一個沒有特殊意義的字母致使一個錯誤,從而保留此組合以備未來擴充。默認狀況下,一個反斜線後面跟一個沒有特殊意義的字母被當成該字母自己。
- u(PCRE_UTF8):
- 模式字符串被當成UTF-8。
- 邏輯區隔:
- POSIX兼容正則和PERL兼容正則的邏輯區隔符號做用和使用方法徹底一致:
- []:包含任選一操做的相關信息。
- {}:包含匹配次數的相關信息。
- ():包含一個邏輯區間的相關信息,可被用來進行引用操做。
- |:表示「或」,[ab]和a|b是等價的。
- 元字符與「[]」相關:
- 有兩組不一樣的元字符:一種是模式中除了方括號內都能被識別的,還有一種是在方括號「[]」內被識別的。
- POSIX兼容正則和PERL兼容正則「[]以外」「一致」的元字符:
- \ 有數種用途的通用轉義符
- ^ 匹配字符串的開頭
- $ 匹配字符串的結尾
- ? 匹配0或者1
- * 匹配 0 個或多個前面指定類型的字符
- + 匹配 1 個或多個前面指定類型的字符
- POSIX兼容正則和PERL兼容正則「[]以外」「不一致」的元字符:
- . PERL兼容正則匹配除了換行符外的任意一個字符
- . POSIX兼容正則匹配任意一個字符
- POSIX兼容正則和PERL兼容正則「[]以內」「一致」的元字符:
- \ 有數種用途的通用轉義符
- ^ 取反字符,但僅當其爲第一個字符時有效
- - 指定字符ASCII範圍,仔細研究ASCII碼,你會發現[W-c]等價於[WXYZ\\^_`abc]
- POSIX兼容正則和PERL兼容正則「[]以內」「不一致」的元字符:
- - POSIX兼容正則中[a-c-e]的指定會拋出錯誤。
- - PERL兼容正則中[a-c-e]的指定等價於[a-e]。
- 匹配次數與「{}」相關:
- POSIX兼容正則和PERL兼容正則在匹配次數方面徹底一致:
- {2}:表示匹配前面的字符2次
- {2,}:表示匹配前面的字符2次或屢次,默認都是貪婪(儘量多)的匹配
- {2,4}:表示匹配前面的字符2次或4次
- 邏輯區間與「()」相關:
- 使用()包含起來的區域是一個邏輯區間,邏輯區間的主要做用是體現出一些字符出現的邏輯次序,另外一個用處就是能夠用來引用(能夠將此區間內的值引用給一個變量)。後一個做用比較奇特:
- <?php
- $str = "http://www.163.com/";
- // POSIX兼容正則:
- echo ereg_replace("(.+)","<a href = \\1 >\\1</a>",$str);
- // PERL兼容正則:
- echo preg_replace("/(.+)/","<a href = $1 >$1</a>",$str);
- // 顯示兩個連接
- ?>
- 在引用的時候,括號是能夠嵌套的,邏輯次序是按照「(」出現的次序來標定的。
- 類型匹配:
- POSIX兼容正則:
- [:upper:]:匹配全部的大寫字母
- [:lower:]:匹配全部的小寫字母
- [:alpha:]:匹配全部的字母
- [:alnum:]:匹配全部的字母和數字
- [:digit:]:匹配全部的數字
- [:xdigit:]:匹配全部的十六進制字符,等價於[0-9A-Fa-f]
- [:punct:]:匹配全部的標點符號,等價於 [.,"'?!;:]
- [:blank:]:匹配空格和TAB,等價於[ \t]
- [:space:]:匹配全部的空白字符,等價於[ \t\n\r\f\v]
- [:cntrl:]:匹配全部ASCII 0到31之間的控制符。
- [:graph:]:匹配全部的可打印字符,等價於:[^ \t\n\r\f\v]
- [:print:]:匹配全部的可打印字符和空格,等價於:[^\t\n\r\f\v]
- [.c.]:功能不明
- [=c=]:功能不明
- [:<:]:匹配單詞的開始
- [:>:]:匹配單詞的結尾
- PERL兼容正則(這裏能夠看出PERL正則的強大):
- \a alarm,即 BEL 字符(’0)
- \cx "control-x",其中 x 是任意字符
- \e escape(’0B)
- \f 換頁符 formfeed(’0C)
- \n 換行符 newline(’0A)
- \r 回車符 carriage return(’0D)
- \t 製表符 tab(’0)
- \xhh 十六進制代碼爲 hh 的字符
- \ddd 八進制代碼爲 ddd 的字符,或 backreference
- \d 任一十進制數字
- \D 任一非十進制數的字符
- \s 任一空白字符
- \S 任一非空白字符
- \w 任一「字」的字符
- \W 任一「非字」的字符
- \b 字分界線
- \B 非字分界線
- \A 目標的開頭(獨立於多行模式)
- \Z 目標的結尾或位於結尾的換行符前(獨立於多行模式)
- \z 目標的結尾(獨立於多行模式)
- \G 目標中的第一個匹配位置
- Safe_mode 打開後哪些地方受限.
- 寫代碼來解決多進程/線程同時讀寫一個文件的問題。
- 你們都知道,PHP是沒有多線程概念的,儘管如此咱們仍然能夠用「不完美」的方法來模擬多線程。簡單的說,就是隊列處理。經過對文件進行加鎖和解鎖,來實現。當一個文件被一個用戶操做時,該文件是被鎖定的,其餘用戶只能等待,確實不夠完美,可是也能夠知足一些要求不高的應用。
- function T_put($filename,$string){
- $fp = fopen($filename,’a'); //追加方式打開
- if (flock($fp, LOCK_EX)){ //加寫鎖
- fputs($fp,$string); //寫文件
- flock($fp, LOCK_UN); //解鎖
- }
- fclose($fp);
- }
- function T_get($filename,$length){
- $fp = fopen($filename,’r'); //追加方式打開
- if (flock($fp, LOCK_SH)){ //加讀鎖
- $result = fgets($fp,$length); //讀取文件
- flock($fp, LOCK_UN); //解鎖
- }
- fclose($fp);
- return $result;
- }
- 寫一段上傳文件的代碼。
- Mysql 的存儲引擎,myisam和innodb的區別。
- 簡單的表達。
- MyISAM 是非事務的存儲引擎。
- innodb是支持事務的存儲引擎。
- innodb的引擎比較適合於插入和更新操做比較多的應用
- 而MyISAM 則適合用於頻繁查詢的應用
- MyISAM --表鎖。
- innodb--設計合理的話是行鎖。
- MyISAM 不會出現死鎖。
- 最大的區別就是MYISAM適合小數據,小併發;INNODB 適合大數據,大併發。最大的區別就是在鎖的級別上。
- MyISAM類型不支持事務處理等高級處理,而InnoDB類型支持。 MyISAM類型的表強調的是性能,其執行數度比InnoDB類型更快,可是不提供事務支持,而InnoDB提供事務支持已經外部鍵等高級數據庫功能。綜述,就能夠根據數據表不一樣的用處是用不一樣的存儲類型。並且MyISAM是文件存儲的,能夠進行直接在不一樣操做系統間拷貝使用。
- InnoDB:
- InnoDB 給 MySQL 提供了具備事務(commit)、回滾(rollback)和崩潰修復能力(crash recovery capabilities)的事務安全(transaction-safe (ACID compliant))型表。InnoDB 提供了行鎖(locking on row level),提供與 Oracle 類型一致的不加鎖讀取(non-locking read in SELECTs)。這些特性均提升了多用戶併發操做的性能表現。在InnoDB表中不須要擴大鎖定(lock escalation),由於 InnoDB 的列鎖定(row level locks)適宜很是小的空間。InnoDB 是 MySQL 上第一個提供外鍵約束(FOREIGN KEY constraints)的表引擎。InnoDB 的設計目標是處理大容量數據庫系統,它的 CPU 利用率是其它基於磁盤的關係數據庫引擎所不能比的。在技術上,InnoDB 是一套放在 MySQL 後臺的完整數據庫系統,InnoDB 在主內存中創建其專用的緩衝池用於高速緩衝數據和索引。 InnoDB 把數據和索引存放在表空間裏,可能包含多個文件,這與其它的不同,舉例來講,在 MyISAM 中,表被存放在單獨的文件中。InnoDB 表的大小隻受限於操做系統的文件大小,通常爲 2 GB。InnoDB全部的表都保存在同一個數據文件 ibdata1 中(也多是多個文件,或者是獨立的表空間文件),相對來講比較很差備份,能夠拷貝文件或用navicat for mysql。
- MyISAM
- 每張MyISAM 表被存放在三個文件 :frm 文件存放表格定義。 數據文件是MYD (MYData) 。 索引文件是MYI (MYIndex) 引申。
- 由於MyISAM相對簡單因此在效率上要優於InnoDB,小型應用使用MyISAM是不錯的選擇。
- MyISAM表是保存成文件的形式,在跨平臺的數據轉移中使用MyISAM存儲會省去很多的麻煩
2. web 架構,安全,項目經驗
- 介紹xdebug,apc,eAccelerator,Xcache,Zend opt的使用經驗。
- 使用mod_rewrite,在服務器上沒有/archivers/567.html這個物理文件時,重定向到index.php?id=567 ,請先打開mod_rewrite.
- MySQL數據庫做發佈系統的存儲,一天五萬條以上的增量,預計運維三年,怎麼優化?
- 寫出一種排序算法(原理),並說出優化它的方法。
- 請簡單闡述您最得意的開發之做
- 對於大流量的網站,您採用什麼樣的方法來解決各頁面訪問量統計問題
- 您是否用過模板引擎? 若是有您用的模板引擎的名字是?
- 請介紹Session的原理,大型網站中Session方面應注意什麼?
- 測試php性能和mysql數據庫性能的工具,和找出瓶頸的方法。
- 正則提出一個網頁中的全部連接.
- 介紹一下常見的SSO(單點登錄)方案(好比dedecms整合discuz的passport)的原理。
- 您寫過的PHP框架的特色,主要解決什麼問題,與其餘框架的不一樣點。
- 大型的論壇/新聞文章系統/SNS網站在性能優化上有什麼區別?
- 相冊類應用:要求在瀏覽器中能同時選中並上傳多個文件,圖片要求能剪裁,壓縮包在服務器端解壓。能上傳單個達50M的文件。上傳過程當中有進度條顯示。每一個圖片能生成四種大小縮略圖,視頻文件要轉成flv供flash播放。敘述要涉及的各種開源軟件和簡單用途。
- 一 羣猴子排成一圈,按1,2,…,n依次編號。而後從第1只開始數,數到第m只,把它踢出圈,從它後面再開始數,再數到第m只,在把它踢出去…,如此不停的 進行下去,直到最後只剩下一隻猴子爲止,那隻猴子就叫作大王。要求編程模擬此過程,輸入m、n, 輸出最後那個大王的編號。用程序模擬該過程。
3. unix/linux 基本使用
- linux下查看當前系統負載信息的一些方法。
- vim的基本快捷鍵。
- ssh 安全加強方法;密碼方式和rsa key 方式的配置。
- rpm/apt/yum/ports 裝包,查詢,刪除的基本命令。
- Makefile的基本格式,gcc 編譯,鏈接的命令,-O0 和-O3區別。
- gdb,strace,valgrind的基本使用.
4. 前端,HTML,JS
- css盒模型。
- javascript中的prototype。
- javascript中this對象的做用域。
- IE和firefox事件冒泡的不一樣。
- 什麼是怪異模式,標準模式,近標準模式。
- DTD的定義
- IE/firefox經常使用hack.
- firefox,IE下的前端js/css調試工具。