php 内置的 web 服务器 php -s

从 PHP 5.4.0 起,PHP内置了Web服务器,这对于认为须要Apache或Nginx才能预览PHP应用的开发者来讲又是一个隐藏功能。这个内置的Web服务器不该该用于生产环境,但对于本地开发来讲是个极好的工具。Laravel Valet 起初就是使用这个内置的服务器,可是在1.1.0版本后将其替换为Caddy(查看相关新闻)。php

一、启动

这个内置的Web服务器很容易启动,打开终端(Windows下对应是cmd命令行),进入项目根目录,执行以下命令便可:前端

php -S localhost:8000  # 进入项目根目录,执行以下命令便可:

(注意点:要安装php,而且php是全局环境)laravel

上述命令会新启动一个PHP Web服务器,地址是localhost,监听的端口是8000,当前所在目录就是这个Web服务器的根目录。git

如今,打开浏览器,访问http://localhost:8000就能够预览应用了。(运行期间,doc窗口不能关闭!)在Web浏览器中浏览应用时,每一个HTTP请求的信息都会记录到终端的标准输出中,所以咱们能够查看应用是否抛出了404或500响应:github

有时候咱们须要在同一局域网中的另外一台设备中访问这个服务器(例如iPad或本地虚拟机),为此,咱们能够把localhost换成0.0.0.0,让PHP Web服务器监听全部接口:数据库

php -S 0.0.0.0:8000

要想中止Web服务器,能够关闭终端,也能够按Ctrl+C快捷键。api

二、配置

应用经常须要使用专属的PHP配置文件,尤为是对内存使用、文件上传、分析或对字节码缓存有特殊要求时,必定要单独配置,咱们可使用-c选项,让PHP内置的服务器使用指定的配置文件:浏览器

php -S localhost:8000 -c app/config/php.ini

三、路由脚本

PHP内置服务器明显遗漏了一个功能:与Apache和Nginx不一样,它不支持.htaccess文件,所以,这个服务器很难使用多数流行的PHP框架中常见的前端控制器(单一入口文件index.php,用于转发全部HTTP请求,如今主流PHP框架如Laravel、Symfony都是这样)。缓存

PHP内置服务器使用路由脚本弥补了这一缺憾,处理每一个HTTP请求前,会先执行这个路由脚本,若是结果为false,返回当前HTTP请求中引用的静态资源URI,不然会把路由脚本的执行结果当作HTTP响应主体返回。换句话说,路由脚本的做用其实和.htaccess同样。服务器

路由脚本的用法很简单,只须要在启动PHP内置服务器时指定这个PHP脚本文件的路径便可:

php -S localhost:8000 router.php

关于路由脚本,有兴趣的同窗能够研究下Laravel Valet底层的server.php(https://github.com/laravel/valet/blob/master/server.php)。

四、判断函数

有时候须要知道PHP脚本使用的是PHP内置的Web服务器仍是使用传统的Web服务器,这样方便咱们为不一样服务器设定不一样的响应头。咱们可使用php_sapi_name()函数检查使用的是哪一个PHP Web服务器,若是当前脚本使用的是PHP内置服务器,则该函数返回字符串cli-server:

<?php
if (php_sapi_name() == ‘cli-server') {
    // PHP 内置 Web 服务器
} else {
    // 其余Web服务器
}

五、缺点

PHP内置的Web服务器不能在生成环境使用,只能在本地开发环境中使用,这是由于其相比Apache或Nginx有诸多不足:

  • 性能不佳。一次只能处理一个请求,其余请求会受到阻塞。若是某个进程耗时较长(数据库查询、远程API调用),则整个Web应用会陷入停顿状态。
  • 支持媒体类型较少(这一点PHP 5.5.7之后有较大改进)。
  • 路由脚本仅支持少许的URL重写,更高级则仍是须要Apache或Nginx

六、总结

  • 当前目录做为Root Document只须要这条命令便可:
php -S localhost:3300
  • 也能够指定其它路径
php -S localhost:3300 -t /path/to/root
  • 还能够指定路由
php -S localhost:3300 router.php

七、若是咱们用来测试

咱们用来测来,只须要访问 localhost 便可

php -S localhost:80 -t D:\phpStudy\WWW\项目目录
相关文章
相关标签/搜索