jjzjj

php - 如果 include() 是有条件的,即使不满足条件,PHP 也会包含该文件吗?

coder 2024-05-03 原文

这个问题困扰我很久了,我想我应该向专家寻求答案。 我想知道通过单个文件汇集所有 PHP 请求是否是一种糟糕的编程技术。我一直在一个网站上工作,不确定它是否会随着增长而扩展,因为我不能 100% 确定 PHP 如何处理 include() 函数。

为了更好地解释我是如何构建我的准框架的,这里是我的根 .htaccess 文件的一个片段:

# > Standard Settings
RewriteEngine On

# Ignore all media requests
RewriteRule ^media/ - [L]

# Funnel all requests into model
RewriteRule ^(.*)$ _model.php [QSA]

因此除了媒体目录中的内容之外的所有内容都被传递到这个单一脚本中。

_model.php 中,我有所有的输入清理、用户身份验证、从数据库中提取的 session 数据、任何全局变量(常用变量,如 $longTime、$longIP 等...)被设置。请求通过解释 $_SERVER["REQUEST_URI"] 变量进行路由。

本质上,我有一个 switch() 语句,它选择要include() 的模块。我不明白的是:当 PHP 执行时,它是否会执行每个 include() 而不管 case 指令是否为真?

我担心过一段时间我会有很多这样的模块——如果 PHP 在运行时包含所有模块,它最终会占用过多的处理能力和 RAM...

--

编辑:
我真的只是问 PHP 是否会“读取”它可能必须包含的所有那些文件。我知道它实际上不应该执行代码。 如果我的一个 include() 是一个需要很长时间处理的 2GB 文件,PHP 是否会在执行之前始终读取该文件?

-- 编辑:
我发现了另一个类似的问题(我在发布这个问题之前搜索了很多) PHP behavior of include/require inside conditional

我想我可以关闭它。

最佳答案

不,PHP 会在到达代码片段的那一刻执行 include。

这很重要,因为你可以直接用代码包含 php 文件。例如

文件1:

<?php echo "Foo"; ?>

文件2:

<?php
  echo "Before";
  include("File1");
  echo "After";
?>

有时您的 PHP 处理器甚至不知道在编译时要包含哪个文件。想象一下 include("File".mt_rand(1,10));。 PHP 直到到达 include 语句时才知道要包含的文件名。

关于php - 如果 include() 是有条件的,即使不满足条件,PHP 也会包含该文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14727116/

