1 Star 2 Fork 0

zhqing / new-zqphp

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

new-zqphp

介绍

  1. zqphp结合workerman从4.x版本开发。
  2. 支持Workerman Swoole Apache Nginx iis访问
  3. 如要支持Workerman访问,项目内不能使用exit,die函数,可以使用方法come方法代替
  4. PHP版本要求:php-8.0或更高版本

安装

  • composer create-project zqphp/new-zqphp zqphp

入口文件

//$app_path  项目路径
//$default_app 默认应用
__construct($app_path, $default_app = null)
  • Workerman cli 启动文件zqphp
#!/usr/bin/env php
<?php
require __DIR__ . '/vendor/autoload.php';
(new \zqphp\Load(__DIR__ . '/app'))->start();

目录结构

├── app                    应用目录
├── config                 配置目录
│   ├── app.php            应用配置
│   ├── database.php       数据库配置
│   ├── session.php        Session配置
│   ├── view.php           视图配置
│   └── worker.php         workerman配置
│   └── swoole.php         swoole配置
├── public                 静态资源目录
└── zqphp                  启动文件  
  • Apache Nginx iis入口文件
<?php
require __DIR__ . '/../vendor/autoload.php';
(new \zqphp\Load(__DIR__ . '/../app'))->run();

*Apache伪静态(.htaccess)

<IfModule mod_rewrite.c>
Options +FollowSymlinks -Multiviews
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php [QSA,PT,L]
</IfModule>

*Nginx伪静态

if (!-d $request_filename){
set $rule_0 1$rule_0;
}
if (!-f $request_filename){
set $rule_0 2$rule_0;
}
if ($rule_0 = "21"){
rewrite ^/(.*)$ /index.php last;
}

*iis伪静态(web.config)

<?xml version="1.0" encoding="utf-8"?>
<configuration> 
  <system.webServer> 
    <rewrite> 
      <rules> 
        <rule name="index" stopProcessing="true"> 
          <match url="^(.*)$" ignoreCase="false"/>  
          <conditions> 
            <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true"/>  
            <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true"/> 
          </conditions>  
          <action type="Rewrite" url="index.php/{R:1}" appendQueryString="true"/> 
        </rule> 
      </rules> 
    </rewrite> 
  </system.webServer> 
</configuration>

配置文件(config目录)

app.php

<?php
return [
    //默认PHP类名
    'app_sort' => 'index',
    //默认方法名
    'app_method' => 'main',
    //默认方法开关(多级)
    'method_switch' => false,
    //项目内的PHP文件夹,Lib第一层文件不用命名空间,第二层起要加命名空间
    'php_dir' => 'controller',
    // 默认应用
    'default_app' => 'admin',
    // 应用映射
    'app_map' => ['back' => 'admin', 'home'],
    //路由参数分隔符
    'route_parameter' => '_',
    //访问默认支持格式
    'route_format' => ['php', 'html'],
    //对外开放类名加前缀 (可为空)
    'sort_prefix' => '',
    //推荐对外开放方法名加前缀 (可为空)
    'method_prefix' => '',
    // 默认时区
    'default_timezone' => 'Asia/Shanghai',
    // 错误显示信息,非调试模式有效
    'error_message' => '404 Not Found',
    // 显示错误信息
    'show_error_msg' => true,
];

database.php

