Download the PHP package xiaosongshu/fasterphpweb without Composer

On this page you can find all versions of the php package xiaosongshu/fasterphpweb. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.

FAQ

After the download, you have to make one include require_once('vendor/autoload.php');. After that you have to import the classes with use statements.

Example:
If you use only one package a project is not needed. But if you use more then one package, without a project it is not possible to import the classes with use statements.

In general, it is recommended to use always a project to download your libraries. In an application normally there is more than one library needed.
Some PHP packages are not free to download and because of that hosted in private repositories. In this case some credentials are needed to access such packages. Please use the auth.json textarea to insert credentials, if a package is coming from a private repository. You can look here for more information.

  • Some hosting areas are not accessible by a terminal or SSH. Then it is not possible to use Composer.
  • To use Composer is sometimes complicated. Especially for beginners.
  • Composer needs much resources. Sometimes they are not available on a simple webspace.
  • If you are using private repositories you don't need to share your credentials. You can set up everything on our site and then you provide a simple download link to your team member.
  • Simplify your Composer build process. Use our own command line tool to download the vendor folder as binary. This makes your build process faster and you don't need to expose your credentials for private repositories.
Please rate this library. Is it a good library?

Informations about the package fasterphpweb

FASTERPHPWEB

一个使用socket编写的PHP常驻内存框架,本项目是想到哪里写到哪里,里面有记录了笔记。

框架简介

        本框架旨在让用户了解和学习PHP实现web运行原理,涉及到了相对较多的底层基础知识。

        fasterphpweb是一款常驻内存的轻量级的php框架,遵循常用的mvc架构。

        本框架对timer,redis,mysql,rabbitmq,kafka,websocket,elasticsearch,nacos,sqlite 进行了简单封装,并且保留了部分代码实例。

        本框架提供基本的http服务,可支持api接口或者web网页。

        本框架提供基本的websocket服务,可支持长链接,适用于聊天等场景。

        本框架提供rtmp流媒体服务,纯PHP开发,不需要其他依赖。支持rtmp推流,rtmp拉流和flv拉流。适用于直播场景。

        本框架不对外提供服务了,仅作为作者个人学习项目,因为里面添加太多的笔记了。而且代码发生了很多变化,也添加很多第三方的插件,不能算纯原创了。

项目安装

启动项目

linux环境

windows环境

目录结构

|-- app
    |-- controller               <控制层>
        |-- index               <index业务模块>
        |-- ...                 <其他业务模块>
    |-- facade                  <门面模块>
    |-- queue                  <队列任务模块>
    |-- rabbitmq                  <rabbitmq队列>
    |-- model               <模型层>
    |-- command               <自定义命令行>
|-- config                  <配置项>
    |--app.php              <项目配置>
    |--database.php              <数据库配置>
    |--redis.php              <缓存配置>
    |--server.php              <http服务配置>
    |--timer.php              <定时任务配置>
|-- mysql                 <mysql文件,非必须>
    ...
|-- public                  <公共文件>
|-- root                <系统目录,建议不要轻易改动>
    ...                     
|-- vendor                  <外部扩展包>
|-- view                     <视图层>
        ...             
|-- composer.json              <项目依赖>
|-- README.md                  <项目说明文件>
|-- start.php                  <服务启动文件>
|-- songshu                    <服务启动文件>

快速开始

1,导入mysql文件到你的数据库或者自己创建
2,进入项目根目录:cd /your_project_root_path
3,调试模式: php start.php start
4,守护进程模式: php start.php start -d
5,重启项目: php start.php restart
6,停止项目: php start.php stop
7,项目默认端口为:8000, 你可以自行修改
8,项目访问地址:localhost://127.0.0.1:8000
9,windows默认只开启一个http服务
10,windows若需要测试队列,请单独开启一个窗口执行 php start.php queue ,监听队列
11,windows不支持定时器
12,本项目支持普通的redis的list队列,同时支持rabbitmq队列,如果需要使用延时队列,需要安装插件
13,在windows上默认使用select的io多路复用模型,在linux上默认使用epoll的io多路复用模型
14,但是在linux系统上,如果使用开启后台运行,加入不支持epoll模型,则使用的多进程同步阻塞io模型。
15,系统环境搭建,默认需要php,mysql,redis,而rabbitmq不是必须的。你可以自己搭建所需要的环境,也可以 使用本项目下面的docker配置。
16,假设你使用docker配置,首先要安装docker,然后执行命令:docker-compose up -d 启动环境。注意修改 docker-compose.yaml 里面的目录映射,端口映射。

