如何知道php脚本是否通过require_once()被调用? [复制]

2023-12-09

我的网络应用程序有很多模块。每个模块都有一个“主”php 脚本,该脚本根据发送到主模块的查询加载子模块:

//file: clientes.php

//check for valid user...
//import CSS and JS...

switch( $_GET["action"] )
{
    case "lista" :          require_once("clientes.lista.php"); break;
    case "listaDeudores" :  require_once("clientes.listaDeudores.php"); break;
    case "nuevo" :          require_once("clientes.nuevo.php"); break;
    case "detalles" :       require_once("clientes.detalles.php"); break;
    case "editar" :         require_once("clientes.editar.php"); break;         
    default : echo "<h1>Error</h1><p>El sitio ha encontrado un error.</p>";
} 

该主模块处理安全性并导入所有子模块所需的许多资源。当用户请求任何子模块时,绕过主模块上的所有安全措施,就会出现大问题!我的想法是在每个子模块上添加一行来测试它是否被直接调用并拒绝访问,或者是否通过另一个脚本调用,然后继续。我最不想做的事情是对每个文件重新进行安全检查,因为它会对数据库进行大量查询。

php 脚本是否知道它是否是通过require_once()还是直接打电话?我一直在尝试实施某种$_SERVER['REQUEST_URI'] and $_SERVER['PHP_SELF']陷阱,但我想知道是否有某种优雅的方法可以做到这一点。


我正在寻找一种方法来确定文件是否已被包含或直接调用,所有这些都来自文件内部。在我的探索中的某个时刻,我经历了这条线索。通过检查 PHP 手册中的本网站以及其他网站和页面上的各种其他线程,我得到了启发并想出了这段代码:

if ( basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"]) ) {
  echo "called directly";
}

else {
  echo "included/required"
}

本质上,它比较当前文件(可以包含的文件)的名称是否与正在执行的文件相同。


