php source&instance(源&副本)的代码结构

PHP代码审计入门题 来源:https://buuoj.cn/challenges 点开出现一个滑稽脸 查看网页源代码,发现突破点: 在URL后面拼接这个source.php,发现了source.php文件: http://320a5c2d-1f76-4156-884c-00846ec2ff63.node3.buuoj.cn/source.php <?php highlight_file(__FILE__); class emmm { pub... 阅读详情
以前做的一个网站,有分站需求,一个北京分站,一个上海分站。分别使用两个路径:
localhost/bj/
localhost/gz/
当时是使用 phpcms2008 进行搭建,直接复制了两份源代码,每个分站是一个 phpcms2008 。
这种结构一个维护操作(比如修正bug)就得在两份源代码中各做一次。

所以希望可以多个分站都使用同一套源代码。

实际上,phpcms v9 就好像支持多个站点发布,但是因为已使用 phpcms2008 ,所以想从代码结构上下手进行改造。

phpcms2008 属于多入口,即不同的功能通过浏览器直接请求不同的 php 实现,如果使用单一入口,就能通过不同的入口让一套源代码使用不同的数据库,实现一个程序多个分站。
PHP 单一入口的特有作用

若需要在某个分站中加入某个功能,其它分站不需要,那单一入口也无法应付。于是,设想出了下列复杂的“源&副本”代码结构。

可以共用的代码放在一个目录下,就像 thinkphp 框架放在一个目录可以被多个应用使用,称为“源”目录。
各个分站独有的代码放在各个分站自己的目录下,称为“副本”目录。
“源”使用 source 这个单词,缩写为 sour 。“副本”使用 instance (实例)这个单词,缩写为 inst. wow 中“副本”就是用这个单词。

这个结构使用的是单一入口,一个分站如果不需要定制独有的功能,只需要添加一个入口文件即可。源代码目录结构如下:

/sour/ :“源”目录。
/inst/ :“副本”目录。
/inst2/ :第二个“副本”目录。
/inst3/ :第三个“副本”目录。
...

源与副本目录的结构一样。比如需要定制源目录中某个模块的某个控制器,只需要在自己的副本目录相同的路径定制源代码,入口调度器会优先调用副本中的代码。
(这种效果受 phpcms v9 的启发)

这实在是一个看上去很美的代码结构。但是在试实现的过程中,发现这个结构实现起来非常麻烦。
具体遇到的问题就是路径问题,使用这个结构,实际上就是要用 PHP 手工把物理路径不同的两个文件夹(源与副本)中的文件在逻辑上合并成一个文件夹,查找文件时先从副本中找,找不到再到源中找。
由于要解决路径这个问题就已经很麻烦,所以没在继续实现下去。

后来回想了一下需求,发现其实单一入口已经能应付大部份“分站”这样的情况,实在需要在某个分站定制功能,也不需要这么复杂的解决方法。
所以,最后放弃这种代码结构。本文谨作记录。
iwebshop商城系统在商品(货品)库存量上的设计缺点 公司要做一个商城,选用了iwebshop这套开源PHP商城系统,在检查其对商品库存量的操作时,发现iwebshop并没有对库存量操作做设计。 在需要做库存操作时(添加,减少),只是简单地用update语句set一下商品或货品表的库存字段。 当用户把商品加入购物车时,会检查一下商品的库存量,但不会修改库存量,这一步没什么问题,相关的代码在: /classes/cart.php # ge 阅读详情

相关推荐

PHP source

PHP user manual book

php中的instance,浅谈thinkphp5 instance 的简单实现