注意

1,原则上本项目只依赖socket,mysqli,redis扩展和pcntl系列函数,如需要第三方扩展,请自行安装。
2,因为是常驻内存,所以每一次修改了php代码后需要重启项目。
3,start.php为项目启动源码,root目录为运行源码,除非你已经完全明白代码意图,否则不要轻易修改代码。
4,所有的控制器方法都必须返回一个字符串,否则连接一直占用进程,超时后系统自动断开连接。
5,业务代码不要使用sleep,exit这两个方法。否则导致整个进程阻塞或者中断。

联系开发者

[email protected]

项目地址

https://github.com/2723659854/fasterphpweb

项目文档

项目基本配置

控制层

请求

获取get参数

获取post参数

获取所有请求参数

获取原始请求包体

获取header头部信息

获取原始querystring

获取cookie

响应

设置cookie

返回视图

返回数据

重定向

下载文件

设置响应头

设置响应状态码

模板渲染


默认支持html文件,变量使用花括号表示{},暂不支持for,foreach,if等复杂模板运算

模型层

默认使用mysql数据库

数据库配置

模型的定义

模型的使用

数据库事务的使用

提示:无论在使用何种框架操作事务的时候,尽量缩小事务的范围,数据库操作要和开启事务,提交紧紧的贴在一起,中间尽量不要有其他的 业务逻辑代码,避免锁表,避免多个事务交叉锁死。

缓存的使用

项目默认支持redis缓存

缓存的配置

缓存的使用

路由

配置文件

注解路由

中间件

创建中间件

中间件内容如下:

使用中间件

1,路由

2,注解

依赖自动注入

本框架提供依赖自动注入,不需要每一次都手动实例化依赖。使用关键字@Inject,系统根据关键字自动注入依赖,详见下面的方法。

这里使用了注解,系统自动注入依赖App\Service\HahaService,不需要手动注入(使用__construct()方法注入依赖)。

定时器

只能在linux系统中使用定时器,或者使用docker环境。

添加定时任务

redis 队列

redis连接配置

创建消费者

生成的消费者内容如下:

投递消息

rabbitmq消息队列

rabbitmq连接配置

创建消费者类

生成的消费者内容如下:

开启消费者任务

投递消息

若不满足需求,可以使用插件

elasticsearch 搜索

elasticsearch 支持的方法

若不满足需求,可以使用插件

一些例子:

你可能需要一键搭建elasticsearch服务,仅供参考:

elasticsearch属于内存数据库,启动服务后会占用很大的系统内存(redis和sqlite这两个和elasticsearch不是一个数量级),导致服务器卡顿,影响其他服务正常运行,所以将elasticsearch独立搭建服务。 正式生成环境建议单独部署一台服务器用于部署elasticsearch,如果需要多个节点,那就需要多部署几台服务器。
如果有特殊的分词需求,建议安装扩展ik分词器,参照Docker中的elasticsearch安装ik分词器

加入容器

解放双手,不需要每一次都去实例化需要调用的对象。使用容器简单方便。

G方法和M方法的区别是:
G方法只会实例化一次对象,然后存储在内存中,下一次调用直接从内存中获取。
而M方法每一次都是重新实例化一个新的对象。

自定义命令

创建

生成的自定义命令类如下:

sqlite数据库支持

创建模型

或者

模型内容如下

用法

nacos服务

安装客户端

nacos提供的方法

可以根据自己的需求,给项目添加配置检测,微服务管理。
配置检测:创建一个常驻内存进程,每隔30秒,读取一次nacos服务器上的配置,配置发生了变化,则修改配置,并重启服务。
微服务管理:创建一个常驻内存进程,进程启动的时候注册服务。

