以 CRMEB 开源版本为例,它是基于 ThinkPHP6+elementUI+Uni-app 框架开发的 PHP 开源商城系统,全开源无加密,支持微信小程序、公众号、H5、APP、PC 端适配且数据同步,便于开发者二次开发。在 CRMEB 中,ThinkPHP6.0 的单一入口模式对项目部署和访问起着关键作用。
一、入口文件定义
默认入口文件
CRMEB 商城默认的应用入口文件位于 public/index.php ,其内容首先会检查 PHP 版本,要求版本在 7.1 - 7.4 之间,若版本不符则直接终止程序并给出提示。接着会检测是否已安装 CRMEB 系统,若未安装且访问路径不符合要求(需在域名根目录下安装 ),也会给出相应提示并引导至安装页面。最后,通过require __DIR__ . '/../vendor/autoload.php';
加载自动加载文件,然后执行 HTTP 应用并响应,代码如下:
<?php
namespace think;
if ('7.1.0' > phpversion()) {
exit('您的php版本过低,不能安装本软件,兼容php版本7.1~7.4,谢谢!');
}
if (phpversion() >= '8.0.0') {
exit('您的php版本太高,不能安装本软件,兼容php版本7.1~7.4,谢谢!');
}
define('DS', DIRECTORY_SEPARATOR);
//检测是否已安装CRMEB系统
if(file_exists("./install/") && !file_exists("./install.lock")){
if($_SERVER['PHP_SELF'] != '/index.php'){
header("Content-type: text/html; charset=utf-8");
exit("请在域名根目录下安装,如:<br/> www.xxx.com/index.php 正确 <br/> www.xxx.com/www/index.php 错误,域名后面不能圈套目录, 但项目没有根目录存放限制,可以放在任意目录,apache虚拟主机配置一下即可");
}
header('Location:/install/index.php');
exit();
}
require __DIR__ . '/../vendor/autoload.php';
// 执行HTTP应用并响应
$http = (new App())->http;
$response = $http->run();
$response->send();
$http->end($response);
如果开发者没有特殊的自定义需求,无需对该入口文件做任何更改。这样设计入口文件位置,是为了让应用部署更安全,建议遵循 public 目录为唯一的 web 可访问目录,将其他文件放到非 WEB 访问目录下面,减少安全风险。
自定义入口文件
若有特殊需求,开发者可以创建自定义应用入口文件。例如,创建一个 public/admin.php 作为 admin 应用入口文件,代码如下:
// [ admin应用入口文件 ]
namespace think;
require __DIR__ . '/../vendor/autoload.php';
// 执行HTTP应用并响应
$http = (new App())->http;
//注意一定要设置 name,name()为 应用名称,不然会自动判断当前应用
$response = $http->name('admin')->run();
$response->send();
$http->end($response);
这里通过$http->name('admin')->run();
指定了应用名称为admin
,这样就可以针对 admin 应用进行特定的入口设置,方便对不同功能模块进行区分管理,比如在 CRMEB 商城中,可将后台管理相关功能通过 admin.php 入口文件进行单独配置和访问控制。
二、控制台入口文件
除了应用入口文件外,CRMEB 商城系统还提供了一个位于项目根目录的控制台入口文件think
(无后缀 ),其代码如下:
#!/usr/bin/env php
<?php
namespace think;
// 加载基础文件
require __DIR__ . '/vendor/autoload.php';
// 应用初始化
(new App())->console->run();
该控制台入口文件用于执行控制台指令,比如执行php think version
可以查看系统版本。系统内置了一些常用的控制台指令,当安装额外扩展时,也会增加相应的控制台指令,都通过这个入口文件来执行。在 CRMEB 商城开发和维护过程中,开发者可以利用控制台指令进行诸如数据库迁移、缓存清理等操作,提高开发和运维效率。
通过 ThinkPHP6.0 的单一入口模式,结合 CRMEB 开源商城系统的特点,开发者能够更便捷、安全地进行项目部署和访问,实现多端适配和功能扩展,满足电商业务的多样化需求。
附件:https://gitee.com/ZhongBangKeJi/CRMEB