最近学习 ThinkPHP5,第一次看到 TestClass::instance() 就能创建 TestClass 实例的方法。感到很好奇,翻阅 ThinkPHP 的源代码,大体理解了 它的 设计思想,非常的先进。老规矩,直接上代码:class TestClass {public static function instance() {return new self();}public $dat...

weixin_31260665的博客 1513

UE5新手必看:3种UI定位方法实战(含蓝图配置截图)

本文为UE5新手详细解析了三种核心UI定位方法:屏幕空间、场景空间和世界空间。通过实战蓝图配置与控件操作,指导开发者如何根据HUD、角色血条、3D物体标记等不同应用场景,正确选择并配置UI的定位方式,以实现清晰的信息传递与沉浸式体验。

weixin_29018815的博客 473

查看php源文件,source.php查看源文件

source.php查看源文件更新时间:2006年12月09日 00:00:00 作者:/***ShowSource**@authorAvenger*@version$Id2003-07-109:09:03$*/require_once'header.inc.php';tpl_load('left.tpl');//Checkurlvalueif(!isset...

weixin_35348899的博客 1117

从‘平行’到‘鱼骨’:手把手拆解AlGaN/GaN HEMT多栅指结构的布局优化实战

本文深入探讨了AlGaN/GaN HEMT多栅指结构的布局优化,从传统的平行栅结构到创新的鱼骨栅结构,详细解析了如何通过优化信号路径和热管理提升功率器件的性能。文章结合实测数据和EDA工具,展示了鱼骨栅结构在相位一致性、热阻和版图利用率方面的显著改进,为射频功率放大器设计提供了实用指导。

weixin_27061475的博客 439

手把手教你用Payload Dumper工具,把官方卡刷包变成线刷包救砖(附Fastbootd进入方法)

本文详细介绍了如何使用Payload Dumper工具将官方卡刷包转换为线刷包进行救砖操作。通过提取payload.bin文件中的分区镜像,并利用fastbootd模式完成刷写,帮助用户解决安卓设备系统故障问题。文章包含环境搭建、工具使用、常见问题解决方案等实用内容,适合需要刷机救砖的用户参考。

weixin_42639246的博客 616

深度强化学习内存优化:Spinning Up解决OOM问题的终极指南 [特殊字符]

Spinning Up是一个由OpenAI开发的深度强化学习(Deep RL)教育工具包,旨在帮助开发者和研究者快速上手深度强化学习。然而,在实际使用过程中,内存溢出(OOM)问题常常成为新手面临的主要挑战。本文将为您提供Spinning Up内存优化的完整解决方案。 ## 为什么深度强化学习容易遇到内存问题?🧠 深度强化学习算法通常需要处理大量的状态-动作对数据,这些数据需要在内存中进行缓

gitblog_00110的博客 1038

结合 Conda 手动安装 RepeatMasker

RepeatMasker 是一个广泛使用的生物信息学工具,用于识别和屏蔽(mask)基因组序列中的 重复序列(repeats) 。在使用过程中需要调用重复序列数据库(Repbase 和 Dfam),如果使用Conda安装的话会出现许多问题,因此推荐手动安装。在此记录我手动安装RepeatMasker的流程,希望对各位同学有所帮助。

m0_65437087的博客 2535

Marko认证授权:用户认证与权限控制完整指南

Marko作为一款声明式、基于HTML的Web应用构建语言,为开发者提供了简洁高效的开发体验。本文将详细介绍如何在Marko项目中实现用户认证与权限控制,帮助你构建安全可靠的Web应用。 ## Marko项目架构概览 Marko的编译流程是实现认证授权功能的基础。了解这一流程有助于我们更好地理解如何在合适的环节嵌入认证逻辑。 [![Marko编译流程](https://raw.gitcode

gitblog_00908的博客 441

银河麒麟v10-arm SEALOS离线部署k8s集群(v1.22.8)

示例 如果你想保存一个名为 "my_snapshot" 的 etcd 快照到指定的对象路径你可以使用以下命令: sealos etcd save --backupPath /root --name my_snapshot 如果文件名带时间戳:my_snapshot$(date +"%Y%m%d_%H%M%S") 会生成一个形如 20230913_143045 的时间戳。--restorePath string:指定快照恢复目录(默认为 "/opt/sealos/etcd-restore")。

xjudt的博客 3286

毕设-MobileNetV4:给YOLOv8装上轻量化“引擎”——通用瓶颈与C2f融合的实战教程

本文介绍了一种将MobileNetV4与YOLOv8结合的目标检测模型轻量化方案。MobileNetV4通过通用瓶颈(UB)结构实现多任务适配,其核心改进包括动态卷积核、注意力机制和多路径特征聚合,显著提升特征提取能力。作者详细阐述了如何在YOLOv8框架中实现MobileNetV4的通用瓶颈模块,包括"膨胀-卷积-注意力-压缩"的流程设计,并构建完整的backbone网络。该方案通过融合MobileNetV4的轻量化优势与YOLOv8的高效检测架构,在移动设备上实现了精度与速度的良好平

FJN110的博客 504

php中source,PHP中source #N问题的解决方法

最近写PHP里面的查询经常会遇到source #4或者source#5这样的问题,也就是通过mysql_query($sql1)进行一段查询的操作,返回的结果不是想要的字段而是source,去网上查了一些资料都说是什么‘资源'的问题,虽然对于出现这种情况的原理还是不甚了解,但是解决方案是有了,下面是解决这个问题的代码:复制代码 代码如下:$result2 = mysql_query("SELECT...

weixin_42299396的博客 504

训练救星!EMA多尺度注意力让YOLOv11轻松攻克自定义数据集不涨点难题

在目标检测模型训练中,自定义数据集不涨点是阻碍算法落地的核心痛点之一。传统训练策略在数据分布特殊、样本量有限的场景下极易陷入收敛停滞,而 EMA(指数移动平均)结合多尺度注意力的方案,在自定义数据集上实现mAP 提升 6.5%,同时让训练曲线从“平缓停滞”转为“持续攀升”,彻底解决创新点在自有数据上的性能瓶颈。本教程将带你从原理到实践,通过 EMA 多尺度注意力为 YOLOv11 注入训练稳定性,让你的自定义数据集模型训练实现质的飞跃。EMA 衰减率:小样本数据集建议将decay。

FJN110的博客 160

PHP中source #N问题

最近写PHP里面的查询经常会遇到source #4或者source#5这样的问题,也就是通过mysql_query($sql1)进行一段查询的操作,返回的结果不是想要的字段而是source,去网上查了一些资料都说是什么‘资源’的问题,虽然对于出现这种情况的原理还是不甚了解,但是解决方案是有了,下面是解决这个问题的代码: $result2 = mysql_query("SELECT imageP...

iteye_8029的博客 155

第一节:Vben Admin 最新 v5.0 (vben5) + Python Flask 快速入门

vben5 快速入门。 Vben Admin 框架新出的版本V5.5.4,而之前的Vben Admin 2.x 目前已存档,仅进行重大问题修复。之前在2.x版本曾经简单完成了一版专栏文章,当时也是收获了一些好评和建议。本次决定在v5 版本基础上再完成一次前后端的搭建。希望大家继续多多支持。项目精简后,再次启动项目,执行 pnpm run dev点击登录,可以看到接口报错,现在前端请求的后端有报错,下一节处理这部分逻辑。

cuiwin的专栏 7065

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

PHP2(.phps)

phps即为 PHP Source。 phps文件就是php的源代码文件,通常用于提供给用户(访问者)查看php代码,因为用户无法直接通过Web浏览器看到php文件的内容,所以需要用phps文件代替。其实,只要不用php等已经在服务器中注册过的MIME类型为文件即可,但为了国际通用,所以才用了phps文件类型。 它的MIME类型为:text/html, application/x-httpd-php-source, application/x-httpd-php3-source。 XCTF的PHP

qq_53106085的博客 1164

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

php mysql source_MySQL 数据库 source 命令详解_MsSql

这篇文章主要介绍了MySQL 数据库 source 命令详解及实例的相关资料,需要的朋友可以参考下MySQL 数据库 source 命令详解及实例MySQL 数据库 source 命令,该命令是数据库导入命令。source 命令的用法非常简单,首先你需要进入 MySQL 数据库的命令行管理界面,然后选择需要导入的数据库,执行 source 命令。如下图所示。MySql 数据库 source 命令m...

weixin_42524703的博客 334

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

php mysql source_Mysql数据库导入命令Source详解

Mysql数据库导入命令Source详解几个常用用例:1.导出整个数据库mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u root -p dataname >dataname.sql这个时候会提示要你输入root用户名的密码,输入密码后dataname数据库就成功备份在mysql/bin/目录中.2.导出一个表mysqldump -u 用户名 ...

weixin_29791743的博客 370

PHP源码阅读工具介绍(Source Insight)

Source Insight工具下载很简单,官网下载就可以,收费的,直接百度搜索破解方法就可以搞定。 首先第一步: 点击上方的Project,New Project, 点击OK, 设置好源码路径,点击确定就好了,记得点击下那个P(Project Window);已经能方便的阅读源码了。 ...

咖啡如同生活的专栏 1028

mysql php source_mysql source导入数据

我们知道不管是通过phpMyAdmin还是其他工具,导入的数据量比较大的时候,有时候根本导入不了,或者很慢。下面我们详细介绍一下source命令,通过source命令导入数据量很大的数据库。方式一常用source命令导入数据库1、进入mysql数据库控制台,或者打开运行CMD控制器 输入:mysql-uroot-p根据安装时的mysql用户名和密码访问mysql2、选择数据库mysql&g...

weixin_28717411的博客 2081

2017-12-29-PHP设计模式【状态模式】 - 副本

layout title date author desc in_head post PHP设计模式之状态模式 2017-12-29 09:30:02 +0800 南丞 设计模式(Design Pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更...

PFinal社区 154

PHP 单一入口的特有作用

在说单一入口之前,先说说多入口。Discuz!, PHPCMS 2008, DedeCMS 都是采用多入口的结构。 多入口,即通过访问不同的 php 文件运行对应的功能。如: /index.php - 网站首页 /show.php?id=1 - 内容页 /list.php?page=2 - 列表页 /login.php - 用户登录页 …… 多入口都是通过包含

朱健强的blog 天行健 君子以自强不息 5207

PHP 用什么代替 echo exit 的调试方法

想当年单枪匹马写代码的时候,用 echo+exit 的方法调试程序,效果很不错。但后来工作之后,在公司的服务器上运行着一套程序,在开发用的机上也运行着同一套程序,在开发时还是可以用 echo+exit 的方法调试,调试完后再放上服务器上。但因为是不同的机子,在开发时测试无问题可能上到服务器上就有问题了,于是必须调试服务器上的程序。但服务器上的程序是24小时对外公开的,不能把整个程序直接 exit

朱健强的blog 天行健 君子以自强不息 3427

phpcms2008 内容模型说明

cms 通过内容模型功能实现了在后台即可管理文章数据表的功能。内容模型是一个 cms 最基本的功能。 每个内容模型对应一张数据表,添加一个内容模型就会添加一张数据表,删除一个内容模型就会删除一张数据表。 模型与数据表的对应规则是:数据表名=表前序 + c_ + 模型定义的表名。 对应的数据表就是 phpcms2008_c_jieju 在后台可以管理模型数据: 模型

朱健强的blog 天行健 君子以自强不息 3091

phpcms2008, phpcmsV9, yaf, ThinkPHP, QeePHP, CodeIgniter, Zend Framework 目录结构小结

说明: 本文希望通过查看一些开源的 PHP 项目和 PHP 框架发现有利于模块化的项目目录结构规则。 # PHPCMS 2008 admin ——核心模块后台控制器      * templates ——核心模块后台模板 data ——文件缓存目录 images ——css, js, jpg 等文件目录 include ——核心模块定义类文件。      * adm

朱健强的blog 天行健 君子以自强不息 2743

手动安装图度注意事项

图度主页 https://www.tudu.im/ https://github.com/OrayDev/tudu-web   #Cookie及端口问题: Setcookie 函数第5个参数域名部份。不能加入端口号,加入端口号cookie设置会失败。 Setcookie(“name”, “value”, time()+3600, ‘/’, ‘127.0.0.1:80’); //第5个参

朱健强的blog 天行健 君子以自强不息 2460
上一篇: php 数据库访问类(模型 Model) v1.1
下一篇: phpcms2008, phpcmsV9, yaf, ThinkPHP, QeePHP, CodeIgniter, Zend Framework 目录结构小结
gevolution90
博客等级 码龄18年 19粉丝 67原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值