在很多时候,当我们要大略的运行一个小 demo 来验证一些代码或者轮子是否可用,是否可以运行起来时,去配置 nginx 或者 apache 做事器都很麻烦。
此时,利用PHP的内置做事器就可以将代码运行起来进行大略的一些测试事情。

这个内置的Web做事器紧张用于本地开拓利用,不可用于线上生产环境。

用法

$ php -S localhost:2333 [-t html] [-c php.ini] [router.php]

参数解释:

publicphpPHP 内置 Web 办事器 NoSQL

-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 2011Listening on localhost:8000Document root is /home/me/public_htmlPress 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 2011Listening on localhost:8000Document root is /home/me/public_htmlPress 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 2011Listening on localhost:8000Document root is /home/me/public_html/fooPress 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.phpif (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 2011Listening on localhost:8000Document root is /home/me/public_htmlPress 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.phpif (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内置做事器。