PHP 提供了内置的 Web 服务器。
很多时候,当我们只是简单的运行一个小demo来验证一些代码或者轮子是否可用并且可以运行时,配置nginx或者服务器是非常麻烦的。 此时,使用PHP内置的服务器运行代码进行一些简单的测试。
这个内置的Web服务器主要用于本地开发,不能用于在线生产环境。
用法
$ php -S localhost:2333 [-t html] [-c php.ini] [router.php]
参数说明:
-S 指定服务器的 Domain/IP 和端口
-t 指定根目录,默认为当前目录
-c 指定配置文件
router.php 自定义路由,即入口文件
启动网络服务器
$ 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
然后访问:8000/和:8000/.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
使用route()脚本
如果请求没有指定执行哪个PHP文件,则默认执行目录下的index.php或index.html。 如果这两个文件都不存在,服务器将返回 404 错误。
当你在命令行启动这个Web时,如果你指定了一个PHP文件,这个文件将被用作“路由”脚本,这意味着每个请求都会首先执行这个脚本。 如果脚本返回 false,则直接返回请求的文件(例如请求静态文件,不做任何处理)。 否则输出将返回到浏览器。
下面的例子:请求图片时,直接显示图片,请求HTML时,显示“to PHP”
'/\\.(?:png|jpg|jpeg|gif)$/', $_SERVER["REQUEST_URI"]))
return false; // 直接返回请求的文件
else {
echo "Welcome to PHP
";
}
?>
$ 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内置服务器驱动和生产环境服务器驱动之间共享一个路由脚本文件
'cli-server') {
}
?>
$ php -S localhost:8000 router.php
允许从远程计算机访问 CLI Web 服务器
您可以通过以下方式使任何 IP 在端口 8000 上访问此 Web 服务器:
$ php -S 0.0.0.0:8000
其实框架的命令也是利用上面提到的php内置服务器来启动服务的。