HTTP接口

新增自V0.0.3

接口类文件为: Api/Http.php

Http接口时指使用应用层Http协议来解析数据流的接口类文件。

使用Http接口, 只需要实例化Api\Http.php即可。

使用HTTP协议, 可以在简单场景下替代Nginx/Apache, 使MeepoPS成为一个WebServer。比如一些软件, 都是自带Web管理后台, 如队列软件RabbitMQ, 部署在10.10.10.10, 那么默认访问10.10.10.10:15672就可以进入RabbitMQ自带的Web管理后台来做一些增删改查, 这时RabbitMQ自带的WebServer, 并非由Apache/Nginx提供。

啰嗦了一串, 就是说有的时候, 业务场景简单, 比如自行开发了MeepoPS的管理后台, 那么让MeepoPS新启动一个示例,作为WebServer,监听80端口。如若不然,还要装个Nginx/Apache,太麻烦了。

启动使用HTTP协议的MeepoPS, 开发应用时和普通WebServer的感觉99.99%一致。

与普通WebServer开发时的不同

唯三的不同就是SESSION功能, header()函数, setcookie()函数。

平常,我们使用了header()设置了一个头,然后PHP告诉Nginx,你给我设置个头。

但是,MeepoPS是更加底层的,基于TCP协议所开发,头信息需要MeepoPS自行拼接后直接告诉客户端的浏览器。所以,如果您直接调用PHP自带的header()函数设置的头,MeepoPS无法感知,客户端的浏览器也就接收不到您设置的头信息了。

cookie和seesion同理。

SESSION

因为PHP的Session处理, 在使用session_start()时会自动分配SESSION ID. 但是MeepoPS是常驻内存的PHP, 这就导致所有人访问时都只会用同一个SESSION ID。即使session_set_save_handler等自定义SESSION的函数也不可以。

因此, 只能在使用SESSION时, 各位同学不能再使用session_系列函数。

另外,除了Session Name外, 其余配置都使用php.ini中的"session.*"的配置项。

  • 开启SESSION(类似session_start()): \MeepoPS\Api\Http::sessionStart();
  • 保存SESSION(自动执行的, 不需要手动, 类似session_write_close()): \MeepoPS\Api\Http::sessionWrite();
  • 获取SESSION ID(类似session_id()): \MeepoPS\Api\Http::sessionId();
  • 销毁SESSION(类似session_destroy()): \MeepoPS\Api\Http::sessionDestroy();

如果您需要SESSION共享, 请根据需要自行修改MeepoPS/Library/Session.php

SESSION的GC在调用\MeepoPS\Api\Http::sessionStart();时自动执行, 触发机率和SESSION有效期请参考php.ini中的session.gc_probability, session.gc_divisor, session.gc_maxlifetime。

header()函数

MeepoPS的HTTP协议中, 不支持直接使用header()函数来设置头, 设置头信息时, 请使用\MeepoPS\Api\Http::setHeader();. 参数个数和含义与header()完全一致。

setcookie()函数

MeepoPS的HTTP协议中, 不支持直接使用setcookie()函数来设置Cookie, 设置Cookie信息时, 请使用\MeepoPS\Api\Http::setCookie();. 参数个数和含义与setcookie()完全一致。

使用方法

使用时调用Http的接口即可。

$telnet = new \MeepoPS\Api\Http('0.0.0.0', '19910');

特殊属性

无, 与接口中所阐述的通用属性完全一致。

特殊方法

接口中所阐述的通用方法外, HTTP接口所独有的:

设置HTTP头信息\MeepoPS\Api\Http::setHeader()

  • 名称: \MeepoPS\Api\Http::setHeader();
  • 参数: 参数个数和含义与header()完全一致。
  • 返回: bool
  • 描述: MeepoPS的HTTP协议中, 不支持直接使用header()函数来设置头, 设置头信息时, 请使用\MeepoPS\Api\Http::setHeader();
示例:

这是我们自行编写的代码: demo.php

<?php
\MeepoPS\Api\Http::setHeader('Location: index.php');
//或者
\MeepoPS\Api\Http::setHeader('HTTP/1.1 400 Bad Request');

删除指定的HTTP头\MeepoPS\Api\Http::delHttpHeader($name)

  • 名称: \MeepoPS\Api\Http::delHttpHeader();
  • 参数: 参数$name是需要删除的头的名称。
  • 返回: void
  • 描述: 删除指定的HTTP头。
示例:

这是我们自行编写的代码: demo.php

<?php
\MeepoPS\Api\Http::delHttpHeader('TEST');