解释:

  • __FILE__ 是一个 PHP 魔法常量,它存储文件的完整路径和文件名,它的美妙之处在于,如果文件已被包含或需要,它仍然返回该文件(包含的文件)的完整路径和文件名。
    (魔法常量手册:http://php.net/manual/en/language.constants.predefined.php)

  • $_SERVER["SCRIPT_FILENAME"] 返回当前正在执行的脚本的绝对路径名。当包含/需要一个文件时,它不会执行(只是包含),它返回(比方说)“父”文件(包含另一个文件和执行的文件的文件)的路径名。

  • basename(string $path) 是一个返回路径的尾随名称部分的函数,在本例中是文件名。您也可以只比较完整路径和文件名,这确实会更好,实际上没有必要使用此功能,但这样感觉更干净,jajaj。
    (基本名称():http://php.net/manual/en/function.basename.php)

我知道现在回答主要问题有点晚了,但我猜这对那些和我有同样情况并且也经过的人来说可能会有用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何知道php脚本是否通过require_once()被调用? [复制] 的相关文章

  • 在多维数组 PHP 的所有键中搜索

    我想在多维数组中的所有键中搜索特定字符串 我只需要弄清楚它是否存在 仅此而已 我想知道访问者的 IP 是否存在于任何数组中 有没有我可以用来执行此操作的 php 函数或方法 我尝试过的每个函数或方法总是返回 false 数组中 数组搜索 数
  • 电子商务是否从头开始

    我需要开发一个包含电子商务部分的新网站 我来这里是想从你那里得到一些关于我应该走哪条路的提示 该网站将有一个静态部分 其中包括一些静态页面和用于销售产品的电子商务部分 我是 Django 和 PHP 开发人员 但这是我第一次需要开发电子商务
  • SetInterval 函数不适用于 PHP 文件

    我有这样的index html
  • PHP 异常处理与 C#

    这是一个非常基本的问题 我希望如此 我所做的大部分异常处理都是使用 C 进行的 在 C 中 任何在 try catch 块中出错的代码都会由 catch 代码处理 例如 try int divByZero 45 0 catch Except
  • 用 PHP 截断文件末尾

    我有一个日志文件 我想在 PHP 读取该文件后将其截断 我的代码目前如下所示 fp fopen file r ftruncate fp 125000 fclose fp 但是 这会通过保留first1MB 不过 我想保留last1Mb 的文
  • 在 CodeIgniter 中添加新页面

    对于我对 CodeIgniter 和 MVC 系统的无知 我提前表示歉意 我正在帮助一位家庭成员处理他们的商业网站 到目前为止 我已经能够仅通过逻辑来完成大部分所需的更改 但现在我已经走进了死胡同 我不打算继续支持他们 因为我显然不是 Co
  • 将 PHP 中的 openssl AES 转换为 Python AES

    我有一个 php 文件 如下所示 encryption encoded key c7e1wJFz PBwQix80D1MbIwwOmOceZOzFGoidzDkF5g function my encrypt data key encrypt
  • 转义用户数据,无需魔法引号

    我正在研究如何在来自外部世界的数据被用于应用程序控制 存储 逻辑等之前正确地对其进行转义 显然 随着 magic quote 指令在 php 5 3 0 中很快被弃用 并在 php6 中被删除 对于任何想要升级并进入新语言功能 同时维护遗留
  • 随机错误 symfony:ContextErrorException: 警告: simplexml_load_file(): I/O 警告: 无法加载外部实体

    在我的 Symfony 项目中 当我进入应用程序中的随机页面时 会出现以下随机错误 ContextErrorException Warning simplexml load file I O warning failed to load e
  • DataTables 第 2 页的分页未调用放大弹出窗口

    所以我有这个启用分页的数据表 我编码了一种方式 以便用户可以编辑表的行 当用户调用它在放大弹出窗口中打开的编辑页面时 它在第 1 页 从第 2 页起都运行良好 DataTable 及其前面停止调用 Magnific Popup 我只是不明白
  • 查明具有特定 ID 的会话是否已过期

    我正在创建一个上传功能 将用户上传的文件存储在服务器上 并以用户的会话 ID 作为名称 现在 我只想将此文件保留在服务器上 直到该会话处于活动状态 所以 我的问题是 如何根据会话 ID 确定会话是活动的还是过期的 以便在后一种情况下我可以安
  • Memcache 不会刷新或清除内存

    我一直在尝试清除我的内存缓存 因为我注意到使用时存储占用了近 30 的服务器内存ps aux 所以我运行了以下 php 代码 memcache new Memcache memcache gt connect localhost 11211
  • Zend RegEx Validator 的自定义有意义的错误消息

    我正在验证表单中的文本字段 如下所示 name new Zend Form Element Text name name gt setLabel First Name gt setRequired true gt addFilter new
  • Gearman,php 扩展问题:使用终端在 .. 中找不到类“GearmanWorker”,但可以在浏览器上使用

    我最近在 ubuntu 10 04 上安装了 gearman 并安装了它的 pecl 扩展 现在 当我在浏览器中运行一个 php 文件时 其中包含 client new GearmanWorker die var Dump client I
  • Yii 未检测到骆驼案例操作

    伊伊正在给我404 Error如果我声明这样的操作 站点控制器 php public function actionRegisterUser 这就是我在main php label gt Register User url gt site
  • ASP.NET MVC 3 中嵌入的 PHP 站点的 IgnoreRoute

    我有一个带有嵌入式 WordPress 博客的 MVC 3 网站 以下所有 url 均通过 MVC 定向 www mysite com www mysite com aboutus www mysite com contactus 我还有一
  • Lumen:无法打开流:.../vendor/monolog/monolog/src/Monolog/Handler/StreamHandler.php:107 中的权限被拒绝

    My OS is ubuntu 16 04 and I am running Lumen 5 5 When I try to run the app in the browser I get an error 500 我在 var log
  • 创建单个随机 Magento 优惠券

    我遇到了一些麻烦 我想要做的是每次有人订阅我们的时事通讯时 在 Magento 中自动生成一个随机优惠券代码 这张优惠券可减 10 美元 并且有exp 订阅后两周的日期 因此 我正在尝试编写一个简单的脚本 当提交 订阅我们的时事通讯 表单时
  • PHP date() 和 strtotime() 返回错误的月份 31 日

    我在用着date and strtotime 函数在下拉列表中显示接下来的 3 个月 PHP代码 echo date m Y strtotime 0 months echo date m Y strtotime 1 months echo
  • 如何统计订单总价?

    我有这些表 Orders id status user id address id 1 await 1 1 products id name price quantity 1 test1 100 5 2 test2 50 5 order p

随机推荐

  • AVAudioPlayer 不播放任何声音

    我正在开发一个 iOS 应用程序 需要使用AVFoundation框架 Xcode 4 中的工作区结构包含两个项目 Workspace 应用程序本身 主要项目 实用程序库 构建实用程序库后 会生成一个静态库 该静态库在主应用程序中用作框架
  • Numpy:最大值为 NaN

    我关于Python的问题真的很微不足道 我必须修改什么函数max 为任何编译器返回真实值 import numpy as np a np array 1 0 1 np nan The maximal value is 1 It is not
  • Excel VBA 中的多范围相交

    为什么这不起作用 我试图让 Excel 检查 B 列和 D 列中的任何更改 如果 B 列已更改 然后执行一些操作等 Private Sub Worksheet Change ByVal Target As Range Dim lc As L
  • 我可以使用 PHP 将 URL 变量传递给 IFrame 吗?

    我以前没有太多 或根本 使用过 PHP 我有以下代码 我认为应该可以采用 URL 变量并将其传递给 Iframe url 我的问题是 当我点击该页面时 它是打开的 而不是 http sitename com whats on ID 2 it
  • Build.scala 不是在运行中创建的

    我正在尝试学习游戏 正在做教程http www playframework com documentation 2 2 x ScalaTodoList 我遇到的问题是文件project Build scala 不是为我创建的 我应该手动创建
  • 事件触发的 Toast 通知 UWP

    想法 我正在为特定网络自动进行 wifi 登录 其中用户必须通过弹出诸如警报应用程序之类的 Toast 通知来输入凭据 但不是小睡或关闭按钮 而是登录或注销 问题 当用户连接到特定的 wifi 网络时 如何立即触发 toast 通知 您需要
  • 从 Python 调用 LibreOffice 时出错

    调用 LibreOffice 将文档转换为文本 这在 Linux 命令行中工作得很好 soffice headless convert to txt Text document to convert doc 但是当我尝试从 Python 运
  • Foreach 仅显示数组中的最后一项[重复]

    这个问题在这里已经有答案了 我试图创建一个 foreach 循环来迭代数组中的每个项目 但它只捕获最后一个项目 而不迭代第一个项目 我已经剥离了代码 仅显示相关部分 并添加了一些命令来识别问题 如上所述 message kk ll myAr
  • strip_tags() 和 mysqli_real_escape_string() 的安全性

    我正在参与一个关于信息安全的学校项目 其中一项作业是用 PHP 编写一些安全页面 我的小组中没有人了解 PHP 但这不是一个大问题 我们将学到足够的知识来创建所需的简单页面 学生助理给出的建议之一就是使用这两个函数strip tags an
  • Asp.Net MVC 5 中具有身份表和自定义表的多对多关系

    我正在尝试在 Asp Net Identity 生成的表中的用户与我自己的表之间建立关系 该关系必须是多对多 因为许多用户可以处理同一个任务 这是我的表 并且同一时间一个用户可以处理多个任务 public class Task public
  • 保持表单应用程序和 Windows 服务(或任何 n 层,实际上)之间的设置同步

    我有一个执行许多定期活动的 Windows 服务 并且我想从 Windows 窗体应用程序更改此服务的设置 不过 我不确定确保服务具有最新的用户首选项的最佳方法 运行频率 使用哪些文件夹 用户可以指定的其他内容 用户可以随时随意更改设置 我
  • 字体文件中的字体系列名称

    我有一个 ttf 文件 我想检索字体系列名称 通过导入 System Windows Media 命名空间可以最轻松地完成此操作 与从 ByteArray 中获取字体相比 这为您提供了更多的工作空间和更简单的 API using Syste
  • 在 glsl es 2.0、Gamemaker Studio 2.0 中获取渐变平方的问题

    我制作了一个包含 4 个三角形的三角形列表 中间点的颜色不同 然后目标是组合三角形以获得漂亮的渐变 但是三角形的边缘会产生不需要的线条 我不希望这些线条我希望它一直平滑 我怎样才能得到想要的结果 Images 着色器代码 Simple pa
  • 将tinyMCE与Angular 6一起使用,无需apikey(免费)

    我尝试使用 Angular 6 安装tinyMCE 我正在关注以下文档https www tiny cloud docs integrations angular2 一切正常 但我必须有一个 apiKey 才能使用tinyMCE 云 我收到
  • 在 data.table 中高效插入默认缺失行

    假设我有以下内容data table dt lt data table id c 1 1 1 1 1 1 2 2 2 2 wday c mon tue wed thu fri sat mon tue thu fri val c 2 3 5
  • 在 Heroku 上使用 Compass:/tmp 用于远程和本地样式表

    我目前正在使用 Compass 和 Heroku 使用这个配置Heroku 知识库上推荐 Heroku 有一个只读文件系统 因此编译后的样式表需要存储在 tmp 中 这在 Heroku 上远程运行得很好 然而 在本地 Rails 期望在 p
  • main 方法中的 ArrayIndexOutOfBounds 异常

    我收到数组绑定错误 但在我看来 数组从 0 开始 那么这段代码有什么问题呢 public class Quadratic public static void main String args double b Double parseDo
  • PHP 数组用键替换数字

    我有这个数组 Array result gt Success finals gt Array 0 gt Array id gt 633 name gt RESULT84 0 gt Array id gt 766 name gt RESULT
  • R + ggplot2 => 在方面饼图上添加标签[重复]

    这个问题在这里已经有答案了 我想在多面饼图上添加数据标签 也许有人可以帮助我 我的数据 year lt c 1 2 1 2 1 2 prod lt c 1 1 2 2 3 3 quantity lt c 33 50 33 25 34 25
  • 如何知道php脚本是否通过require_once()被调用? [复制]

    这个问题在这里已经有答案了 我的网络应用程序有很多模块 每个模块都有一个 主 php 脚本 该脚本根据发送到主模块的查询加载子模块 file clientes php check for valid user import CSS and