有关php - 如果 include() 是有条件的,即使不满足条件,PHP 也会包含该文件吗?的更多相关文章

  1. javascript - 如果 document.cookie 是一个字符串,为什么 document.cookie = ""不删除所有相关站点的 cookie? - 2

    我认为知道这个问题的答案将有助于我概念化浏览器存储的cookie与通过DOM提供的document.cookie之间的关系。 最佳答案 设置document.cookie由DOM2HTMLspecification指定.根据该规范,将其设置为空字符串应该会导致错误。这是一个设计糟糕的界面。这种关系是一团糟。您不必想象它,您只需要忍受它。 关于javascript-如果document.cookie是一个字符串,为什么document.cookie=""不删除所有相关站点的

  2. javascript - 缓存 list 离线应用程序不刷新 Chrome 中的 javascript 文件 - 2

    我正在使用缓存list文件开发离线网络应用程序。我在刷新javascript文件时遇到问题。如果我更改.js文件(在list文件中列出),然后更改list文件版本号。并保存它,然后更改后的.js文件不会在客户端上重新加载。我需要做什么才能让.js文件刷新?谢谢 最佳答案 那是因为网络服务器告诉浏览器将静态文件缓存几个小时。因此浏览器不知道list文件已更改。您可以清除所有应用程序数据“或”配置list不可缓存的Web服务器...阅读http://diveintohtml5.info/offline.html了解更多信息如果您想清除c

  3. JavaScript:从 GitHub 链接还是链接到本地​​文件? - 2

    我知道当链接到托管在GoogleCode上的库(例如jQuery)时最好链接到托管的(Google的)。但是当GitHub等站点上托管其他库和框架时(如jQueryLightBox,您认为最好直接从GitHub链接到该库,还是我应该下载它并链接到本地文件? 最佳答案 最好下载并链接到本地​​文件。在github上,您无法确定该文件是否会保持不变。如果开发人员更新文件并破坏了您的代码,您将不得不修复代码或下载旧版本并在本地链接。此外,这种链接不是github的重点,并且不能保证他们不会禁止将来破坏您的网站并强制您在本地链接的能力。

  4. javascript - jsx 三元运算符中的多个条件 - 2

    <divstyle={{'backgroundColor':status==='approved'?'blue':'black'}}></div>黑色是默认颜色,但如果我想添加第三个条件怎么办?状态可以是“已批准”、“已拒绝”、“待定”或更多。 最佳答案 您可以执行以下操作:<divstyle={{'backgroundColor':status==='approved'?'blue':sta

  5. javascript - "download"而不是 "open"一个文本文件 - 2

    在GWT应用程序中,我想要一个按钮,单击该按钮会在给定的url上下载文件。这是一个带有.out后缀的纯文本日志文件(不是html)。我的第一次尝试是使用“window.open()”(尝试了gwt和原生javascriptwindow.open)不幸的是,浏览器(尝试过chrome和firefox和ie)试图变得聪明并注意到该文件是一个文本文件,因此在弹出窗口中显示内容,而不是下载它。更糟糕的是,浏览器似乎将.out文件渲染为html,并弄乱了所有换行符和制表符(基本上是所有空格)。我无法控制为.out文件提供服务的http服务器。所以我正在寻找客户端解决方案。有人可以为我建议一个解决

  6. javascript - 如何访问另一个js文件中定义的js数组 - 2

    如何访问在另一个JavaScript文件中定义的JavaScript数组? 最佳答案 如果变量是全局变量,并且您首先在HTML文件中包含带有变量的JS文件,则可以通过第二个JS文件访问它:<scripttype="text/javascript"src="somefile_with_variable.js"/><scripttype="text/javascript"src="somefile_reading_variable.js"/>

  7. python:.py文件转.dll文件(.pyd文件) - 2

    基于python,把python文件转为.dll文件,我查了很多方法,没有能把python文件直接转.dll文件的。.py要转dll文件都是先转成.pyd文件,然后再把.pyd这个后缀改成.dll,如此才成功地把.py文件转为了.dll文件。.py文件转.pyd文件,我综合了我搜索到地教程,写成以下的三个方法。下面的方法都是基于我安装了anaconda,以及c++语言相关的程序(c++相关程序是个坑,要必须安装的࿰

  8. 电脑桌面文件不见了怎么恢复? - 2

      众所周知,我们都会在电脑桌面上放置各种文件、文件夹等,这样很容易造成文件堆积过多,桌面杂乱无章,影响查找文件速度。这不可避免的要对电脑桌面进行整理,但有时候我们会出现重要文件突然就找不到了,这时电脑桌面文件不见了怎么恢复?电脑桌面文件不见了怎么恢复?如果是在我们不知情的情况下,一般都会进入回收站。如果是这样,这种情况还是可以轻松解决的。我们可以打开回收站,找到删除的文件右键“还原”,或者直接拖到桌面,这样就可以恢复删除的文件。当然了&#x

  9. 三星手机「我的文件」应用闪退问题的解决方法 - 2

    文章目录1.「我的文件」闪退问题2.解决方法解决方法1:正解,允许使用设备ID解决方法2:卸载更新解决方法3:使用其他【安全可靠】的文件管理工具警告3.允许使用设备ID,为什么是正解?4.验证Step1:验证前的状态Step2:关闭「允许使用设备ID」Step3:打开「允许使用设备ID」附:闪退时的调用栈附:设备ID是什么?OAID的用途设备ID的全称参考1.「我的文件」闪退问题发生闪退问题时的手机环境:OneUI

  10. javascript - 如果 deviceready 事件已经触发,我如何检查 cordova 是否准备就绪? - 2

    在cordova通过cordovacreate...提供的示例应用程序中,以下代码监听deviceready事件:bindEvents:function(){document.addEventListener('deviceready',this.onDeviceReady,false);},这很好,但是如果事件在我有时间监听之前就被触发了会发生什么?例如,将示例应用(上方)中的代码替换为以下内容:bindEvents:function(){setTimeout(function(){document.addEventListener('deviceready&

随机推荐

  1. javascript - 从范围中排除某些字符 - javascript 正则表达式 - 2

    只验证单词最简单的正则表达式(我认为)/^\w+$/我想从中排除数字和_(因为它现在接受aa10aa和aa_aa,我想拒绝它们)我觉得可以通过/^[a-zA-z]+$/这意味着我必须采取与之前不同的方法。但是如果我想从这个范围中排除任何字符怎么办假设我不允许k、K、p、P或更多。有没有办法在不改变范围的情况下在范围内添加排除列表? 最佳答案 要从[a-zA-Z]中排除k或p,您需要使用否定先行断言。(?![kpKP])[a-zA-Z]+必要时使用anchor。^(?:(?![kpKP])[a-zA-Z])+$它在匹配每个字符之前检查

  2. javascript - JavaScript 中提升的顺序 - 2

    functiong(){varx;functiony(){};varz;}我想知道上面的代码在提升时的确切顺序。理论1:var和function之间的顺序保持原样:functiong(){varx;functiony(){};varz;}理论2:var出现在function之前:functiong(){varx;varz;functiony(){};}理论3:function出现在var之前:functiong(){functiony(){};varx;varz;}哪个理论是正确的? 最佳答案 根据ECMAScript5,secti

  3. javascript - 如何使用 Angular JS 将一个模型绑定(bind)到多个输入 - 2

    我有一个用于MySQL日期字段的表单输入。例如:2015-01-31。我想让用户使用3种不同的表单输入来输入。一年一个,一个月一个,一天一个。显然ng-model不会开箱即用,因为我试图将日期字符串的一个部分绑定(bind)到每个输入。我很确定这样做的方法是再见创建三个“临时”范围变量/模型$scope.year;$scope.month;$scope.day;...然后以某种方式将它们组合/绑定(bind)到实际值。//Ifonlyitwerethiseasy!$scope.date=$scope.year+"-"+$scope.month+"-"+$

  4. javascript - js lodash 按更深的字段排序 - 2

    我有一个对象数组,我想按更深的字段进行排序。我该怎么做?vararray={"id":27,"name":"LaPrimitaProduct","lottery":{"id":1,"name":"LaPrimitiva","jackpotAmount":10000,}},{"id":28,"name":"LaPrimitaProduct","lottery":{"id":1,

  5. javascript - 在基于原型(prototype)继承的语言中使用类 - 2

    followinganswertothisquestion很好地解释了经典继承和原型(prototype)继承之间的区别。我很想了解这一点,因为我开始使用Java,但后来转向了Javascript。在他的回答中,他针对原型(prototype)继承指出,“所有关于类的业务都消失了。如果你想要一个对象,你只需编写一个对象。”但是有这么多文档和questions关于如何在Javascript中“编写类”。为什么要插入这种语言成为它不是的东西。我正在寻找在JS应用程序中使用类在这种原型(prototype)语言中更明智的情况的具体示例,以及笨拙地将方钉插入圆孔的好处。正如Aravind所说,

  6. javascript - 替换字符串数组Javascript中的字符 - 2

    我已经定义并填充了一个名为vertices的数组。我能够将输出打印到JavaScript控制台,如下所示:["v2.117330.02041441.0852","v2.123030.01312561.08902","v2.123070.01313261.10733"...etc.]但是我希望从每个元素中删除“v”字符。我尝试使用.replace()函数如下:varx;for(x=0;x<10;x++){vertices[x].replace('v','');}在这段代码之后将数组打印到控制台时,我看到

  7. javascript - 未跟踪 Angulartics GA 事件 - 2

    我正在使用angularticsgoogleanalytics在我的项目中。我已经按照文档所说的进行了设置。它实时跟踪页面浏览量,但未跟踪事件。这是我的代码:查看://Notgettingtracked<ahref="#"ng-click="download()"analytics-on="click"analytics-event="Download">Push</a>index.html<!--PutYourGOOGLEANALYTICSCODEBelow--><scripts

  8. javascript - 使用 ng-options 过滤大写字母 - 2

    我没有在ng-options中找到如何将首字母大写或大写。我的选择:<selectng-model="company.currency.code"ng-options="currency.codeascurrency.codeforcurrencyincurrency_list></select>在Controller中:$scope.currency_list=[{code:'eur'},{code:'usd'}];我想打印“EUR”、“USD”或“Eur”、“Usd”,而无需手动循环我的对象。这有可能吗

  9. javascript - 清除 Firefox 中的控制台 - 2

    有没有办法清除Firefox中的控制台?在Chrome中我可以使用...console.clear()(不确定它是否适用于Safari或Opera)但是我还没有找到适用于Firefox的解决方案。这种类型的API还不可用吗?是否有不需要的解决方法?console.log("\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n"); 最佳答案 在firefox中,您只需输入clear()。做得很好。以下是用于Javascript控制台命令的开发人员网站的链接:http:/

  10. javascript - 如果 deviceready 事件已经触发,我如何检查 cordova 是否准备就绪? - 2

    在cordova通过cordovacreate...提供的示例应用程序中,以下代码监听deviceready事件:bindEvents:function(){document.addEventListener('deviceready',this.onDeviceReady,false);},这很好,但是如果事件在我有时间监听之前就被触发了会发生什么?例如,将示例应用(上方)中的代码替换为以下内容:bindEvents:function(){setTimeout(function(){document.addEventListener('deviceready&