Итак, у меня есть простая html-страница, которая выглядит так.PHP include() очищает остальную часть HTML-документа?
<html>
<head>
<?php include("scripts/header.php"); ?>
<title>Directory</title>
</head>
<body>
<?php include("scripts/navbar.php"); ?>
<div id="phd">
<span id="ph">DIRECTORY</span>
<div id="dir">
<?php include("scripts/autodir.php"); ?>
</div>
</div>
<!--Footer Below-->
<?php include("scripts/footer.php"); ?>
<!--End Footer-->
</body>
</html>
Теперь проблема в том, что при загрузке страницы все испортилось. Просмотр исходного кода страницы показывает, что все после <div id="dir">
ПОЛНОСТЬЮ ОСТАЛОСЬ. Файл заканчивается. Нет прилагаемого сценария, нет </div>
, нижний колонтитул или даже </body>
, </html>
. Но это не выплевывает никаких ошибок. Просто стирайте документ из включенного без причины, или мои друзья могут понять. Никто из нас никогда не испытывал такого странного поведения.
Сценарий, вызываемый под вопросом, представляет собой скрипт, который будет извлекать файлы изображений с сервера (которые я загрузил, а не пользователи) и автоматически высылать ссылки на соответствующую страницу в архиве при загрузке страницы, потому что необходимость редактировать страница каталога каждый раз, когда я загружаю новое изображение, является настоящей проблемой.
Код в вопросе ниже:
<?php
//Define how many pages in each chapter.
//And define all the chapters like this.
//const CHAPTER_1 = 13; etc.
const CHAPTER_1 = 2; //2 for test purposes only.
//+-------------------------------------------------------+//
//| DON'T EDIT BELOW THIS LINE!!! |//
//+-------------------------------------------------------+//
//Defining this function for later. Thanks to an anon on php.net for this!
//This will allow me to get the constants with the $prefix prefix. In this
//case all the chapters will be defined with "CHAPTER_x" so using the prefix
//'CHAPTER' in the function will return all the chapter constants ONLY.
function returnConstants ($prefix) {
foreach (get_defined_constants() as $key=>$value) {
if (substr($key,0,strlen($prefix))==$prefix) {
$dump[$key] = $value;
}
}
if(empty($dump)) {
return "Error: No Constants found with prefix '" . $prefix . "'";
}
else {
return $dump;
}
}
//---------------------------------------------------------//
$archiveDir = "public_html/archive";
$files = array_diff(scandir($archiveDir), array("..", "."));
//This SHOULD populate the array in order, for example:
//$files[0]='20131125.png', $files[1]='20131126.png', etc.
//---------------------------------------------------------//
$pages = array();
foreach ($files as $file) {
//This parses through the files and takes only .png files to put in $pages.
$parts = pathinfo($file);
if ($parts['extension'] == "png") {
$pages[] = $file;
}
unset($parts);
}
//Now that we have our pages, let's assign the links to them.
$totalPages = count($pages);
$pageNums = array();
foreach ($pages as $page) {
//This will be used to populate the page numbers for the links.
//e.g. "<a href='archive.php?p=$pageNum'></a>"
for($i=1; $i<=$totalPages; $i++) {
$pageNums[] = $i;
}
//This SHOULD set the $pageNum array to be something like:
//$pageNum[0] = 1, $pageNum[1] = 2, etc.
}
$linkText = array();
$archiveLinks = array();
foreach ($pageNums as $pageNum) {
//This is going to cycle through each page number and
//check how to display them.
if ($totalPages < 10) {
$linkText[] = $pageNum;
}
elseif ($totalPages < 100) {
$linkText[] = "0" . $pageNum;
}
else {
$linkText[] = "00" . $pageNum;
}
}
//So, now we have the page numbers and the link text.
//Let's plug everything into a link array.
for ($i=0; $i<$totalPages; $i++) {
$archiveLinks[] = "<a href='archive.php?p=" . $pageNums[$i] . "'>" . $linkText[$i] . " " . "</a>";
//Should output: <a href= 'archive.php?p=1'>01 </a>
//as an example, of course.
}
//And now for the fun part. Let's take the links and display them.
//Making sure to automatically assign the pages to their respective chapters!
//I've tested the below using given values (instead of fetching stuff)
//and it worked fine. So I doubt this is causing it, but I kept it just in case.
$rawChapters = returnConstants('CHAPTER');
$chapters = array_values($rawChapters);
$totalChapters = count($chapters);
$chapterTitles = array();
for ($i=1; $i<=$totalChapters; $i++) {
$chapterTitles[] = "<h4>Chapter " . $i . ":</h4><p>";
echo $chapterTitles[($i-1)];
for ($j=1; $j<=$chapters[($i-1)]; $j++) {
echo array_shift($archiveLinks[($j-1)]);
}
echo "</p>"; //added to test if this was causing the deletion
}
?>
Что вызывает оставшуюся часть документа исчезать, как это? EDIT: две глупые ошибки синтаксиса вызывали это и были исправлены в вышеуказанном коде! Однако ссылки вообще не отображаются? Обратите внимание, что я довольно новичок в php, и я не ожидаю, что мой код будет самым эффективным (я просто хочу, чтобы работа darn работала!).
Приложение: если вы считаете, что переписывать код (а не просто исправлять ошибки), чтобы быть предпочтительным курсом действий, пожалуйста, объясните, что делает код, так как я не люблю использовать код. Понимаю. Благодаря!
Возможно, это ошибка, которая скрыта. Каков ваш уровень «error_reporting», и вы проверили, что страница работает иначе? Попробуйте использовать 'require' вместо' include' и посмотреть, если вы получите фатальную ошибку – casraf
Как указано выше. Я дал вам две синтаксические ошибки в качестве ответа, но вам действительно нужно убедиться, что вы включили отчет об ошибках (и на самый высокий уровень), а также научитесь проверять свои журналы. См. Документы об 'error_reporting' здесь: http://php.net/manual/en/function.error-reporting.php –
@ChenAsraf У меня были две глупые синтаксические ошибки, из-за чего все это было уничтожено. Основная причина не писать код, когда вы не спали через несколько дней (к сожалению, это то, что я, как правило, имею свои прозвища!). – Ipurgepeople