<?php
//https://www.kancloud.cn/manual/think-orm/1257999
return [
    // 默认使用的数据库连接配置
    'default' => 'mysql',
    // 自定义时间查询规则
    'time_query_rule' => [],
    // 自动写入时间戳字段
    // true为自动识别类型 false关闭
    // 字符串则明确指定时间字段类型 支持 int timestamp datetime date
    'auto_timestamp' => true,
    // 时间字段取出后的默认时间格式
    'datetime_format' => 'Y-m-d H:i:s',
    // 时间字段配置 配置格式:create_time,update_time
    'datetime_field' => '',
    // 数据库连接配置信息
    'connections' => [
        'mysql' => [
            // 数据库类型
            'type' => 'mysql',
            // 服务器地址
            'hostname' => '127.0.0.1',
            // 数据库名
            'database' => 'database',
            // 用户名
            'username' => 'root',
            // 密码
            'password' => 'root',
            // 端口
            'hostport' => '3306',
            // 数据库编码默认采用utf8
            'charset' => 'utf8',
            // 数据库表前缀
            'prefix' => 'table_',
            // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
            'deploy' => 0,
            // 数据库读写是否分离 主从式有效
            'rw_separate' => false,
            // 读写分离后 主服务器数量
            'master_num' => 1,
            // 指定从服务器序号
            'slave_no' => '',
            // 是否严格检查字段是否存在
            'fields_strict' => true,
            // 是否需要断线重连
            'break_reconnect' => false,
            // 监听SQL
            'trigger_sql' => true,
            // 开启字段缓存
            'fields_cache' => false,
        ],
    ],
];

session.php

<?php
return [
    //是否开启Redis Session
    'session_redis' => false,
    //Session Redis  (php.ini中session.auto_start设为0,否则无法正常使用Redis)
    'session_redis_config' => [
        'host' => '127.0.0.1', // 必选参数
        'port' => 6379,        // 必选参数
        'auth' => '******',    // 可选参数
        'timeout' => 2,           // 可选参数
        'database' => 2,           // 可选参数
        'prefix' => 'session_'   // 可选参数
    ]
];

view.php

<?php
//https://www.kancloud.cn/manual/think-template/1286403
return [
    'view_path' => 'view', // 模板路径
    'view_suffix' => 'php', // 默认模板文件后缀
    'view_depr' => DIRECTORY_SEPARATOR,//模板文件分隔符
    'cache_path' => 'temp',  //模板缓存目录
    'cache_suffix' => 'php', // 默认模板缓存后缀
    'tpl_deny_func_list' => 'echo,exit', // 模板引擎禁用函数
    'tpl_deny_php' => false, // 默认模板引擎是否禁用PHP原生代码
    'tpl_begin' => '{', // 模板引擎普通标签开始标记
    'tpl_end' => '}', // 模板引擎普通标签结束标记
    'strip_space' => false, // 是否去除模板文件里面的html空格与换行
    'tpl_cache' => false, // 是否开启模板编译缓存,设为false则每次都会重新编译
    'compile_type' => 'file', // 模板编译类型
    'cache_prefix' => '', // 模板缓存前缀标识,可以动态改变
    'cache_time' => 0, // 模板缓存有效期 0 为永久,(以数字为值,单位:秒)
    'layout_on' => false, // 布局模板开关
    'layout_name' => 'layout', // 布局模板入口文件
    'layout_item' => '{__CONTENT__}', // 布局模板的内容替换标识
    'taglib_begin' => '{', // 标签库标签开始标记
    'taglib_end' => '}', // 标签库标签结束标记
    'taglib_load' => true, // 是否使用内置标签库之外的其它标签库,默认自动检测
    'taglib_build_in' => 'cx', // 内置标签库名称(标签使用不必指定标签库名称),以逗号分隔 注意解析顺序
    'taglib_pre_load' => '', // 需要额外加载的标签库(须指定标签库名称),多个以逗号分隔
    'display_cache' => false, // 模板渲染缓存
    'cache_id' => '', // 模板缓存ID
    'tpl_replace_string' => [],
    'tpl_var_identify' => 'array', // .语法变量识别,array|object|'', 为空时自动识别
    'default_filter' => 'htmlentities', // 默认过滤方法 用于普通标签输出
];

worker.php

<?php
return [
    //协议
    'listen' => 'http://0.0.0.0:8888',
    //进程数
    'worker_num' => 4,
    //静态资源目录
    'document_root' => 'public',
];

swoole.php

<?php
return [
    //协议
    'listen' => 'http://0.0.0.0:9529',
    //进程数
    'worker_num' => 4,
    //静态资源目录
    'document_root' => 'public',
    //配置发送输出缓存区内存尺寸
    'buffer_output_size'=>'32 * 1024 * 1024'
];

命令

Swoole

启动

php zqphp swoole start

