在很多时候,我们需要简单的运行一个小 demo 来验证一些代码或者轮子是否可用,是否可以运行起来,但是去配 nginx 或者 apache 都很麻烦,其实,PHP CLI 已经提供了一个简单的测试服务器,我们直接就可以运行起来进行简单的一些测试工作。

直接启动一个内置服务器

php -S localhost:8081

直接使用 -S 命令选项,然后指定地址及端口号,我们就可以运行起来一个 PHP 内置的简易WEB服务器。默认情况下,这个地址会找当前目录下的 index.php 或 index.html 文件。当我们在浏览器输入指定的文件时,就是访问指定的文件,如果都没有找到会正常的返回404错误。

而控制台会输出当前服务器的访问情况,如下图所示:

这个内置服务器和用 nginx 等服务器搭起来的应用服务器本质上没有太大的区别,包括 $_SERVER 之类的内容都可以正常获取到,也可以正常使用 include 等功能加载其他文件,也就是说这个内置WEB服务器运行一些框架也是没有问题的。它是可以完全满足我们的测试要求的。但是需要注意的是,这个内置WEB服务器不能用于生产环境。毕竟它的功能还是太简单,不是一个生产配备的高规格服务器应用。

指定内置服务器的运行目录

我们也可以在任何目录去运行指定目录的php代码,只需要再增加一个 -t 选项来指明要运行起服务器的根目录即可。

php -S localhost:8081 -t dev-blog/php/202004/source

这样我们就可以运行起来一个以 dev-blog/php/202004/source 目录为根目录的测试环境服务器。

使用路由脚本

php -S localhost:8081 PHP的内置WEB服务器.php

如果我们给当前服务器直接指定了一个PHP文件,那么直接打开链接就会访问的是这个文件的内容,而不是去找 index.php 之类的文件。即使我们继续给 URL 后台增加其他路径或者其他文件名,它依然会打开的是这个文件,也就是说,我们启动了一个单文件入口的应用服务器程序。就像各种框架的 index.php 文件一样,比如我们利用这个文件做一个简单的路由分发测试:

$routePages = [
'/testRoute2.php',
'/route/testRoute1.php'
]; if(in_array($_SERVER['REQUEST_URI'], $routePages)){
include __DIR__ . $_SERVER['REQUEST_URI'];
}else{
print_r($_SERVER);
}
// route/testRoute1.php
echo "Hello Route1!"; // testRoute2.php
echo "Hello Route2!";

两个测试文件只是简单的输出了一段文字用于区别分别加载了两个文件。上述代码的意思是我们访问定义好的两个路由路径时,就会加载对应的文件,访问其他路径则会打印当前服务器的 $_SERVER 信息。

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202004/source/PHP%E7%9A%84%E5%86%85%E7%BD%AEWEB%E6%9C%8D%E5%8A%A1%E5%99%A8.php

参考文档:

https://www.php.net/manual/zh/features.commandline.webserver.php

