Kohana框架的安装及部署
Kohana框架的安装及部署
- tips
- Kohana安装以及部署
- 1、重要文件作用说明
- 1.1 /index.php
- 1.2 /application/bootstrap.php
- 2、项目结构
- 3、路由配置
- 3.1、隐藏项目入口的路由
- 3.2、配置默认路由
- 3.3、配置自定义的路由(Controller目录下的控制器)
- 3.4、配置自定义的路由(Controller/directory下的控制器)
tips
kohana官网:https://kohanaframework.org/
kohana中文文档:https://github.com/stenote/Kohana_Docs_zh_CN/tree/master
Kohana安装以及部署
在官网下载kohana压缩包,解压到自己web项目目录下
kohana框架是一个轻量级的PHP开发框架,包结构主要分为4个部分:
- application目录:应用程序的主要目录,包含了控制器、模型、视图和其他自定义代码文件。
- system目录:这是Kohana框架的核心目录,包含了框架的各种类和库文件。通常不需要修改这些文件,除非你有特定的需求。
- modules目录:这个目录用于存放可重用的模块。每个模块都可以有自己的MVC结构,类似于应用程序的结构。
- public目录:这是Web服务器的根目录,其中包含了入口文件index.php和一些静态资源文件,如CSS、JavaScript和图片等。
1、重要文件作用说明
- /index.php
index.php:这是Kohana应用程序的入口文件,位于public目录下。当Web服务器接收到请求时,会将请求交给index.php处理。该文件负责初始化框架并调度请求到相应的控制器和动作。它通常包含一些必要的设置和引入bootstrap.php文件的代码。
index.php是Kohana应用程序的入口文件,用于处理请求和调度控制器
- /install.php
install.php:这是一个安装脚本,用于在初始部署时设置Kohana框架。它位于系统目录下,主要用于执行一些初始化操作,如创建数据库表、设置文件权限等。一旦完成安装过程,通常建议删除或禁用install.php文件,以防止未经授权的访问。
install.php是一个安装脚本,用于执行初始设置和配置。
- /application/bootstrap.php
在Kohana框架中,bootstrap.php是一个重要的文件,它位于系统目录下。这个文件主要用于初始化框架和应用程序的各种设置。
在bootstrap.php文件中,你可以进行以下操作:
- 定义常量:你可以定义一些全局常量,如应用程序的根目录路径、环境变量等。
- 加载必要的文件:bootstrap.php会加载一些必要的文件,包括Autoloader类、Exception处理类等。
- 配置框架:你可以设置框架的各种配置选项,如默认时区、错误报告级别、数据库连接等。
- 注册模块:如果你使用了额外的模块,你可以在这里注册它们,以便框架能够正确加载和使用它们。
- 运行应用程序:最后,bootstrap.php会运行应用程序,启动请求处理流程,并将控制权交给应用程序的入口文件index.php。
- 配置路由规则,映射controller下的接口
bootstrap.php文件负责初始化框架和应用程序的各种设置,为应用程序的正常运行做好准备工作。
1.1 /index.php
<?php// application模块的包名
$application = 'application';// modules模块的包名
$modules = 'modules';// system模块的包名
$system = 'system';// 定义EXT为.php,即PHP文件后缀
define('EXT', '.php');// 设置错误报告级别为全部:严重错误、警告、通知,严格编码规范及最佳实践
error_reporting(E_ALL | E_STRICT);// 定义常量DOCROOT 为 /,即全路径为根路径/
// Set the full path to the docroot
define('DOCROOT', realpath(dirname(__FILE__)).DIRECTORY_SEPARATOR);// 校验包路径是否为文件夹
// Make the application relative to the docroot, for symlink'd index.php
if ( ! is_dir($application) AND is_dir(DOCROOT.$application))$application = DOCROOT.$application;// Make the modules relative to the docroot, for symlink'd index.php
if ( ! is_dir($modules) AND is_dir(DOCROOT.$modules))$modules = DOCROOT.$modules;// Make the system relative to the docroot, for symlink'd index.php
if ( ! is_dir($system) AND is_dir(DOCROOT.$system))$system = DOCROOT.$system;// Define the absolute paths for configured directories
// 为配置好的包定义全路径常量名,即APPPATh为application包的全路径,MODPATH为modules包的全路径,SYSPATH为system包的全路径
define('APPPATH', realpath($application).DIRECTORY_SEPARATOR);
define('MODPATH', realpath($modules).DIRECTORY_SEPARATOR);
define('SYSPATH', realpath($system).DIRECTORY_SEPARATOR);// Clean up the configuration vars
// 清除变量
unset($application, $modules, $system);// 判断install.php文件是否存在,如果存在,则引入
if (file_exists('install'.EXT))
{// Load the installation checkreturn include 'install'.EXT;
}
// 设置应用的启动时间常量
/*** Define the start time of the application, used for profiling.*/
if ( ! defined('KOHANA_START_TIME'))
{define('KOHANA_START_TIME', microtime(TRUE));
}/*** Define the memory usage at the start of the application, used for profiling.*/
// 设置当前系统内存使用情况常量
if ( ! defined('KOHANA_START_MEMORY'))
{define('KOHANA_START_MEMORY', memory_get_usage());
}// 引入bootstrap文件(重要)
// Bootstrap the application
require APPPATH.'bootstrap'.EXT;// 判断当前运行环境是否是命令行环境,根据环境运行应用程序
if (PHP_SAPI == 'cli') // Try and load minion
{class_exists('Minion_Task') OR die('Please enable the Minion module for CLI support.');set_exception_handler(array('Minion_Exception', 'handler'));// 执行命令行任务Minion_Task::factory(Minion_CLI::options())->execute();
}
else
{/*** Execute the main request. A source of the URI can be passed, eg: $_SERVER['PATH_INFO'].* If no source is specified, the URI will be automatically detected.*/echo Request::factory(TRUE, array(), FALSE)// 创建请求对象,用于处理HTTP请求// 把请求处理结果输出到浏览器->execute()->send_headers(TRUE)->body();
}
1.2 /application/bootstrap.php
<?php defined('SYSPATH') or die('No direct script access.');// -- Environment setup --------------------------------------------------------// Load the core Kohana class
// 加载kohana的核心库
require SYSPATH.'classes/Kohana/Core'.EXT;// 在application包下或者system包下引入Kohana.php文件
if (is_file(APPPATH.'classes/Kohana'.EXT))
{// Application extends the corerequire APPPATH.'classes/Kohana'.EXT;
}
else
{// Load empty core extensionrequire SYSPATH.'classes/Kohana'.EXT;
}/*** Set the default time zone.** @link http://kohanaframework.org/guide/using.configuration* @link http://www.php.net/manual/timezones*/
// 设置默认时区
date_default_timezone_set('America/Chicago');/*** Set the default locale.** @link http://kohanaframework.org/guide/using.configuration* @link http://www.php.net/manual/function.setlocale*/
// 设置语言环境
setlocale(LC_ALL, 'en_US.utf-8');/*** Enable the Kohana auto-loader.** @link http://kohanaframework.org/guide/using.autoloading* @link http://www.php.net/manual/function.spl-autoload-register*/
// 允许kohana的自动加载器
spl_autoload_register(array('Kohana', 'auto_load'));/*** Optionally, you can enable a compatibility auto-loader for use with* older modules that have not been updated for PSR-0.** It is recommended to not enable this unless absolutely necessary.*/
//spl_autoload_register(array('Kohana', 'auto_load_lowercase'));/*** Enable the Kohana auto-loader for unserialization.** @link http://www.php.net/manual/function.spl-autoload-call* @link http://www.php.net/manual/var.configuration#unserialize-callback-func*/
ini_set('unserialize_callback_func', 'spl_autoload_call');/*** Set the mb_substitute_character to "none"** @link http://www.php.net/manual/function.mb-substitute-character.php*/
mb_substitute_character('none');// -- Configuration and initialization -----------------------------------------/*** Set the default language*/
I18n::lang('en-us');if (isset($_SERVER['SERVER_PROTOCOL']))
{// Replace the default protocol.HTTP::$protocol = $_SERVER['SERVER_PROTOCOL'];
}/*** Set Kohana::$environment if a 'KOHANA_ENV' environment variable has been supplied.** Note: If you supply an invalid environment name, a PHP warning will be thrown* saying "Couldn't find constant Kohana::<INVALID_ENV_NAME>"*/
//设置kohana的环境常量
if (isset($_SERVER['KOHANA_ENV']))
{Kohana::$environment = constant('Kohana::'.strtoupper($_SERVER['KOHANA_ENV']));
}/*** Initialize Kohana, setting the default options.** The following options are available:** - string base_url path, and optionally domain, of your application NULL* - string index_file name of your index file, usually "index.php" index.php* - string charset internal character set used for input and output utf-8* - string cache_dir set the internal cache directory APPPATH/cache* - integer cache_life lifetime, in seconds, of items cached 60* - boolean errors enable or disable error handling TRUE* - boolean profile enable or disable internal profiling TRUE* - boolean caching enable or disable internal caching FALSE* - boolean expose set the X-Powered-By header FALSE*/
Kohana::init(array('base_url' => '/',
));/*** Attach the file write to logging. Multiple writers are supported.*/
Kohana::$log->attach(new Log_File(APPPATH.'logs'));/*** Attach a file reader to config. Multiple readers are supported.*/
Kohana::$config->attach(new Config_File);/*** Enable modules. Modules are referenced by a relative or absolute path.*/
// 引入其他模块
Kohana::modules(array('auth' => MODPATH.'auth', // Basic authentication'cache' => MODPATH.'cache', // Caching with multiple backends'codebench' => MODPATH.'codebench', // Benchmarking tool'database' => MODPATH.'database', // Database access'image' => MODPATH.'image', // Image manipulation'minion' => MODPATH.'minion', // CLI Tasks'orm' => MODPATH.'orm', // Object Relationship Mapping'unittest' => MODPATH.'unittest', // Unit testing'userguide' => MODPATH.'userguide', // User guide and API documentation));/*** Cookie Salt* @see http://kohanaframework.org/3.3/guide/kohana/cookies* * If you have not defined a cookie salt in your Cookie class then* uncomment the line below and define a preferrably long salt.*/
// Cookie::$salt = NULL;
// 如果需要正常启动项目:需要给这个字段设置一个值(string),如Cookie::$salt = 'foobar';
/*** Set the routes. Each route must have a minimum of a name, a URI and a set of* defaults for the URI.*/
// 设置接口的路由规则
Route::set('default', '(<controller>(/<action>(/<id>)))')->defaults(array('controller' => 'welcome','action' => 'index',));
2、项目结构
3、路由配置
- tip:在bootstrap.php文件中配置路由
- my_app项目放在warmserver的www目录下
- warmserver重新写虚拟映射之后,需要关闭warmserve再重新启动
3.1、隐藏项目入口的路由
kohana项目的入口是application目录下的index.php文件,因此如果需要访问项目的某个接口,需要先访问到项目入口index.php,这样在url上会显得不简洁,因此可以通过配置
.htaccess
文件,来隐藏url中默认的项目入口。把官网的kahana项目拉下来,项目根目录下会有默认的example.htaccess文件
,把前缀名字去掉即可,即变成.htaccess
eg:
前提:需要先使用nginx或者apache服务器映射项目路径跟本地的项目文件映射:http://my_app => D:\PhpCode\kohana-demoD:\PhpCode\kohana-demo路径下即是官网拉下来的kohana项目,重新命名成了kohana-demo
配置前:如果需要访问 http://localhost/my_app项目则需要输入url:http://localhost/my_app/index.php
注意:通过www目录映射的localhost访问www目录下的my_app项目时,url中的index.php不能省略,如http://localhost/my_app/index.php/ 中的index.php/不能省略
3.2、配置默认路由
- 需要注意拉下来的kohana项目默认配置了默认路由
- 默认的路由配置需要在bootstrap.php文件的最下面,否则默认路由会匹配全部请求,就不会匹配到后面的路由了
- 默认的路由映射,只要访问到该项目,即默认会路由到该接口,即访问到**/application/classes/Controller/welcome/index**
- 即Controller/Welcome.php文件下的action_index方法
- 在bootstrap.php中配置
Route::set('default', '(<controller>(/<action>(/<id>)))')->defaults(array('controller' => 'welcome','action' => 'index',));
- Controller/Welcome.php
<?php defined('SYSPATH') or die('No direct script access.');class Controller_Welcome extends Controller {public function action_index(){$this->response->body('hello world');}} // End Welcome
- 访问默认的接口/Controller/Welcome/action_index
- 通过localhost映射的www目录访问:
- http://localhost/my_app/index.php/ 注意,末尾的/不能省略
- 通过虚拟域名访问
- http://myapp/
- 通过localhost映射的www目录访问:
- 访问默认的**/Controller/welcome/index**
3.3、配置自定义的路由(Controller目录下的控制器)
- /Controller下创建myapi.php文件
<?php defined('SYSPATH') or die('No direct script access.');class Controller_Myapi extends Controller {public function action_get_data(){$this->response->body('myapi');}
}
- bootstrap.php中配置
// 配置Controller下的某个控制器的路由
Route::set('myapi', 'myapi/<action>')->defaults(array('controller' => 'myapi','action' => 'index',));
- 访问接口
- 通过www文件夹映射的localhost访问:
localhost => D:\Env\wamp64\www
- http://localhost/my_app/index.php/myapi/get_data
- 通过myapp直接映射项目路径:
myapp=>D:\Env\wamp64\www\my_app
- http://myapp/index.php/myapi/get_data
- http://myapp/myapi/get_data(省略index.php)
- 通过www文件夹映射的localhost访问:
- 访问**/Controller/myapi/get_data**
3.4、配置自定义的路由(Controller/directory下的控制器)
- bootstrap.php中配置
// 配置Controller目录下的某个文件夹下的控制器的路由
Route::set('api', 'api(/<controller>(/<action>))')->defaults(array('directory' => 'api','controller' => 'default','action' => 'index',));
- 创建Controller/api/game.php文件
<?php defined('SYSPATH') or die('No direct script access.');class Controller_Api_Game extends Controller {public function action_get_data(){$this->response->body('game');}
}
- 访问接口
- 通过www文件夹映射的localhost访问:
localhost => D:\Env\wamp64\www
- http://localhost/my_app/index.php/api/game/get_data
- 通过虚拟映射域名访问:
myapp=>D:\Env\wamp64\www\my_app
- http://myapp/index.php/api/game/get_data
- 或http://myapp/api/game/get_data(省略index.php)
- 通过www文件夹映射的localhost访问:
- 访问**/Controller/api/game/get_data**
相关文章:

Kohana框架的安装及部署
Kohana框架的安装及部署 tipsKohana安装以及部署1、重要文件作用说明1.1 /index.php1.2 /application/bootstrap.php 2、项目结构3、路由配置3.1、隐藏项目入口的路由3.2、配置默认路由3.3、配置自定义的路由(Controller目录下的控制器)3.4、配置自定义的路由(Controller/direc…...

无重复字符的最长子串 Golang leecode_3
刚开始的思路,先不管效率,跑出来再说,然后再进行优化。然后就有了下面的暴力代码: func lengthOfLongestSubstring(s string) int {// count 用来记录当前最长子串长度var count int// flag 用来对下面两个 if 语句分流var flag …...

Vue项目的学习一
1、Vue项目里面的.js文件里面对象添加属性 例如:在对象:row,需要在对象row里面添加一个属性状态:type,使用里面的Vue.set函数 Vue.set(参数1,参数2,参数3) Vue.set(row,type,false)解析: 参数1࿱…...

k8s备份
cpu 磁盘io 往主的写,同步给备 rootk8s-etcd02:~# cat /etc/systemd/system/etcd.service [Unit] DescriptionEtcd Server Afternetwork.target Afternetwork-online.target Wantsnetwork-online.target Documentationhttps://github.com/coreos[Service] Typen…...

python自己造轮子使用
项目结构 首先,需要按照下列格式组织你的 package project (项目名称,随意,与package无关)|----package (这个才是包名)|----…...

Elastic stack8.10.4搭建、启用安全认证,启用https,TLS,SSL 安全配置详解
ELK大家应该很了解了,废话不多说开始部署 kafka在其中作为消息队列解耦和让logstash高可用 kafka和zk 的安装可以参考这篇文章 深入理解Kafka3.6.0的核心概念,搭建与使用-CSDN博客 第一步、官网下载安装包 需要 elasticsearch-8.10.4 logstash-8.…...

解决npm报错Error: error:0308010C:digital envelope routines::unsupported
解决npm报错Error: error:0308010C:digital envelope routines::unsupported。 解决办法;终端执行以下命令(windows): set NODE_OPTIONS--openssl-legacy-provider然后再执行 npm命令成功:...

高防IP是什么?有什么优势?
一.高防IP的概念 高防IP是指高防机房所提供的IP段,一种付费增值服务,主要是针对网络中的DDoS攻击进行保护。用户可以通过配置高防IP,把域名解析到高防IP上,引流攻击流量,确保源站的稳定可靠。 二.高防IP的原理 高防I…...

php费尔康框架phalcon(费尔康)框架学习笔记
phalcon(费尔康)框架学习笔记 以实例程序invo为例(invo程序放在网站根目录下的invo文件夹里,推荐php版本>5.4) 环境不支持伪静态网址时的配置 第一步: 在app\config\config.ini文件中的[application]节点内修改baseUri参数值为/invo/index.php/或…...

StartUML的基本使用
文章目录 简介和安装创建包创建类视图时序图 简介和安装 最近在学习一个项目的时候用到了StartUML来构造项目的类图和时序图 虽然vs2019有类视图,但是也不是很清晰,并没有生成uml图,但是宇宙最智能的IDE IDEA有生成uml图的功能 下面就简单介…...

飞天使-django概念之urls
urls 容易搞混的概念,域名,主机名,路由 网站模块多主机应用 不同模块解析不同的服务器ip地址 网页模块多路径应用 urlpatterns [ path(‘admin/’, admin.site.urls), path(‘’, app01views.index), path(‘movie/’, app01views.movi…...

MongoDB分片集群搭建
----前言 mongodb分片 一般用得比较少,需要较多的服务器,还有三种的角色 一般把mongodb的副本集应用得好就足够用了,可搭建多套mongodb复本集 mongodb分片技术 mongodb副本集可以解决数据备份、读性能的问题,但由于mongodb副本集是…...

modbus报文
MODBUS规约报文解析-CSDN博客...

flutter报错: library “libflutter.so“ not found
修改android/app/build.gradle defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "cn.rentsoft.flutter.openim.consumer" // You can update the …...

MR混合现实情景实训教学系统模拟历史情景
二、应用场景 1. 古代战争场景:通过MR混合现实情景实训教学系统,学生可以亲身体验古代战争的场景,如战场布置、战术运用等。这不仅有助于学生更好地理解古代战争的特点,还能够培养他们的团队协作和战略思维能力。 2. 历史文化古…...

计算机视觉的应用16-基于pytorch框架搭建的注意力机制,在汽车品牌与型号分类识别的应用
大家好,我是微学AI,今天给大家介绍一下计算机视觉的应用16-基于pytorch框架搭建的注意力机制,在汽车品牌与型号分类识别的应用,该项目主要引导大家使用pytorch深度学习框架,并熟悉注意力机制模型的搭建,这个…...

Flutter 实现 Android CollapsingToolbarLayout折叠布局效果
Flutter 是通过Tabbar TabbarView 来实现 类似Android Viewpager 页面切换的效果的。我个人觉得Flutter 的tab 切换实现过程要比Android的实现过程要简单容易不是一星半点,哈哈哈哈 ,因为她所用到的widget 都是google 官方封装好的,用起来代…...

数据库管理-第116期 Oracle Exadata 06-ESS-下(202301114)
数据库管理-第116期 Oracle Exadata 06-ESS-下(202301114) 距离上一次正儿八经的技术分享又过了整整一周了,距离上一期Exadata专题文章也过了11天了,今天一鼓作气把ESS写完,毕竟明天又要飞北京了。 1 Smart Scan 其…...

阿里云C++二面面经
1.智能指针 1、shared_ptr 原理:shared_ptr是基于引用计数的智能指针,用于管理动态分配的对象。无论 std::shared_ptr 存储在堆区还是栈区,它所指向的内存块始终存储在堆区。这是因为 std::shared_ptr 是用于管理动态分配的内存的智能指针,它需要存储在堆区,以便进行引用…...

Ubuntu 20.04编译Chrome浏览器
本文记录chrome浏览器编译过程,帮助大家避坑qaq 官网文档:https://chromium.googlesource.com/chromium/src//main/docs/linux/build_instructions.md 一.系统要求 一台64位的英特尔机器,至少需要8GB的RAM。强烈推荐超过16GB。至少需要100…...

大文件分片上传、断点续传、秒传
小文件上传 后端:SpringBootJDK17 前端:JavaScriptsparkmd5.min.js 一、依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.2</ve…...

DAY53 1143.最长公共子序列 + 1035.不相交的线 + 53. 最大子序和
1143.最长公共子序列 题目要求:给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。 一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删…...

短剧App开发:个性化的内容推荐
随着移动互联网的普及和用户需求的多样化,短剧App作为一种新兴的内容消费模式,受到了越来越多用户的青睐。在短剧App开发中,个性化的内容推荐是一个重要的功能,它能够根据用户的兴趣偏好和行为数据,为他们提供更精准、…...

互斥量保护资源
一、概念 在多数情况下,互斥型信号量和二值型信号量非常相似,但是从功能上二值型信号量用于同步, 而互斥型信号量用于资源保护。 互斥型信号量和二值型信号量还有一个最大的区别,互斥型信号量可以有效解决优先级反转现 象。 …...

天机学堂-1、项目搭建,微服务架构设计
1.学习背景 各位同学大家好,经过前面的学习我们已经掌握了《微服务架构》的核心技术栈。相信大家也体会到了微服务架构相对于项目一的单体架构要复杂很多,你的脑袋里也会有很多的问号: 微服务架构该如何拆分? 到了公司中我需要自…...

windows 电脑删除不了.TTF的文件
出现这个问题,首先检查,你的.ttf文件是不是在哪个软件中打开了。 如果是,先关掉,然后在删一遍试试。 如果这个还是不行试着打开控制面板>外观和个性化> 字体 > 字体设置>还原默认字体设置勾选,然后重启一下…...

C#多线程的操作
文章目录 1 使用线程意义2 C#线程开启的四种方式2.1 异步委托开启线程2.2 通过Thread类开启线程2.3 通过线程池开启线程2.4 通过任务Task开启线程 3 前台线程和后台线程简述3.1 前台线程3.2 后台线程 4 简述Thread和Task开启线程的区别4.1 Thread效果展示4.2 Task效果展示4.3 区…...

MyBatis Plus—CRUD 接口
Service CRUD 接口 说明: 通用 Service CRUD 封装IService (opens new window)接口,进一步封装 CRUD 采用 get 查询单行 remove 删除 list 查询集合 page 分页 前缀命名方式区分 Mapper 层避免混淆,泛型 T 为任意实体对象建议如果存在自定义通用 Servi…...

火焰图:链路追踪分析的可视化利器
什么是火焰图? 火焰图用于可视化分布式链路追踪,通过使用持续时间和不同颜色的水平条形来表示请求执行路径中的每个服务调用。分布式跟踪的火焰图包括错误、延迟数据等详情,帮助开发人员识别和解决应用程序中的瓶颈问题。 链路追踪与 Span …...

中睿天下Coremail | 2023年Q3企业邮箱安全态势观察报告
10月25日,北京中睿天下信息技术有限公司联合Coremail邮件安全发布《2023年第三季度企业邮箱安全性研究报告》。2023年第三季度企业邮箱安全呈现出何种态势?作为邮箱管理员,我们又该如何做好防护? 以下为精华版阅读,如需…...