停止

php zqphp swoole stop

workerman

启动

以debug(调试)方式启动

php zqphp start

以daemon(守护进程)方式启动

php zqphp start -d

停止

php zqphp stop

重启

php zqphp restart

平滑重启

php zqphp reload

查看状态

php zqphp status

查看连接状态

php zqphp connections

Session

zqphp\facade\Session

set

  • 设置
  • key:session名称 多个设置使用array
  • value:session值
Session::set($key, $value = null);
//单个设置
Session::set('token','123456');
//多个设置
Session::set(['token'=>'123456','userid'=>8]);

get

  • 读取
  • key:名称
  • default:默认内容
Session::get($key = null, $default = null)
//获取整个Session数组
Session::get();
//获取Session数组的某一个值
Session::get('userid');
//获取Session数组的某一个值,如果Session数组中不包含这个值则返回null
//你也可以给get方法第二个参数传递一个默认值,如果Session数组中没找到对应值则返回默认值
Session::get('userid',1);

delete

  • 删除
  • key:删除的名称
Session::delete($key = null)
//删除指定Session
Session::delete('user');
//删除多个Session
Session::delete(['userid','token']);
//删除全部Session
Session::delete();

pull

  • 获取并删除某个值
  • key:指定名称
  • default:默认内容
Session::pull($key, $default = null)
Session::pull('userid');
  • 功能和以下代码相同
Session::get('userid');
Session::delete('userid');

has

  • 判断指定Session是否存在
  • key:指定名称
Session::has($key)
//userid不管有没值,只要存在就返回true,不存在返回false
Session::has('userid');

sessionId

  • 获取Sessionid
Session::sessionId()

Cookie

zqphp\facade\Cookie

set

  • 设置
  • key(string|array):cookie名称
  • value(string....):cookie值
  • maxAge(int):过期时间
  • path(string):有效的服务器路径
  • domain(string):有效域名/子域名
  • secure(bool):是否仅仅通过HTTPS
  • only(bool):仅可通过HTTP访问
Cookie::set($key, $value = null, $maxAge = 0, $path = '', $domain = '', $secure = false, $only = false)
//单个设置(有效10秒)
Cookie::set('token','123456',10);
//多个设置
Cookie::set([['token','123456',10],['userid','8',30]]);

get

  • 读取
  • key:名称
  • default:默认内容
Cookie::get($key = null, $default = null)
//获取整个Cookie数组
Cookie::get();
//获取Cookie数组的某一个值
Cookie::get('userid');
//获取Cookie数组的某一个值,如果Cookie数组中不包含这个值则返回null
//你也可以给get方法第二个参数传递一个默认值,如果Cookie数组中没找到对应值则返回默认值
Cookie::get('userid',1);

delete

  • 删除
  • key:删除的名称
Cookie::delete($key = null)
//删除指定Cookie
Cookie::delete('user');
//删除多个Cookie
Cookie::delete(['userid','token']);
//删除全部Cookie
Cookie::delete();

pull

  • 获取并删除Cookie
  • key:指定名称
  • default:默认内容
Cookie::pull($key, $default = null)
Cookie::pull('userid');

功能和以下代码相同

Cookie::get('userid');
Cookie::delete('userid');

has

  • 判断指定Cookie是否存在
  • key:指定名称
Cookie::has($key)
//userid不管有没值,只要存在就返回true,不存在返回false
Cookie::has('userid');

Request

zqphp\facade\Request

getIp

  • 获取客户端IP
Request::getIp()

getHost

  • 获取当前域名
  • type不带端口
Request::getHost($type = false)

get

  • 获得请求参数get
  • key:名称
  • default:默认内容
Request::get($key = null, $default = null)
//获取整个get数组
Request::get();
//获取get数组的某一个值
Request::get('id');
//获取get数组的某一个值,如果get数组中不包含这个值则返回null
//你也可以给get方法第二个参数传递一个默认值,如果get数组中没找到对应值则返回默认值
Request::get('id',1);

post

  • 获得请求参数post
  • key:名称
  • default:默认内容