nacos配置管理

配置nacos服务器,以及开启配置管理

而项目从nacos服务读取的配置会保存到项目根目录/config.yaml文件。文件内容如下,仅作为实例:

你的项目其他的配置文件可以通过读取yaml配置, 例如config/database.php,文件内容如下:

当nacos上的配置发生变化后,会自动拉取最新的配置,并重启项目
你可以使用NacosConfigManager::sync()发布你的配置,该命令会把你的config.yaml的内容发布到nacos服务器上去。
你可能需要一键搭建nacos服务,仅供参考:

nacos这种负责管理配置和服务,安全性要求很高,一般不会销毁和重建,故没有将nacos服务绑定到基础容器里面。

ws服务(websocket)

创建ws服务

自动生成的ws服务类如下

开启服务 config/ws.php

为方便测试,可以仅开启某一个ws服务,

或者

需注意命名空间大小写。须严格匹配。

javaScript客户端测试代码

php版本的websocket客户端

以下是客户端使用示例。
首次使用需要初始化,调用setUp()设置服务端ip和port。
回调函数onMessage()方法负责处理用户的业务逻辑。
start()方法是阻塞函数,负责监听服务端消息。
send()函数负责发送消息,可以在任意地方调用。
get()方法负责读取一条消息,可以在任意地方调用。

流媒体服务rtmp

流媒体服务已经独立成为一个单独的项目了,地址是 https://github.com/2723659854/rtmp_server 。 你可以单独安装流媒体服务,命令如下:

流媒体服务配置 config/rtmp.php

开启流媒体服务

如果config/rtmp.php里面配置了'enable'=>true,在守护模式下rtmp会跟随项目一起启动。
直播推流地址:rtmp://127.0.0.1:1935/a/b
rtmp 拉流地址:rtmp://127.0.0.1:1935/a/b
http-flv播放地址: http://127.0.0.1:18080/a/b.flv
ws-flv播放地址: ws://127.0.0.1:18080/a/b.flv
推流工具 :obs,ffmpeg
拉流工具 :vlc播放器,web拉流
本框架提供web拉流,详见示例:http://localhost:8000/video/play
播放页面如下:

Http客户端

支持 http/https协议

使用方法如下

注意:在使用http异步请求客户端的时候 ,不要在成功回调和失败回调函数中抛出任何异常,如果需要抛出异常,一定要手动捕获。因为 在回调里面抛出异常,是没有其他服务来接管这个异常的,可能会导致进程摆烂。虽然本系统已经做了容错进行兜底,但是还是强烈建议,如果 一定要抛出异常,请自行捕获并处理异常。
若该http客户端不满足你的需求,你可以使用第三方http客户端,比如Guzzle。或者使用curl函数自己构建请求。

发送邮件

开启smtp服务 并获取授权码

登录到你的邮箱,设置开启smtp服务。一般在邮箱的设置,账户,smtp里面。

发送邮件

也可以修改自定义命令文件app/command/Email.php 文件的配置,测试发送邮件。

windows环境支持

如果需要在windows正式环境上线运行项目,执行php windows.php,如果需要关闭服务php windows.php stop即可。

命令行工具

创建自定义命令行: php start.php make:command Test
创建控制器: php start.php make:controller a/b/c
创建mysql模型: php start.php make:model index/user
创建sqlite模型: php start.php make:sqlite Demo
创建中间件: php start.php make:middleware Auth
创建redis消费者:php start.php make:queue Demo
创建rabbitmq消费者:php start.php make:rabbitmq DemoConsumer
项目打包:php -d phar.readonly=0 songshu make:phar

项目打包部署

为了方便部署服务,可以将整个项目打包上传到服务器,不再需要安装其它扩展,我们提供了一键 打包服务。项目将会被打包成phar格式文件,这个需要修改你的php.ini配置phar.readonly = Off, 当然了,如果觉得麻烦,那就直接在命令当中设置临时的phar.readonly = Off也是可以的。 打包命令:

