php 提供了一個內置的Web服務器。
在很多時候,當我們要簡單的運行一個小 demo 來驗證一些代碼或者輪子是否可用,是否可以運行起來時,去配置 Nginx 或者 Apache 服務器都很麻煩。此時,使用PHP的內置服務器就可以將代碼運行起來進行簡單的一些測試工作。
這個內置的Web服務器主要用于本地開發使用,不可用于線上生產環境。
用法
$ php -S localhost:2333 [-t html] [-c php.ini] [router.php]
參數說明:
-S 指定服務器的 Domain/IP 和端口
-t 指定根目錄,默認為當前目錄
-c 指定配置文件
router.php 自定義路由,即入口文件
啟動Web服務器
$ cd ~/public_html
$ php -S localhost:8000
終端窗口會顯示:
PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011
Listening on localhost:8000
Document root is /home/me/public_html
Press Ctrl-C to quit
接著訪問http://localhost:8000/和http://localhost:8000/myscript.html,窗口會顯示:
PHP 5.4.0 Development Server started at Thu Jul 21 10:43:28 2011
Listening on localhost:8000
Document root is /home/me/public_html
Press Ctrl-C to quit.
[Thu Jul 21 10:48:48 2011] ::1:39144 GET /favicon.ico - Request read
[Thu Jul 21 10:48:50 2011] ::1:39146 GET / - Request read
[Thu Jul 21 10:48:50 2011] ::1:39147 GET /favicon.ico - Request read
[Thu Jul 21 10:48:52 2011] ::1:39148 GET /myscript.html - Request read
[Thu Jul 21 10:48:52 2011] ::1:39149 GET /favicon.ico - Request read
啟動時指定運行目錄(根目錄)
URI請求會被發送到PHP所在的的工作目錄進行處理,除非你使用了-t參數來自定義不同的目錄。
$ cd ~/public_html
$ php -S localhost:8000 -t foo/
終端窗口顯示:
PHP 5.4.0 Development Server started at Thu Jul 21 10:50:26 2011
Listening on localhost:8000
Document root is /home/me/public_html/foo
Press Ctrl-C to quit
指定PHP配置
應用常常需要使用專屬的PHP配置文件,尤其是對內存使用、文件上傳、分析或對字節碼緩存有特殊要求時,一定要單獨配置,我們可以使用 -c 選項,讓PHP內置的服務器使用指定的配置文件:
php -S localhost:8000 -c App/config/php.ini
使用路由(Router)腳本
如果請求未指定執行哪個PHP文件,則默認執行目錄內的index.php 或者 index.html。如果這兩個文件都不存在,服務器會返回404錯誤。
當你在命令行啟動這個Web Server時,如果指定了一個PHP文件,則這個文件會作為一個“路由”腳本,意味著每次請求都會先執行這個腳本。如果這個腳本返回 false ,那么直接返回請求的文件(例如請求靜態文件不作任何處理)。否則會把輸出返回到瀏覽器。
如下示例: 請求圖片直接顯示圖片,請求HTML則顯示“Welcome to PHP”
<?php
// router.php
if (preg_match('/\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"]))
return false; // 直接返回請求的文件
else {
echo "<p>Welcome to PHP</p>";
}
?>
$ php -S localhost:8000 router.php
執行之后終端顯示:
PHP 5.4.0 Development Server started at Thu Jul 21 10:53:19 2011
Listening on localhost:8000
Document root is /home/me/public_html
Press Ctrl-C to quit.
[Thu Jul 21 10:53:45 2011] ::1:55801 GET /mylogo.jpg - Request read
[Thu Jul 21 10:53:52 2011] ::1:55803 GET /abc.html - Request read
[Thu Jul 21 10:53:52 2011] ::1:55804 GET /favicon.ico - Request read
檢查當前請求是否使用的PHP內置服務器
如在PHP內置服務器驅動和生產環境服務器驅動時共用一個路由腳本文件
<?php
// router.php
if (php_sapi_name() == 'cli-server') {
/* 路由靜態資源返回 false */
}
/* 繼續正常index.php操作 */
?>
$ php -S localhost:8000 router.php
允許從遠程計算機訪問CLI Web服務器
您可以通過以下方式使任何IP都可以通過端口8000訪問該Web服務器:
$ php -S 0.0.0.0:8000
其實像Laravel框架的 php artisan serve 命令啟動服務也是用的上述php內置服務器。