Request::post($key = null, $default = null)
//获取整个post数组
Request::post();
//获取get数组的某一个值
Request::post('id');
//获取post数组的某一个值,如果get数组中不包含这个值则返回null
//你也可以给post方法第二个参数传递一个默认值,如果post数组中没找到对应值则返回默认值
Request::post('id',1);

getHeader

  • 获取header
  • key:名称
  • default:默认内容
Request::getHeader($key = null, $default = null, $headData = [])

获取整个header数组

Request::getHeader();

获取header数组的某一个值 如果请求没有header参数则返回一个空的数组。注意所有key均为小写(分隔符号为-)

Request::getHeader('host');

如果header数组中不包含这个值则返回null。注意所有key均为小写。 与get方法一样,你也可以给header方法第二个参数传递一个默认值,如果header数组中没找到对应值则返回默认值。例如

Request::getHeader('host','localhost');
获取$_SERVER['HTTP_X_REQUESTED_WITH']
使用Request::getHeader('x-requested-with')

getUri

  • 获得请求的uri
  • 返回请求的uri,包括path和queryString部分 当浏览器访问http://127.0.0.1:8080/user/get.php?uid=10&type=2时将返回/user/get.php?uid=10&type=2
Request::getUri()

getPath

  • 获得请求的path
  • 返回请求的path部分 当浏览器访问http://127.0.0.1:8080/user/get.php?uid=10&type=2时将返回/user/get.php
Request::getPath()

getQueryString

  • 获得请求的queryString
  • 返回请求的queryString部分 当浏览器访问http://127.0.0.1:8080/user/get.php?uid=10&type=2时将返回uid=10&type=2
Request::getQueryString()

getMethod

  • 获取请求方法
  • 返回值可能是GET、POST、PUT、DELETE、OPTIONS、HEAD中的一个
Request::getMethod()

getBody

  • 用于HTTP协议下的应用获取POST的原始数据
  • 功能同file_get_contents("php://input");
Request::getBody()

getFile

  • 获取上传文件
  • Key:字段名称
  • default:默认内容
Request::getFile($key = null, $default = null)

获取整个上传文件数组

Request::getFile();

返回的文件格式类似:

array (
    'avatar' => array (
            'name' => '123.jpg',
            'tmp_name' => '/tmp/workerman.upload.9hjR4w',
            'size' => 1196127,
            'error' => 0,
            'type' => 'application/octet-stream',
      ),
     'anotherfile' =>  array (
            'name' => '456.txt',
            'tmp_name' => '/tmp/workerman.upload.9sirSws',
            'size' => 490,
            'error' => 0,
            'type' => 'text/plain',
      )
)

其中:

  • name为文件名字
  • tmp_name为磁盘临时文件位置
  • size为文件大小
  • error为错误码
  • type为文件mine类型。

获取特定上传文件

Request::getFile('avatar');

返回类似

array (
        'name' => '123.jpg',
        'tmp_name' => '/tmp/workerman.upload.9hjR4w',
        'size' => 1196127,
        'error' => 0,
        'type' => 'application/octet-stream',
  )

getLocalIp

  • 获得本地IP
Request::getLocalIp()

getScheme

  • 获取协议
  • 返回值可能是http https中的一个
Request::getScheme()

getProtocolVersion

  • 获取请求HTTP版本
Request::getProtocolVersion()

getServer

  • 获取$_SERVER
Request::getServer()

isAjax

  • 判断是否是ajax请求
Request::isAjax()

isPjax

  • 判断是否是pjax请求
Request::isPjax()

Response

zqphp\facade\Response

sendFile

  • 浏览器输出文件
  • localfile:文件绝路径 @开头=配置目录,#开头=应用目录,~开头=启动目录
  • mime:mime类型
Response::sendFile($localfile, $mime = null)

输出Mp3文件,自动加上mime

Response::SendFile('/www/wwwroot/mp3.mp3');

输出Mp3文件,下载名为mp3.mp3

Response::SendFile(['/www/wwwroot/mp3.mp3','mp3.mp3']);

