У меня проблема с одним из моих приложений 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:\xampp\htdocs\portcms\functions.php on line 6
Warning: closedir(): 11 is not a valid Directory resource in C:\xampp\htdocs\portcms\functions.php on line 16
странная вещь здесь в том, что параметры $ _GET не нацелены на приведенный выше код. они передаются в другой блок кода, чтобы выбрать, какой контент div должен быть загружен.
кроме того, в другом приложении, где я использую эту настройку, она работает отлично, без каких-либо предупреждений.
редактировать: нерабочий пример выглядит следующим образом:
в index.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");
?>
который включает в себя мои файлы конфигурации, а также мой файл определения (filelocater).
он также включает 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>
нет, если я вхожу в index.php загружается без? мод = обзор и все peacy. как только я нажимаю на ссылку обзора, чтобы загрузить «мод» обзора (который пока является пустым файлом, содержащим только слово «тест»), я получаю предупреждения.
чтобы убедиться, что не было проблем с моей константой, которую я обменял FDIR в functions.php для жестко закодированной строки пути к каталогу. это также не устраняет предупреждение.
Еще одна странная вещь заключается в том, что функции загружаются так, как должны, даже если появляется предупреждение. например, функция, которая проверяет, является ли логин действительным, загружается через эту функцию. и вроде бы грузится без проблем
надеюсь, я предоставил достаточно информации. в противном случае, дайте мне знать, чтобы я мог выложить больше кодекса.
Также обратите внимание, что я новичок в Stackoverflow, поэтому, возможно, не все сделал правильно. Однако я исследовал множество подобных проблем здесь и в остальной части Интернета, чтобы найти решение.
заранее спасибо
Я выяснил, в чем причина проблемы.
в моей папке функций у меня был скрипт с именем mainloader.php
это содержало некоторое вне объявления функции (которое я забыл удалить после переписывания вещи в функцию).
по общему признанию я только узнал, что это была проблема, в то время как я пытался решить другую проблему, где div не был загружен в его надлежащем месте, но в начале индексного документа. когда я удалил оставшийся код, div вернулся на место, и загрузчик функции прекратил выдавать ошибки.
спасибо, что заглянул в это все же!
— МистерП
Других решений пока нет …