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

1、启动

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

php -S localhost:8000

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

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

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

有时候我们需要在同一局域网中的另一台设备中访问这个服务器(例如iPad或本地虚拟机),为此,我们可以把localhost换成0.0.0.0,让PHP Web服务器监听所有接口:

php -S 0.0.0.0:8000

要想停止Web服务器,可以关闭终端,也可以按Ctrl+C快捷键。

2、配置

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

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

3、路由脚本

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)。

4、判断函数

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

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

5、缺点

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

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

转自:http://laravelacademy.org/post/4422.html

使用简单总结:


PHP在安装的时候会内置了服务器的功能,我们在使用的过程中如果只是调试,可以选择启动PHP内置的服务器,

下面是windows下PHP内置服务器的启动步骤:

1、将php的D:\phpStudy\php54( 即php.exe所在目录 )添加到环境变量path中。

2、打开dos命令窗口输入( 其中D:\phpStudy\WWW\aaa为项目目录 )
php -S localhost:80 -t D:\phpStudy\WWW\aaa

3、服务开启成功( 运行期间该窗口不能关闭 )
C:\Users\DELL>php -S localhost:80 -t D:\phpStudy\WWW\aaa
PHP 5.4.26 Development Server started at Wed Aug 26 11:45:20 2015
Listening on http://localhost:80
Document root is D:\phpStudy\WWW\aaa
Press Ctrl-C to quit.

或者:

先将当前目录切换到项目根目录,然后再输入命令php -S localhost:80 即可

(比如,项目的根目录在public)D:\phpStudy\WWW\aaa\public>php -S localhost:80

4、使用localhost访问即可

转自:http://blog.csdn.net/jerry_dui/article/details/49367039

php 内置的 web 服务器相关推荐

  1. PHP内置的Web Server的使用

    自PHP5.4之后 PHP内置了一个Web 服务器. 让我们来看看php Web Server的简单使用: 启动php Web Server php -S localhost:8080 通过 php ...

  2. 微信拦截URL,使用自己内置的web组件打开URL,为什么没人声讨?

    微信这个软件拦截URL,使用自己内置的web组件打开URL,为什么没人声讨? 按照软件界的规矩,在用户点击URL的时候,微信应该是调用系统的默认浏览器,来打开URL,而它确不要脸的自己打开. 微软当年 ...

  3. Android 内置RTSP/RTMP服务器,实现局域网内视频推流与播放

    1. 背景 工作中有一个需求,在同一个局域网内, 需要将Android平板端(车机)上的摄像头上的画面,实时传输到手机上进行播放. 对于这个需求,我们想到了用RTSP/RTMP进行推流,然后在手机端拉 ...

  4. 外网访问内网localhost web服务器

    在内网/局域网部署的web服务,只能在本地局域网内访问.要想在外网环境下也能够访问到,可以通过cpolar内网穿透来实现,不需要公网IP,也不需要进入到路由器,还不限制流量,支持http/https/ ...

  5. amazeui中内置的web组件有哪些且如何用

    amazeui中内置的web组件有哪些且如何用 一.总结 一句话总结: 1.组件还是jquery.js+amazeui.js,和插件一样,准确的说是amazeui.css+jquery.js+amaz ...

  6. 华为服务器系统管理,WEB界面轻松搞定服务器管理--iMana华为服务器内置的Web管理系统...

    伴随计算机技术的发展,中小企业网络核心PC服务器逐渐增加,随之而来服务器安装操作.管理监控问题已经引起网管人员的关注,这一点,业内友商针对用户需求的态度是不同的,IBM安装导航盘是不自带的,用户安装设 ...

  7. 局域网内访问虚拟机 web 服务器

    用 vue 脚手架生成了一个项目做简单测试,简单说一下搭建流程,使用一种即可 详细过程可参考 :https://blog.csdn.net/qq_61541602/article/details/12 ...

  8. 通过动态NAT实现内网访问外网,通过静态NAT实现外网访问内网的WEB服务器(Cisco)

    各个接口以及各IP地址的网络拓扑图: 各个端口以及主机IP,网关按照上述图片配置各个IP等 内网主机pc1根据内网DHCP服务器自动获取IP: 内网路由器命令: router(路由器配置(命令行)): ...

  9. 浏览器内置对象 Web API 规则部分

    B Background Fetch API (en-US) 后台获取可能需要很长时间,如电影,音频文件和软件下载的方法. Background Tasks 幕后任务协作调度 提供了由用户代理决定,在 ...

最新文章

  1. bulk Java提交数据,性能优化 – bulk提交 - ELK Stack 中文指南
  2. 掌握需求过程阅读笔记六
  3. 操作系统知识回顾(5)-内存管理
  4. 大数据营销平台该如何选择
  5. 什么样的人不适合当程序员呢?
  6. Android Hessian 通信
  7. idea如何导出maven项目
  8. 傻傻弄不清楚SAP和ERP?
  9. 电子设计教程53:555定时器工作原理与常见应用
  10. c语言flappy bird编程,C语言实现Flappy Bird小游戏
  11. CSDN 「Markdown」编辑器的优点、不足、使用技巧和新增功能|CSDN编辑器测评
  12. 定制任务栏托盘的dll
  13. 浅谈网页设计的形式美法则
  14. Android 11.0 12.0在系统app安装第三方app弹出 解析安装包出现问题 的解决方案
  15. L2-039 清点代码库 (25 分)(哈希)
  16. 一套完整的Android通用框架
  17. 第四章 账号权限管理
  18. 什么是循环依赖?Spring如何解决循环依赖?
  19. JointJS入门实例01-在JOINTJS元素中使用HTML
  20. 实践报告抽象类java_java抽象类不能实例化实践是检验真理的唯一标准

热门文章

  1. https 证书过期检测
  2. 三相三电平PWM电压型逆变器
  3. JMeter学习-006-JMeter 断言
  4. XML--- XML文档类型定义(DTD)
  5. 相关性检验–Spearman秩相关系数和皮尔森相关系数
  6. 技术干货:通过交换机让HDMI延长器传输500米-深圳徕雨科技
  7. [初学Spring Boot](2):单元测试报错:org.junit.runners.model.InvalidTestClassError:Invalid test class
  8. 【私有git】使用docker搭建gitlab-ce中文社区版服务器
  9. linux是不是在根目录下安装的软件其它用户就可以使用,[转载]Linux下非root用户如何安装软件...
  10. 【Linux】 -- TCP协议 (一)