在很多时候,我们需要简单的运行一个小 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. etcd学习(6)-etcd实现raft源码解读

    etcd中raft实现源码解读 前言 raft实现 看下etcd中的raftexample newRaftNode startRaft serveChannels 领导者选举 启动并初始化node节点 ...

  2. Upfile的几种常见姿势

    记录一下文件上传的常见姿势,更全面的可以做upload-labs. 实验环境:win2003 phpstudy 实验平台:upfile 一.准备上传的一句话木马 eval函数将接受的字符串当做代码执行 ...

  3. 基于kail的docker下安装sqli-labs

    后面的关卡涉及到转码问题,比如空格,在Windows中会受到限制,比如24关的文件重命名问题,所以在这记录下在docker下安装sqli-labs,在linux下运行就不会受到限制. 参考链接:htt ...

  4. SQL 练习12

    查询和" 01 "号的同学学习的课程 完全相同的其他同学的信息 分析 如果某同学学的某一个课程和01同学所学的课程有对应,那么子查询返回false. 如果没有对应,子查询返回tru ...

  5. deepin设置jdk全局变量

    sudo vim /etc/bash.bashrc 在文件最后边添加 JAVA_HOME=jdk地址CLASSPATH=.:$JAVA_HOME/bin.tools.jarPATH=$JAVA_HOM ...

  6. mysql悲观锁和乐观锁

    悲观锁 查出来的数据必须是根据索引查出来的,不然锁表. # 语法 select * from table where id = 1 for update; 乐观锁 使用一个标识 cas 比较后替换 如 ...

  7. 【springboot】集成swagger

    1.简介 本章介绍 SpringBoot2.1.9 集成 Swagger2 生成在线的API接口文档. 2. pom依赖: 通过对比了swagger的几个版本,发现还是2.6.1问题最少 <!- ...

  8. C# 计时器用法(DispatcherTimer、System.Timers.Timer、System.Threading.Timer)

    首先,我觉得三种计时器最大的区别是:DispatcherTimer触发的内容会直接转到主线程去执行(耗时操作会卡住主线程),另外两个则是在副线程执行,如果需要修改界面,则需要手动转到主线程. Disp ...

  9. java 日期格式化-- SimpleDateFormat 的使用。字符串转日期,日期转字符串

    日期和时间格式由 日期和时间模式字符串 指定.在 日期和时间模式字符串 中,未加引号的字母 'A' 到 'Z' 和 'a' 到 'z' 被解释为模式字母,用来表示日期或时间字符串元素.文本可以使用单引 ...

  10. 算法入门 - 链表的实现及应用(Java版本)

    之前我们学习了动态数组,虽然比原始数组的功能强大了不少,但还不是完全纯动态的(基于静态数组实现的).这回要讲的链表则是正儿八经的动态结构,是一种非常灵活的数据结构. 链表的基本结构 链表由一系列单一的 ...