PHP 5.4.0起, CLI SAPI 提供了一个内置的Web服务器。
这个内置的Web服务器主要用于本地开发使用,不可用于线上产品环境。
URI请求会被发送到PHP所在的的工作目录(Working Directory)进行处理,除非你使用了-t参数来自定义不同的目录。
如果请求未指定执行哪个PHP文件,则默认执行目录内的index.php 或者 index.html。如果这两个文件都不存在,服务器会返回404错误。
当你在命令行启动这个Web Server时,如果指定了一个PHP文件,则这个文件会作为一个“路由”脚本,意味着每次请求都会先执行这个脚本。如果这个脚本返回 FALSE
,那么直接返回请求的文件(例如请求静态文件不作任何处理)。否则会把输出返回到浏览器。
Example #1 启动Web服务器
$ cd ~/public_html
$ php -S localhost:
终端窗口会显示:
PHP 5.4. Development Server started at Thu Jul ::
Listening on localhost:
Document root is /home/me/public_html
Press Ctrl-C to quit
接着访问http://localhost:8000/和http://localhost:8000/myscript.html,窗口会显示:
PHP 5.4. Development Server started at Thu Jul ::
Listening on localhost:
Document root is /home/me/public_html
Press Ctrl-C to quit.
[Thu Jul :: ] ::: GET /favicon.ico - Request read
[Thu Jul :: ] ::: GET / - Request read
[Thu Jul :: ] ::: GET /favicon.ico - Request read
[Thu Jul :: ] ::: GET /myscript.html - Request read
[Thu Jul :: ] ::: GET /favicon.ico - Request read
Example #2 启动时指定根目录
$ cd ~/public_html
$ php -S localhost: -t foo/
终端窗口显示:
PHP 5.4. Development Server started at Thu Jul ::
Listening on localhost:
Document root is /home/me/public_html/foo
Press Ctrl-C to quit
Example #3 使用路由(Router)脚本
请求图片直接显示图片,请求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: router.php
执行之后终端显示:
PHP 5.4. Development Server started at Thu Jul ::
Listening on localhost:
Document root is /home/me/public_html
Press Ctrl-C to quit.
[Thu Jul :: ] ::: GET /mylogo.jpg - Request read
[Thu Jul :: ] ::: GET /abc.html - Request read
[Thu Jul :: ] ::: GET /favicon.ico - Request read