如何检查php文件是否成功包含?
如何检查php文件是否成功包含?,php,include,Php,Include,我想检查“ad.php”中是否包含“dbas.php”。我编写了代码- ad.php 我成功地测试了文件_exists()部分,但不知道include()是否能正常工作,因为我在localhost中进行了尝试,如果该文件位于目录中,那么它就永远不会包含失败。因此,我不知道如果存在大量流量,该代码在服务器中的行为如何。那么请告诉我我的代码正确吗 -谢谢 已解决:非常感谢您的回答。写信 echo "file is includ" 在“dbas.php”的末尾,存在文件(“dbas.php”)
我想检查“ad.php”中是否包含“dbas.php”。我编写了代码-
ad.php
我成功地测试了文件_exists()部分,但不知道include()是否能正常工作,因为我在localhost中进行了尝试,如果该文件位于目录中,那么它就永远不会包含失败。因此,我不知道如果存在大量流量,该代码在服务器中的行为如何。那么请告诉我我的代码正确吗
-谢谢
已解决:非常感谢您的回答。写信
echo "file is includ"
在“dbas.php”的末尾,存在文件(“dbas.php”)正在进行检查。如果存在,则执行包含
if(file_exists("dbas.php"){
include("dbas.php")
//continue with you code here
}
如果您希望绝对确保包含该文件,那么使用php更合适。只检查文件是否存在,而不检查文件是否实际可读
如果包含失败,require
将产生错误(您可以catch
捕获错误,请参阅Cerburs的答案)
编辑:
但是,如果您不希望脚本在包含失败时停止,请使用方法is_readable
以及file_exists
,如:
if( file_exists("dbas.php") && is_readable("dbas.php") && include("dbas.php")) {
/* do stuff */
}
将您的功能放入函数中,并使用它检查是否存在
include ("php_file_with_fcn.php");
if (function_exists("myFunc")) {
myFunc();
// run code
} else {
echo "failed to load";
}
在您的情况下,包含文件将是
function db_connect() {
$user = "user";
$pass = "pass";
$host = "host";
$database = "database";
mysql_connect($host, $user, $pass);
return mysql_select_db($database);
}
和主文件:
include("db_connect.php");
if (function_exists("db_connect")) {
if (db_connect() === TRUE) {
// continue
} else {
// failed to connect (this is a different error than the "can't include" one and
// actually **way** more important to handle gracefully under great load
}
} else {
// couldn't load database code
}
使用此代码而不是您的代码,因为在您的代码中,如果服务器中不存在文件,则会出现php错误,这是不好的,因此请使用此代码:
if(file_exists("dbas.php")) {
include_once("dbas.php");
} else {
echo"file is not found";
}
此代码表示如果服务器上存在文件,则未找到函数include else fileecho
只需使用require
:
try {
require 'filename.php';
} catch (Exception $e) {
exit('Require failed! Error: '.$e);
// Or handle $e some other way instead of `exit`-ing, if you wish.
}
还有一点没有提到:您可以添加一个布尔值,例如:
$dbasIncluded = true;
在dbas.php
文件中,检查代码中的布尔值。尽管通常情况下,如果一个文件没有正确包含,您会希望php踩刹车,而不是呈现页面的其余部分。我的“dbas.php”代码是这样的,当包含该文件时,页面上的数据库代码是活动的。我想知道,如果服务器中存在大量流量,我的代码检查文件包含是否正确。(我不确定这是因为我只检查了localhost。所以不知道是否适合大量流量服务器。)您可以通过使dbas.php
文件不被Web服务器读取来测试它。它将断言它存在,但不能包含它。当文件未找到时,不要在代码中使用代码bcoz。它显示php错误,这是不好的。您可以使用下面的我有post code,如果文件未在目录中找到,它不会抛出任何错误。如果文件在目录中,则只有以下代码将运行,否则将显示“数据库加载失败”。这就是我使用file_exists()检查文件是否在目录中的原因。OP似乎能够捕获错误。因此,require
可能不是最好的主意?是的,我喜欢“if(file_exists(“dbas.php”)&&is_readable(“dbas.php”)&&include(“dbas.php”){/*dostuff*/}“此代码。感谢您的帮助。请参阅@Cerbrus answer,以获取使用try/catch
的示例。抱歉,这是一个错误的建议,仅适用于某些特定情况!”!file\u exists
有一个比它“只检查文件是否存在,而不检查它是否真正可读”更严重的问题:include
将在不同的、有时是非平凡的地方寻找脚本(比如甚至不在“/”中寻找脚本,或者其他文件优先,尽管“/”中有一个文件,当然,哪个文件存在将永远不会存在。因此,除非重新实现PHP自己的内置查找逻辑以包含脚本,否则坦率地说,您唯一的选择就是拦截PHP错误。另一个需要明确说明的严重不一致性是:file\u存在(“dbas.PHP”)
查找当前目录,即使用getcwd
获得的目录。OTOH,include(“dbas.php”)
只保证在当前脚本自己的目录(即\uuuuuuu DIR\uuuuu
)中找到该文件,该目录很可能与另一个目录不同。(请注意,include_path
通常包含“.”,并且通常作为第一个条目,因此人们可能会继续避免像这样的草率行为,甚至不知道地雷……)我从您的代码中得到了一个想法,我将在dbas.php文件中初始化一个变量,并在ad.php中检查该值是否正确。然后确定dbas.php是否成功包含$i=100;//我将把这一行添加到dbas.php。我会在ad.php中检查,这个怎么样?我不会那样做的。我会把你的数据库连接代码放在一个函数中,检查它的存在并调用它。然后,您还可以处理连接故障,这比echo
-ing或(恐怖的!)die
要优雅得多代码>失败,您不必检查该函数是否存在,因为您的页面将在include上返回一个错误。当包含发生时,为什么要检查它是否存在,如果它不能“不”存在?@Cerbrus:我们谈论的是高负载问题,而不是存在问题(我似乎理解)。IMHO,您应该只在include文件中放置函数/类,而不是实际的页面逻辑。它使生成PHP文件的页面更具可读性。与函数相比,函数有副作用。“那么php错误就出现了,这是不好的”这是什么意思?php错误比回显未找到文件要好,因为错误中通常包含更多信息。是的,我完全同意你的观点,但在ux中这并不好,这就是为什么我说+1,因为它不像其他回复中那样重复文件名。但这不起作用,不是吗?Require抛出致命错误,try/catch无法捕获。正如Frodik所说:Require抛出致命错误,无法捕获。相反,您可以使用include,它只发出警告。您可以向set_error_handler注册错误处理程序以查找警告。但检查是否有错误会更容易
$dbasIncluded = true;