У меня есть HTML-страница, которая использует файл php в качестве файла сценария, например так:
<!doctype html>
<html lang="en">
<head>
...
<script src="../script.js.php"></script>
</head>
...
Файл script.js.php имеет что-то вроде этого:
<?php
header('Content-type:text/javascript; charset=utf-8');
$someVar = [];
foreach (glob('*.txt') as $filename) {
$someVar[] = $filename;
}
?>
... here starts the javascript code
Как можно видеть, script.js.php находится в родительской папке HTML-файла, поэтому происходит то, что функция PHP glob () видит родительскую папку, а не папку, в которой находится HTML-страница, поэтому она выводит весь текст файлы внутри этой папки.
Есть ли способ изменить этот код так, чтобы я мог иметь $ someVar со списком текстовых файлов внутри папки HTML-файла?
Спасибо.
РЕДАКТИРОВАТЬ: Я думаю, что это нуждается в разъяснении. Один и тот же файл PHP будет использоваться некоторыми другими файлами HTML, другими файлами HTML, расположенными в разных папках, с использованием одного и того же файла PHP / Javascript. Это проблема, файл PHP должен идеально знать каталог своего «вызывающего», HTML-страницу, которая его использует. Если я жестко закодирую решение в файл PHP для определенного файла HTML, то файл PHP больше не будет полезен для других. Затем я мог бы просто использовать PHP-файл внутри папки каждого HTML-файла, но тогда я бы неоднократно повторял один и тот же файл, что очень плохо для обслуживания.
РЕДАКТИРОВАТЬ 2: Я, возможно, нашел способ решить проблему. Мой HTML-файл становится:
...
<script src="script.js.php"></script>
...
script.js.php становится:
<?php
header('Content-type:text/javascript; charset=utf-8');
$curDir = getcwd();
include('../newfile.js.php');
echo file_get_contents("../rest.of.js.code.js");
?>
и newfile.js.php это:
<?php
$someVar = [];
foreach (glob($curDir . '/*.txt') as $filename) {
$someVar[] = basename($filename);
}
echo "var someVar = " . json_encode($someVar) . ";\r\n";
?>
rest.of.js.code.js теперь будет содержать код Javascript, который существовал ранее в script.js.php. Этот файл и newfile.js.php остаются в родительском каталоге; script.js.php будет повторяться (и при необходимости корректировать путь к newfile.js.php) внутри любых необходимых каталогов HTML.
Ты можешь использовать имя_директории:
$parentDir = dirname(dirname(__FILE__));
__FILE__
ссылка на текущий скрипт PHP (script.js.php
). Таким образом, вы получаете родительский каталог файла, затем вы получаете родительский каталог этого каталога.
Других решений пока нет …