开源 企业版 高校版 私有云 模力方舟 AI 队友
代码拉取完成,页面将自动刷新
捐赠
捐赠前请先登录
扫描微信二维码支付
取消
支付完成
支付提示
将跳转至支付宝完成支付
确定
取消
1 Star 0 Fork 0

Bat/phpscript

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
已有帐号? 立即登录
文件
master
分支 (2)
master
frame1.0
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
项目仓库所选许可证以仓库主分支所使用许可证为准
master
分支 (2)
master
frame1.0
克隆/下载
克隆/下载
提示
下载代码请复制以下命令到终端执行
为确保你提交的代码身份被 Gitee 正确识别,请执行以下命令完成配置
初次使用 SSH 协议进行代码克隆、推送等操作时,需按下述提示完成 SSH 配置
1 生成 RSA 密钥
2 获取 RSA 公钥内容,并配置到 SSH公钥
在 Gitee 上使用 SVN,请访问 使用指南
使用 HTTPS 协议时,命令行会出现如下账号密码验证步骤。基于安全考虑,Gitee 建议 配置并使用私人令牌 替代登录密码进行克隆、推送等操作
Username for 'https://gitee.com': userName
Password for 'https://userName@gitee.com': # 私人令牌
master
分支 (2)
master
frame1.0
phpscript
/
script
/
Frame.php
phpscript
/
script
/
Frame.php
Frame.php 6.86 KB
一键复制 编辑 原始数据 按行查看 历史
Bat 提交于 2020年01月03日 16:50 +08:00 . 324234234
<?php
/**
* 核心框架
* @author sunhaoqiang(shqdev@163.com)
* @time: 2019年08月25日 16:38
*/
namespace script;
use script\RouteAnalysis;
use script\Route;
use script\Config;
use script\DecoratorBase;
class Frame
{
public $config;
public $route = [];
public function __construct()
{
// 自动加载
spl_autoload_register([$this,"autoloader"]);
// 异常处理
set_exception_handler([$this, 'exception']);
// 错误处理
set_error_handler([$this, 'error']);
$this->loadConfig();
$this->loadRoute();
$this->init();
}
public function loadMiddleware($route)
{
$middleware = Config::get('Middleware');
$global = $middleware['global'] ?? [];
$decoratorBase = new DecoratorBase();
foreach ($global as $value) {
$decoratorBase->add((new $value));
}
$route = $middleware['route'][$route] ?? [];
foreach ($route as $value) {
$decoratorBase->add((new $value));
}
return $decoratorBase;
}
/**
* 加载配置
*
* @return void
* @author sunhaoqiang(shqdev@163.com)
* @time 2019年12月30日 10:27
*/
public function loadConfig()
{
$files = glob('./config/*');
foreach ($files as $value) {
preg_match('/\.\/(.*)\/(.*)\.php/', $value, $matches);
[$file_name, $config, $cls] = $matches;
$namespace = $config.'\\'.$cls;
if (class_exists($namespace)) {
Config::set($cls, (new $namespace));
}
}
}
/**
* 加载路由
*
* @return void
* @author sunhaoqiang(shqdev@163.com)
* @time 2019年12月30日 10:27
*/
public function loadRoute()
{
$files = glob('./route/*');
foreach ($files as $value) {
preg_match('/\.\/(.*)\/(.*)\.php/', $value, $matches);
[$file_name, $route, $cls] = $matches;
$namespace = $route.'\\'.$cls;
if (class_exists($namespace)) {
foreach ((new $namespace) as $key => $value) {
Route::set($key, (new RouteAnalysis($key, $value)));
}
}
}
}
public function autoloader($cls_name)
{
spl_autoload($cls_name);
}
public function exception($exception)
{
if (!$this->isCli()) {
if (ENV) {
if (!headers_sent()) {
header('Content-Type:application/json;charset=utf-8');
}
header("HTTP/1.1 500 Internal Server Error");
$data = [
"code" => 500,
"msg" => $exception->getMessage(),
"data" => []
];
exit(json_encode($data));
}
echo '<pre>';
}
echo $exception->getMessage()."\n\n";
$trace = $exception->getTrace();
foreach ($trace as $value) {
if (isset($value['file']) && isset($value['line'])) {
printf(" - 文件:%-80s\t 行号:%-4d 行 \n", $value['file'], $value['line']);
}
}
}
public function error($errno, $errstr, $errfile, $errline)
{
if (!(error_reporting() & $errno)) {
// 此错误代码不包含在错误报告中,因此请将其删除到标准PHP错误处理程序
return false;
}
$type = [
E_ERROR => "运行时致命的错误。不能修复的错误。停止执行脚本",
E_WARNING => "运行时非致命的错误。没有停止执行脚本",
E_PARSE => "编译时的解析错误。解析错误应该只由解析器生成",
E_NOTICE => "运行时的通知。脚本发现可能是一个错误,但也可能在正常运行脚本时发生",
E_CORE_ERROR => "PHP 启动时的致命错误。这就如同 PHP 核心的 E_ERROR",
E_CORE_WARNING => "PHP 启动时的非致命错误。这就如同 PHP 核心的 E_WARNING",
E_COMPILE_ERROR => "编译时致命的错误。这就如同由 Zend 脚本引擎生成的 E_ERROR",
E_COMPILE_WARNING => "编译时非致命的错误。这就如同由 Zend 脚本引擎生成的 E_WARNING",
E_USER_ERROR => "用户生成的致命错误。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_ERROR",
E_USER_WARNING => "用户生成的非致命错误。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_WARNING",
E_USER_NOTICE => "用户生成的通知。这就如同由程序员使用 PHP 函数 trigger_error() 生成的 E_NOTICE",
E_STRICT => "运行时的通知。PHP 建议您改变代码,以提高代码的互用性和兼容性",
E_RECOVERABLE_ERROR => "可捕获的致命错误。这就如同一个可以由用户定义的句柄捕获的 E_ERROR(见 set_error_handler())",
E_ALL => "所有的错误和警告的级别,除了 E_STRICT(自 PHP 6.0 起,E_STRICT 将作为 E_ALL的一部分)"
];
if (key_exists($errno, $type)) {
$msg = "[错误类型]:".$type[$errno]."\n";
$msg .= "[错误说明]:".$errstr."";
}else {
$msg = "[错误类型]:未知\n";
$msg .= "[错误说明]:未知错误";
}
throw new \Exception($msg);
}
public function isCli()
{
return PHP_SAPI === 'cli';
}
public function isWinnt()
{
return PHP_OS === 'WINNT';
}
public function init()
{
if ($this->isCli()) {
$this->initCli();
} else {
// URI 访问
if (isset($_SERVER['REQUEST_URI'])) {
// $route = substr($_SERVER['REQUEST_URI'], strlen('/'));
[$route, $query] = explode('?' ,$_SERVER['REQUEST_URI']);
if(Route::exists($route)){
$middleware = $this->loadMiddleware($route);
Route::get($route)->add($middleware)->run();
}
}
}
}
public function initCli()
{
if (!$this->isCli()) {
echo "您运行php文件不是命令行脚本!!!\n";
exit;
}
global $argc,$argv;
if ($argc < 2) {
// 不传参时的脚本执行,意为默认脚本
echo '默认脚本';
exit;
}
// 传参时指定脚本
if(isset($argv[1]) && Route::exists($argv[1])){
printf("------------------------\t %s \t------------------------\n\n", date('Y-m-d H:i:s'));
Route::get($argv[1])->run();
printf("------------------------\t %s \t------------------------\n", date('Y-m-d H:i:s'));
exit;
}
}
}
Loading...
举报
举报成功
我们将于2个工作日内通过站内信反馈结果给你!
请认真填写举报原因,尽可能描述详细。
请选择举报类型
取消
发送
误判申诉

此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。

如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。

取消
提交

简介

取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
编辑仓库简介
简介内容
主页
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
PHP
1
https://gitee.com/shqdev/phpscript.git
git@gitee.com:shqdev/phpscript.git
shqdev
phpscript
phpscript
master
点此查找更多帮助

搜索帮助

评论
仓库举报
回到顶部
登录提示
该操作需登录 Gitee 帐号,请先登录后再操作。
立即登录
没有帐号,去注册

AltStyle によって変換されたページ (->オリジナル) /