PHP是一種腳本語言它需要PHP解釋器來分析運行PHP文件當把PHP做為CGI服務Web請求時它需要被嵌入到某種Web服務器裡最常見的是集成到Apache或IIS裡這就是說在使用PHP前你需要安裝Apache或IIS並且正確的配置它們和PHP集成的參數雖然這種配置已經很規范文檔非常豐富但我們還是經常在安裝Apache和PHP集成時遇到問題而且有時候我們只想測試一個簡單的PHP特征不想就為此安裝啟動Apache服務
但據官方文檔上說這個內置的Web服務器只是提供開發測試使用不推薦使用中生產環境中因為這個服務器接受處理請求時順序執行的不能並發處理
這個內置的web服務器使用起來非常的方便你只需要執行下面的命令
$ php S localhost:
然後就可以訪問了這樣啟動後默認的web服務目錄是執行命令的當前目錄如果不想使用當前目錄你需要使用 t 參數來指定
例 # 啟動Web服務器
$ cd ~/public_html
$ php S localhost:
終端輸出信息
PHP Development Server started at Thu Jul ::
Listening on localhost:
Document root is /home/me/public_html
Press CtrlC to quit
當請求了 http://localhost:/ 和 http://localhost:/myscripthtml 地址後終端輸出類似如下的信息
PHP Development Server started at Thu Jul ::
Listening on localhost:
Document root is /home/me/public_html
Press CtrlC to quit
[Thu Jul :: ] ::: GET /faviconico Request read
[Thu Jul :: ] ::: GET / Request read
[Thu Jul :: ] ::: GET /faviconico Request read
[Thu Jul :: ] ::: GET /myscripthtml Request read
[Thu Jul :: ] ::: GET /faviconico Request read
例 # 啟動web服務器時指定文檔的根目錄
$ cd ~/public_html
$ php S localhost: t foo/
終端顯示信息
PHP Development Server started at Thu Jul ::
Listening on localhost:
Document root is /home/me/public_html/foo
Press CtrlC to quit
如果你在啟動命令行後面附加一個php腳本文件那這個文件將會被當成一個路由器腳本這個腳本將負責所有的HTTP請求如果這個腳本執行時返回FALSE則被請求的資源會正常的返回如果不是FALSE浏覽裡顯示的將會是這個腳本產生的內容
例 # 使用路由器腳本
在這個例子中對圖片的請求會返回相應的圖片但對HTML文件的請求會顯示Welcome to PHP:
<?php
// routerphp
if (preg_match(/\(?png|jpg|jpeg|gif)$/ $_SERVER[REQUEST_URI])) {
return false; // serve the requested resource asis
} else {
echo <p>Welcome to PHP</p>;
}
?>
$ php S localhost: routerphp
例 # 判斷是否是在使用內置web服務器
通過程序判斷來調整同一個PHP路由器腳本在內置Web服務器中和在生產服務器中的不同行為
<?php
// routerphp
if (php_sapi_name() == cliserver) {
/* route static assets and return false */
}
/* go on with normal indexphp operations */
?>
$ php S localhost: routerphp
這個內置的web服務器能識別一些標准的MIME類型資源它們的擴展有css gif htm html jpe jpeg jpg js png svg and txt對htm 和 svg 擴展到支持是在PHP 之後才支持的
例 # 處理不支持的文件類型
如果你希望這個Web服務器能夠正確的處理不被支持的MIME文件類型這樣做
<?php
// routerphp
$path = pathinfo($_SERVER[SCRIPT_FILENAME])
if ($path[extension] == ogg) {
header(ContentType: video/ogg)
readfile($_SERVER[SCRIPT_FILENAME])
}
else {
return FALSE;
}
?>
$ php S localhost: routerphp
如果你希望能遠程的訪問這個內置的web服務器你的啟動命令需要改成下面這樣
例 # 遠程訪問這個內置Web服務器
$ php S :
這樣你就可以通過 端口遠程的訪問這個內置的web服務器了
From:http://tw.wingwit.com/Article/program/PHP/201311/21637.html