我有一个如下所示的目录结构:
/expandables
- folder
- folder
- folder
- folder
- BannerInfo.txt
- index.html
folder
中的每一个都具有相同的结构。一个名为BannerInfo.txt
和index.html
的文件。如果重要的话,大约有250个这样的文件夹。
我想遍历这些文件夹并将每个index.html
文件存储到一个数组中。 index.html
文件的内部只是一些简单的HTML和Javascript,我想将其读入一个字符串中以便稍后显示。
我在如何过滤掉各个文件夹中的index.html
文件方面一直在努力。
这样做的目的是因为我想随机选择一个index.html文件并将内容放入textarea。我以为我可以在返回的数组上做一个简单的array_rand()
并吐出字符串。
有什么想法吗?
编辑:
我想出了类似的东西:
<?
$expandables = array();
$expandables = scandir("expandables/");
$count = 0;
foreach($expandables as $expandable) {
if ($expandable != "." && $expandable != "..") {
$expandableCode = "expandables/" . $expandable . "/index.html";
// get value of index.html for select list
$expandableValue = file_get_contents($expandableCode);
// echo out options
echo "<option value='$expandableValue'>$expandable</option>";
}
}
?>
但这并不完全正常。有没有办法在我从选择框中选择index.html内容后用index.html内容动态填充我的textarea?
答案 0 :(得分:1)
您可以使用readdir()
或scandir()
获取每个目录的内容(即文件名)。使用is_dir()
检查找到的项目是文件还是目录。如果是目录,请在该目录上重复该过程。如果是文件,请检查它是否为“index.html”,如果是,请将其放入数组中。
最好将文件名(包括路径)存储在数组中而不是内容中。执行后者将导致每个请求都读取所有250个文件。
遍历目录可能有问题,因此最好也缓存此列表。
您可以将路径数组保存到文件中。然后,您可以在数组中加载此文件,这比检查所有这些目录更快。如果该文件不存在,您可以运行该过程来创建它。如果它确实存在,您可以检查它是否比某天(或任何最适合您的)更旧。如果任何index.html文件不存在,您还可以运行创建文件的过程,因为它显然不再是最新的。
如果将此数组保存为PHP代码,则可以包含它。如果您有像APC这样的PHP缓存,这将为您提供更好的性能。