sendFileStream

  • 浏览器输出文件流
  • localfile:文件绝路径 @开头=配置目录,#开头=应用目录,~开头=启动目录
  • mime:mime类型
Response::sendFileStream($localfile, $mime = null)

输出Mp3文件,自动加上mime

Response::sendFileStream('/www/wwwroot/mp3.mp3');

输出Mp3文件,下载名为mp3.mp3

Response::sendFileStream(['/www/wwwroot/mp3.mp3','mp3.mp3']);

sendData

  • 浏览器输出文件内容
  • data:内容
  • mime:格式
Response::sendData($data, $mime)
Response::sendData('图片内容','jpg');
Response::sendData(['图片内容','下载名称'],'jpg');

redirect

  • 发送Http跳转
  • url:跳转的新地址,作为Location头进行发送
  • code:状态码【默认为302临时跳转,传入301表示永久跳转】
Response::redirect($url, $code = 302)
Response::redirect("http://www.baidu.com/",301);

head

  • 设置头部
Response::head($name, $data = null, $head = [])
//单个设置
Response::SetHead('Content-Length',80);
//多个设置
Response::SetHead(['Content-Length'=>80,'Connection'=>'keep-alive']);

status

  • 设置状态
Response::status($key = 200)
Response::status(200);

功能和以下代码功能相同(主要为了兼职Worker,和后面的Swoole)

header("HTTP/1.1 200 OK");

come

  • 输出内容,停止
  • data:内容
  • status:状态
  • header:头部信息
Response::come($data, $status = 200, $header = [])

项目内不能使用:

echo 'Hello';
exit;
die('Hello');

这些使用Response::come('Hello');`代替

Load

zqphp\Load

getConfigPath

  • 获取配置目录
Load::getConfigPath()

getAppPath

  • 获取应用目录
Load::getAppPath()

getRootPath

  • 启动目录
Load::getRootPath()

filePath

  • 转换文件路径
  • 文件绝路径 `@开头=配置目录,#开头=应用目录,~开头=启动目录
  • file:文件路径
  • dir:默认路径
Frame::filePath($file, $dir = null)

Frame

zqphp\extend\Frame
  • 更多方法不列出了请查看文件

getMime

  • 通过格式获取mime
  • key:文件格式
Frame::getMime($key)

getFileMime

  • 通过文件获取mime
  • key:文件路径
Frame::getFileMime($file)

View

zqphp\facade\View

assign

  • 模板变量赋值
View::assign(array $vars = []);
View::assign(['name'=>'zqphp']);

fetch

  • 渲染模板文件
  • 模板文件
  • 模板变量赋值
View::fetch(string $template, array $vars = []);
View::assign('index',['name'=>'zqphp']);

display

  • 渲染模板内容
View::display(string $content, array $vars = []);
//如果希望直接解析内容而不通过模板文件的话,可以使用display方法
$content = '{$name}-{$email}';
$temlate->display($content, ['name' => 'thinkphp', 'email' => 'thinkphp@qq.com']);

Mysql

zqphp\facade\Db
Apache Licence是著名的非盈利开源组织Apache采用的协议。 该协议和BSD类似,鼓励代码共享和尊重原作者的著作权, 允许代码修改,再作为开源或商业软件发布。需要满足 的条件: 1. 需要给代码的用户一份Apache Licence ; 2. 如果你修改了代码,需要在被修改的文件中说明; 3. 在延伸的代码中(修改和有源代码衍生的代码中)需要 带有原来代码中的协议,商标,专利声明和其他原来作者规 定需要包含的说明; 4. 如果再发布的产品中包含一个Notice文件,则在Notice文 件中需要带有本协议内容。你可以在Notice中增加自己的 许可,但不可以表现为对Apache Licence构成更改。 具体的协议参考:http://www.apache.org/licenses/LICENSE-2.0 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

暂无描述 展开 收起
PHP
Apache-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
PHP
1
https://gitee.com/zhqings/new-zqphp.git
git@gitee.com:zhqings/new-zqphp.git
zhqings
new-zqphp
new-zqphp
v1.0.1

搜索帮助