Kohana框架的安装及部署

news2024/11/19 10:31:28

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文件中,你可以进行以下操作:

  1. 定义常量:你可以定义一些全局常量,如应用程序的根目录路径、环境变量等。
  2. 加载必要的文件:bootstrap.php会加载一些必要的文件,包括Autoloader类、Exception处理类等。
  3. 配置框架:你可以设置框架的各种配置选项,如默认时区、错误报告级别、数据库连接等。
  4. 注册模块:如果你使用了额外的模块,你可以在这里注册它们,以便框架能够正确加载和使用它们。
  5. 运行应用程序:最后,bootstrap.php会运行应用程序,启动请求处理流程,并将控制权交给应用程序的入口文件index.php。
  6. 配置路由规则,映射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 check
	return 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 core
	require APPPATH.'classes/Kohana'.EXT;
}
else
{
	// Load empty core extension
	require 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-demo
	D:\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/
  • 访问默认的**/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)
  • 访问**/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)
  • 访问**/Controller/api/game/get_data**

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1210586.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java排序算法之桶排序

图解 桶排序&#xff08;Bucket sort&#xff09;是一个排序算法&#xff0c;它的主要思想是将需要排序的数据分到有限数量的桶里。每个桶里的数据再进行单独的排序&#xff0c;最后按照顺序将每个桶里的数据依次取出&#xff0c;即可完成排序。 桶排序的具体实现可以分为以下几…

软件项目验收测试计划

验收测试计划 1.基本信息 2.项目成果及验收要求 2.1项目成果 2.2验收要求 1、满足业务风险控制法律法规要求。 3.验收组织 4.产品交付 5.产品安装 5.1环境要求 5.2数据库配置 5.3程序配置 6.验收测试方案 6.1测试 依据 6.2测试要求 6.3测试方法 6.4测试工作流程 6.5测试通过准则…

Spring 只用一招,就摆脱被垃圾回收的命运,拯救了自己

SpringBoot ApplicationContext 会被 JVM 当成垃圾对象&#xff0c;然后回收掉吗&#xff1f; 最近五阳哥在复习JVM 垃圾回收的知识&#xff0c;被别人问到这个问题&#xff0c;我心里感到一惊&#xff0c;如果Spring 被回收掉&#xff0c;Spring管理的bean全部会被回收&#…

dubbo服务超时导致的异常

今天服务器启动项目时&#xff0c;页面刷新报错&#xff1a; 查看日志时报错信息为&#xff1a; 解决&#xff1a; 在对应服务的配置文件中配置dubbo超时时间&#xff1a; 随后问题得到解决&#xff0c;特此记录

【Linux】初识网络

目录 背景 协议 什么是协议 协议分层 OSI七层模型 TCP/IP模型 网络协议栈与 OS 的关系 网络传输 局域网中直接通信 数据的封装与分用 局域网通信原理 数据碰撞 跨路由器进行远端通信 IP的介绍 传输演示 背景 &#x1f9ca;一开始&#xff0c;计算机都是一台台独…

【Proteus仿真】【Arduino单片机】HC-SR04超声波测距

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真Arduino单片机控制器&#xff0c;使用PCF8574、LCD1602液晶、HC-SR04超声波传感器等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显示超声波检测距离。 二、软件设计 …

禁止chrome浏览器将HTTP协议强转成HTTPS

操作步骤 1.在浏览器中输入chrome://flags/ 2.在搜索框中输入upgrade&#xff0c;找到HTTPS Upgrades&#xff0c;将default改成disabled。 3.重启chrome浏览器即可生效。

QQ录制视频保存到哪了?位置一览,让你轻松找回

现如今&#xff0c;录制视频成为我们日常生活和工作的一部分。qq是中国最流行的社交媒体平台之一&#xff0c;许多用户使用qq录屏功能来记录重要时刻。但是&#xff0c;很多人不知道qq录制视频保存到哪了。本文将深入研究qq录制视频功能&#xff0c;以帮助您了解如何存储和管理…

关于跨域问题的个人理解

我也工作蛮多年了&#xff0c;期间既做过前端也做过后端。对于跨域问题&#xff0c;究竟是由前端程序员还是后端程序员来解决&#xff0c;我在不同的时期有不同的理解。现在&#xff0c;我更倾向于认为跨域问题应该由前端程序员来解决&#xff0c;即使在解决跨域问题的过程中涉…

流量分析(5.5信息安全铁人三项赛数据赛题解)