打包后的项目,服务管理和原来一样的,只是将start.php或者songshu 换成了 songshu.phar 文件即可,在songshu.phar所在目录执行

编译二进制文件

仅支持linux运行环境

项目可以在任意平台打包编译,但是打包编译后的二进制文件仅支持linux环境,不兼容windows,mac。你也可以下载对应平台的PHP静态文件生成windows或者mac的可执行文件。
有可能你不想安装php环境,想直接运行项目,那么我们也提供了一键打包成二进制文件的方法,打包命令

打包完成后直接上传至服务器,进入到项目根目录,执行命令管理服务

项目打包成exe (windows)

本项目可以打包编译成安装包,方便分发给其他用户安装使用。需要使用到第三方的服务实现,这已经超过了本项目的范围,有兴趣的coder可以自行操作。

日志

系统默认只记录运行的错误日志,按日记录,存放位置在 runtime/log/Y-m-d.log。提供记录日志函数dump_error(Exception|RuntimeException $exception), 若不满足需求,可以自己编写一个日志记录类。

其他

1,现在的网站都已经发展到前后端分离了,默认是无状态请求,cookie几乎没有用了。 所以没有编写cookie和session操作类了。 你可以使用token来识别用户,而不是cookie或者session。
2, 如果你在项目的根目录创建了自定义的目录,那么建议你使用require_once 方法手动 加载这些文件,当然你也可以使用composer的自动加载配置,编辑项目根目录的composer.json 文件,编辑字段psr4规范, 里面添加你需要加载的目录的名称,当然了,你的自定义目录必须符合Psr4规范,编辑完成后保存composer.json文件。最后执行 composer dump-autoload -o 命令,让composer刷新文件和对象的映射关系。做完以上的操作过后,你就可以使用use引入 你需要使用的类了。

补充

这种,在name两边加上英文波浪线,就是中横线 name

算法

算法部分都放在math.php文件里面,可以在根目录执行php math.php命令运行算法。有兴趣的朋友可以看一下。

动画

php在cli模式下,使用纯php开发动画,动画名称为《雪飘人间》,你可以在项目根目录下执行命令php snow.php。你可以按ctrl + c关闭动画。
本项目下的动画有:

动画已经单独集成为插件了,安装命令如下:

下载地址: https://github.com/2723659854/animation

列 1 列 2 列 3
内容 1 内容 2 内容 3

待办事项

1,支持多线程,在不使用swoole的情况下,使用多线程
2,支持在同一个进程内,可以将任务分解成多个子任务,每一个子任务独占一个线程,多个任务同时进行。


All versions of fasterphpweb with dependencies

PHP Build Version
Package Version
Requires php Version >=8.1
php-amqplib/php-amqplib Version 3.2.*
elasticsearch/elasticsearch Version 7.17.*
xiaosongshu/colorword Version dev-master
xiaosongshu/progress Version dev-master
xiaosongshu/table Version dev-master
phpseclib/phpseclib Version *
jeremeamia/superclosure Version ^2.4@dev
nikic/fast-route Version ^2.0@dev
ext-pcntl Version *
ext-mbstring Version *
ext-posix Version *
ext-sockets Version *
ext-mysqli Version *
evenement/evenement Version ^3.0
apix/log Version ^1.2
react/promise Version ^2.9
xiaosongshu/nacos Version dev-master
symfony/yaml Version 5.4.*
psr/container Version ^1.1.1
php-di/php-di Version ^6
doctrine/annotations Version ^1.14
xiaosongshu/mail Version dev-master
ext-gd Version *
ext-memcache Version *
nikic/php-parser Version ^4.19
ext-zlib Version *
haozi-team/chatgpt-php Version ^2.1
ext-readline Version *
react/event-loop Version ^3@dev
nmred/kafka-php Version 0.2.*
monolog/monolog Version ^2.9
Composer command for our command line client (download client) This client runs in each environment. You don't need a specific PHP version etc. The first 20 API calls are free. Standard composer command

The package xiaosongshu/fasterphpweb contains the following files

Loading the files please wait ....