设置HTTP Cookie信息\MeepoPS\Api\Http::setCookie()

  • 名称: \MeepoPS\Api\Http::setCookie();
  • 参数: 参数个数和含义与setcookie()完全一致
  • 返回: bool
  • 描述: MeepoPS的HTTP协议中, 不支持直接使用setcookie()函数来设置Cookie, 设置Cookie信息时, 请使用\MeepoPS\Api\Http::setCookie();
示例:

这是我们自行编写的代码: demo.php

<?php
\MeepoPS\Api\Http::setCookie('USERNAME', 'meepops');
\MeepoPS\Api\Http::setCookie('SEX', 'male');

开启SESSION \MeepoPS\Api\Http::sessionStart()

  • 名称: \MeepoPS\Api\Http::sessionStart();
  • 参数: 无。
  • 返回: bool
  • 描述: 开启SESSION, 类似session_start()。
示例:

这是我们自行编写的代码: demo.php

<?php
//开启SESSION
\MeepoPS\Api\Http::sessionStart()

保存SESSION \MeepoPS\Api\Http::sessionWrite()

  • 名称: \MeepoPS\Api\Http::sessionWrite();
  • 参数: 无。
  • 返回: bool
  • 描述: 保存SESSION, 本方法自动执行, 通常不需要您手动, 类似session_write_close(), 默认在脚本执行结束时触发。
示例:

这是我们自行编写的代码: demo.php

<?php
//开启SESSION
\MeepoPS\Api\Http::sessionStart()
//立即保存SESSION
\MeepoPS\Api\Http::sessionWrite()

获取SESSION ID \MeepoPS\Api\Http::sessionId()

  • 名称: \MeepoPS\Api\Http::sessionId();
  • 参数: 无。
  • 返回: bool
  • 描述: 获取SESSION ID, 类似session_id()。
示例:

这是我们自行编写的代码: demo.php

<?php
//开启SESSION
\MeepoPS\Api\Http::sessionStart()
//获取SESSION ID
$sessionId = \MeepoPS\Api\Http::sessionId()

销毁SESSION \MeepoPS\Api\Http::sessionDestroy()

  • 名称: \MeepoPS\Api\Http::sessionDestroy();
  • 参数: 无。
  • 返回: bool
  • 描述: 销毁SESSION, 类似session_destroy()。
示例:

这是我们自行编写的代码: demo.php

<?php
//开启SESSION
\MeepoPS\Api\Http::sessionStart()
//销毁SESSION
\MeepoPS\Api\Http::sessionDestroy()

设置HTTP错误页 \MeepoPS\Api\Http::setErrorPage()

  • 名称: \MeepoPS\Api\Http::setErrorPage();
  • 参数1: $httpCode。HTTP状态码.
  • 参数2: $description。加载页面的文件路劲, 或者描述。
  • 返回: bool
  • 描述: 设置HTTP错误页, 指定HTTP状态码, 当此HTTP状态码时, 加载指定的页面, 或者在MeepoPS的默认样式中显示描述。
示例:

这是我们自行编写的代码: demo.php

<?php
//设置错误页
//404, 设置一个专门的页面来展示
$http->setErrorPage('404', __DIR__ . '/Test/Web/404.html');
//403, 使用默认样式(其实就是居中了一句话), 自定义错误描述
$http->setErrorPage('403', '您没有被授权访问!');

设置域名和路径: setDocument($domain, $path)

  • 名称: setDocument();
  • 参数1: $domain。域名(包含端口, 80可省略)
  • 参数2: $path。代码根目录。
  • 返回: bool
  • 描述: 新增自V0.0.5。设置不同域名的不同代码根目录。
示例:

这是我们自行编写的代码: demo.php

<?php
$http = new \MeepoPS\Api\Http('0.0.0.0', '8080');
$http->setDocument('localhost:8080', '/var/www/MeepoPS/Example/Web_Server/Web');

退出业务程序: end($msg='')

  • 名称: end();
  • 参数1: $msg。退出时的异常消息
  • 返回: void
  • 描述: 新增自V0.0.6。使程序不在向下执行, 退出业务逻辑返回到MeepoPS, 功能和普通Web开发的Exit一样, 就像平时exit()后退出PHP, 交接给Nginx继续执行。可是在MeepoPS中, 不能使用exit()。
示例:

这是我们自行编写的代码: demo.php

<?php
\MeepoPS\Api\Http::end('系统错误, 请稍后再试');

了解HTTP协议是什么, 这里是 传送门

results matching ""

    No results matching ""