黑客通过外部的web服务器攻击到企业内部的系统中&#xff0c;并留下了web后门&#xff0c;通过外部服务器对内部进行了攻击。 目录 黑客攻击的第一个受害主机的网卡IP地址 黑客对URL的哪一个参数实施了SQL注入 第一个受害主机网站数据库的表前缀(加上下划线 例如abc_) 第一…

Linux中at命令添加一次性任务

1、工作原理 功能&#xff1a;在某个时间点&#xff0c;执行一次命令。 特点&#xff1a;任务是用户隔离的。 条件&#xff1a;必须要保证atd进程存在。 ps -ef |grep atd 原理&#xff1a;atd进程循环遍历队列里的任务&#xff0c;有则按顺序执行任务&#xff0c;没有&#x…

2023湖南省赛

​​​​​​连接 目录 A:开开心心233 B:Square Game C:室温超导 F:necklace J:radius K:tourist 补题中&#xff0c;会给出大部分代码 A:开开心心233 签到题 &#xff0c;无论二分还是解方程还是直接for循环枚举都能直接通过啦 signed main() {ios_base::sync_with_s…

计算机毕业设计项目选题推荐(免费领源码)PHP+MySQL在线网络教育平台66984

目 录 摘要 1 绪论 1.1 课题背景 1.2意义 1.3HTML介绍 1.4JavaScript 运行模式 1.5css3工作原理 1.6论文结构与章节安排 2 在线网络教育平台分析 2.1 可行性分析 2.2 系统流程分析 2.2.1数据增加流程 3 2.2.2数据修改流程 4 2.2.3数据删除流程 4 2.3 系统功能分析 …

提升代码复用性:探讨Mixin类在面向对象语言中的独特作用和优势

&#x1f3ac; 江城开朗的豌豆&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 &#x1f4dd; 个人网站 :《 江城开朗的豌豆&#x1fadb; 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 ⭐ 专栏简介 &#x1f4d8; 文章引言 一、m…

如何在Ubuntu 23.10部署KVM并创建虚拟机?

正文共&#xff1a;1114 字 21 图&#xff0c;预估阅读时间&#xff1a;2 分钟 我们之前对OpenStack醉过一次简单介绍&#xff08;什么是OpenStack&#xff1f;&#xff09;&#xff0c;OpenStack本身是一个云管理平台&#xff0c;它本身并不提供虚拟化功能&#xff0c;而是依赖…

一起学docker系列之二深入理解Docker:基本概念、工作原理与架构

目录 前言1 Docker的基本概念2 Docker的基本组成3 docker工作原理4 docker架构5 Docker详细工作过程结语 前言 在当今的软件开发和部署中&#xff0c;Docker已经成为一种不可或缺的工具。它简化了应用程序的打包、交付和运行&#xff0c;同时提供了强大的隔离性和可移植性。本…

手把手教你实现贪吃蛇

> 作者简介&#xff1a;დ旧言~&#xff0c;目前大二&#xff0c;现在学习Java&#xff0c;c&#xff0c;c&#xff0c;Python等 > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;实现贪吃蛇 > 毒鸡汤&#xff1a;时间并不可真…

SM5212 是一款完整的采用恒定电流/恒定电压的单节锂电池线性充电器

SM5212 双向防反接功能 1.2A 锂电池线性充电芯片 概述&#xff1a; SM5212 是一款完整的采用恒定电流/恒定电压的单节锂电池线性充电器&#xff0c;并带有锂电池正负极反接保护和 VIN 正负反接保护功能&#xff0c;可以保护芯片和用户安全。 由于采用了内部 PMOSFET 架构&am…

【SpringBoot3+Vue3】二【实战篇】-后端

目录 一、环境搭建 1、数据库脚本 2、pom 3、yml 4、通过mybatis-X生成实体pojo等 4.1 Article 4.2 Category 4.3 User 5、 Mapper 5.1 ArticleMapper 5.2 CategoryMapper 5.3 UserMapper 6、service 6.1 ArticleService 6.2 CategoryService 6.3 UserService …

V10chrony服务配置

Chrony简介 Chrony是一个开源自由的网络时间协议 NTP 的客户端和服务器软软件。它能让计算机保持系统时钟与时钟服务器&#xff08;NTP&#xff09;同步&#xff0c;因此让你的计算机保持精确的时间&#xff0c;Chrony也可以作为服务端软件为其他计算机提供时间同步服务。 Ch…