这已经有很长一段时间了,我想我应该寻求专家的回答。
我想知道通过单个文件汇集所有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
内部,我将所有输入消毒,用户认证,会话数据从数据库中拉出,设置了任何全局变量(常用变量,如$ longTime,$ longIP等...)。通过解释$_SERVER["REQUEST_URI"]
变量来路由请求。
基本上我有一个switch()
语句,它选择include()
的模块。我不明白的是:当PHP执行时,无论case指令是否为真,它都会执行每一个include()
吗?
我担心一段时间后我会有很多这些模块 - 如果PHP在运行时包含所有模块,它最终会占用太多的处理能力和RAM ......
-
编辑:
我真的只是问PHP是否会“读取”它可能必须包含的所有文件。我知道它实际上不应该执行代码。
如果我的include()
之一是2GB文件需要很长时间才能处理,那么PHP会在执行之前一直读取该文件吗?
-
编辑:
我发现了另一个类似的问题(我在发布这个问题之前做了很多搜索)
PHP behavior of include/require inside conditional
我想我可以关闭它。
答案 0 :(得分:2)
不,PHP将在到达代码片段时执行include。
这非常重要,因为你可以直接使用包含代码的php include文件。 E.g。
File1中:
<?php echo "Foo"; ?>
文件2:
<?php
echo "Before";
include("File1");
echo "After";
?>
有时您的PHP处理器甚至不知道在编译时要包含哪个文件。想象一下include("File".mt_rand(1,10));
之类的东西。 PHP不知道要包含的文件名,直到它到达include语句。
答案 1 :(得分:2)
即使条件不满足,PHP也会包含该文件吗?
不,include
和require
语句的解释和评估方式与其他PHP语句相同。在执行之前,PHP不会扫描包含的脚本。
这可以通过简单的测试来验证:
if(false)
{
include('does_not_exist.php');
}
以上不会产生任何错误或警告。如果在执行之前读取了包含,您会看到如下警告:
警告:include(does_not_exist.php):无法打开流:没有这样的文件或目录...
警告:include():无法打开'does_not_exist.php'以包含...