我的一个PHP应用程序有问题。我使用以下代码块将我的函数包含在应用程序中:
// Opening the directory where the functions are located and reading the contents
if (is_dir(__FDIR__)){
if ($dh = opendir(__FDIR__)){
while (($file = readdir($dh)) !== false){
if ($file != "." && $file != "..") {
//include all files found in the functions directory
include_once(__FDIR__.$file);
}
}
closedir($dh);
}
}
这通常工作正常,但是一旦我在URL中加载带有$_GET参数的URL,我就会收到以下警告:
Warning: readdir(): 11 is not a valid Directory resource in C:xampphtdocsportcmsfunctions.php on line 6
Warning: closedir(): 11 is not a valid Directory resource in C:xampphtdocsportcmsfunctions.php on line 16
奇怪的是,$_GET 参数不针对上述代码。 它们被传递给不同的代码块,以选择应该加载哪个内容div。此外,在我使用此设置的另一个应用程序中,它可以完美运行而不会引发任何警告。
编辑:非工作示例如下:在索引中.php我有以下代码:
<?php
//starting the session;
session_start();
//getting required files;
require_once('fileloc.php'); //file locater
require_once(__CONFIG__); //config file;
require_once(__FUNCTIONS__); //function loader-file;
require_once(__CDIR__."class.db.php"); //database class for database manipulation (replace with class-loader?);
//verifying the logged on user;
$ver = login($_SESSION['username'], $_SESSION['pass']);
if (!isset($ver) || $ver != 1) {
//could not verify user, destroying session and return to login screen;
session_destroy();
header('location: login.php');
}
//building the page;
require_once(__MDIR__. "header.php");
if ($ver == 1) {
require_once(__MDIR__."main.php");
}
echo __FDIR__.'overview.php';
require_once(__MDIR__. "footer.php");
?>
其中包括我的配置文件以及我的定义文件(文件定位器)。它还包括main.php其中包含以下代码:
<div class="container">
<div class="bar">
<p>welcome: <b><?php echo $_SESSION['username']; ?> | <a href="logout.php">logout</a></b></p>
</div>
<div class="nav">
<ul>
<li><a href="?mod=overview">overview</a></li>
<!--<li><a href="">settings*</a></li>-->
<li><a href="">pages</a></li>
<li><a href="">portfolio management</a></li>
<!--<li><a href="">themes*</a></li>
<li><a href="">users*</a></li>
<li><a href="">plugins*</a></li>-->
</ul>
</div>
<div class="main">
<?php
if (isset($_GET) && !empty($_GET['mod'])) {
clean_input($_GET['mod']);
include_once(__MDIR__.$mod.'.php');
}
?>
</div>
</div>
如果我登录索引,则不.php在没有 ?mod=Overview 的情况下加载,一切都很整洁。 一旦我按下概述链接以加载概述"mod"(目前是一个仅包含"测试"一词的空文件),我就会收到警告。
为了验证我的常量没有问题,我在函数中交换了 FDIR.php 为目录的硬编码文件路径字符串。 这也没有解决警告。另一个奇怪的事情是,即使出现警告,函数似乎也像它们应该的那样加载。例如,检查登录名是否有效的函数是通过此函数加载的。而且似乎加载没有问题
希望我提供了足够的信息。 否则让我知道,以便我可以放置更多代码。
另请注意,我是Stackoverflow的新手,所以可能没有做对所有事情。然而,我确实在这里和互联网的其余部分研究了多个类似的问题,以找到解决方案。
提前致谢
我已经找到了导致问题的原因。在我的函数文件夹中,我有一个名为 mainloader 的脚本.php这包含了一些函数声明之外的内容(在将事物重写为函数后我忘记删除它)。
诚然,当我试图解决另一个问题时,我才发现这是问题所在,其中div 没有加载到正确的位置,而是在索引文档的开头。 当我删除剩余的代码时,div 弹出回原位,函数加载器停止弹出错误。
不过感谢您的调查!- 先生P