PHP的内置WEB服务器的更多相关文章

  1. 《Python高效开发实战》实战演练——内置Web服务器4

    <Python高效开发实战>实战演练——开发Django站点1 <Python高效开发实战>实战演练——建立应用2 <Python高效开发实战>实战演练——基本视图 ...

  2. PHP 5.4 内置 web 服务器

    之前 OSC 翻译了一篇文章:在 Windows 上使用 PHP 5.4 内置的 Web 服务器 下面这篇文章来自外刊IT评论翻译的在 Linux 下使用 PHP 5.4 内置 Web 服务器 PHP ...

  3. PHP -S命令 PHP内置web服务器

    手册详细介绍 : http://www.php.net/manual/zh/features.commandline.webserver.php 适合本地开发  php 5.4.0起 这个内置的Web ...

  4. 下载PHPDroid: 基于WebView和PHP内置HTTP服务器开发Android应用

    基于Android上的PHP(比如我打包的PHPDroid),寥寥几行PHP代码,就能实现一个支持无线局域网用浏览器访问的Android手机的Shell,用于执行命令和PHP代码.       个人在 ...

  5. Spark2.1.0——内置Web框架详解

    Spark2.1.0——内置Web框架详解 任何系统都需要提供监控功能,否则在运行期间发生一些异常时,我们将会束手无策.也许有人说,可以增加日志来解决这个问题.日志只能解决你的程序逻辑在运行期的监控, ...

  6. Python内置的服务器的使用

    cd 到某一文件 Python内置的服务器: E:\myObject\office\netObject\new-gcms> python -m SimpleHTTPServer 8888 如果是 ...

  7. php内置web server

    今天刚开始正式学习PHP(之前有一点了解),推荐学习的网站是w3school.一开始不知道tomcat服务器不支持PHP脚本,直接把.php文件放到tomcat里面去运行,结果嵌入的php代码段没有什 ...

  8. PHP内置Web Server探究(一)启动Cli_Server

    自PHP5.4之后 PHP内置了一个Web 服务器(cli_server),类似于Python的内置server一样,方便我们开发阶段的调试 主要使用场景: 1,没有搭建nginx或apache等第三 ...

  9. 内置Web Server

    在终端输入命令:php -S localhost:8000 -t xxx(某个目录或文件) 这个内置的Web服务器主要用于本地开发使用,不可用于线上产品环境. URI请求会被发送到PHP所在的的工作目 ...

随机推荐

  1. 如何发送一个http请求—apipost

    API界面功能布局 API请求参数 Header 参数 你可以设置或者导入 Header 参数,cookie也在Header进行设置 Query 参数 Query 支持构造URL参数,同时支持 RES ...

  2. HTML5(十二)——一文读懂 WebSocket 原理

    一.WebSocket 由来 WebSocket 是一个持久化的协议,通过第一次 HTTP Request 建立连接之后,再把通信协议升级成 websocket,保持连接状态,后续的数据交换不需要再重 ...

  3. JVM钩子函数的使用

    一.问题引入 背景 在编写一个需要持续在后台运行的程序的时候遇到了这样的场景:我的程序在主函数中创建了一个线程池周期性地执行任务,我希望主线程和线程池都持续运行,但如果收到外部的关闭信号时,主线程和线 ...

  4. DVWA(二): Brute Force(全等级暴力破解)

    tags: DVWA Brute Force Burp Suite Firefox windows2003 暴力破解基本利用密码字典使用穷举法对于所有的账号密码组合全排列猜解出正确的组合. LEVEL ...

  5. SQL 练习27

    查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列 SELECT cid,AVG(score) 平均成绩 from sc GROUP BY cid ORDER BY A ...

  6. Sublime Text3 显示左侧的目录树

    file->open folder选择一个文件夹,打开一个新窗口把原来的关掉 View->Sise Bar->Hide Side Bar就可以了

  7. docker搭建mysql集群

    目录 一.集群方案 二.安装PXC集群 三.Haproxy负载均衡 四.访问测试 五.节点宕机或重启 六.参考 一.集群方案 1.Replication 速度快,但仅能保证弱一致性,适用于保存价值不高 ...

  8. ES6——简单的多态

    简单的多态 多态: 1.同一个接口,在不同情况下做不一样的事情:相同的接口,不同的表现: 2.接口本身只是一组定义,实现都是子类里面:需要子类去实现的方法(子类只需重写与父类同名的方法,即可达到覆盖的 ...

  9. ES6扩展——正则扩展(u、y修饰符)

    //下面三行代码效果一样 //全局匹配开头为a的 const regexp1 = /^a/g; const regexp2 = new RegExp('a','g'); const regexp3 = ...

  10. ubuntu软件工具推荐

    时间:2019-04-11 记录:PangYuaner 标题:串口调试利器--Minicom配置及使用详解 地址:https://www.cnblogs.com/wonux/p/5897127.htm ...