尝试使用preg_match_all到我的服务器 php 文档来动态创建 php 菜单


Trying to create a menu dynamically with php using preg_match_all to my server php documents

该项目由一个横向菜单组成,其中包含我所有的博客条目。从理论上讲,菜单是这样工作的:我使用 php 获得每个博客文档的<h1>标题和他的相应href


所以每次我添加新的博客条目时,它都会自动出现在菜单中,我使用fopenfread来做到这一点,并将我博客的每个PHP文档的内容保存在一个名为$leer的变量中。


然后,我使用Preg_match_all搜索每个博客条目的标题并将其显示在菜单上。有了这个,我可以制作菜单而无需手动添加链接,也可以使用 scandir 获取网址。


问题是,在数组中使用preg_match_all时,会给我许多不正确的结果,四次获得相同的<h1>标题而没有解释。这是代码:

$escanear = scandir ("/home/sites/thetoptenweb.com/public_html/post");
$tamanoArray = count($escanear);

所以首先,正如你所看到的,我使用 scandircount 来获取页数。

for($i=2;$i<=$tamanoArray-3;$i++){
    $abrirFichero = fopen($escanear[$i],"r");
    $leer=fread($abrirFichero, filesize($escanear[$i]));        
    fclose($abrirFichero);
}

然后,我使用 for 循环fread 来阅读我的所有文档。循环的目的是只"扫描"第二个和最后 3 个之间的选定文件,因为这些是我的博客条目。

preg_match_all('%<h1>(.*)</h1>%', $leer, $arrayMaches);

因此,使用 preg_match_all 函数,我在多维数组中获取文档的标题,我认为该数组给我带来了问题,因为我试图用 foreach 循环读取每个结果,但有一些空白结果,我不知道为什么会这样。

foreach ($arrayMaches as $result) {
    foreach ($result as $key) {
    }
}
$cortado=preg_split('%</?h1>%', $key);
echo "<a href=".'"'.$escanear[$i].'"'."><li>".$cortado[0]."</li></a><hr>";

最后,我使用 foreach 循环来访问preg_match_all多维数组。然后,我preg_split结果以获取没有html标签的文本,然后显示带有echo的结果。

希望有人帮助我认识到问题,如果可能的话,对preg_match_all数组进行解释,因为我不明白它是如何创建的。建议被接受。如果你知道更好的方法,我很乐意阅读它。这是整个代码:

<?php
    $escanear = scandir ("/home/sites/thetoptenweb.com/public_html/post");
    $tamanoArray = count($escanear);
    for($i=2;$i<=$tamanoArray-3;$i++){
        $abrirFichero = fopen($escanear[$i],"r");
        $leer=fread($abrirFichero, filesize($escanear[$i]));
        fclose($abrirFichero);
        preg_match_all('%<h1>(.*)</h1>%', $leer, $arrayMaches);
        foreach ($arrayMaches as $result) {
            foreach ($result as $key) {
            }
        }
        $cortado=preg_split('%</?h1>%', $key);
        echo "<a href=".'"'.$escanear[$i].'"'."><li>".$cortado[0]."</li></a><hr>";                  
    }                               
?> 

谢谢。

只需使用 DOM... 你会省去一些麻烦。

$menuData = array();
$iter = new DirectoryIterator('/home/sites/thetoptenweb.com/public_html/post');
foreach ($iter as $file) {
   if ($file->isFile()) {
       $filename = $file->getFilename();
       $path = $file->getPathname();
       $dom = new DOMDocument();
       $dom->loadHtmlFile($path);
       $titleNode = $dom->getElementsByTagname('h1')->item(0);
       if ($titleNode) {
          $title = $titleNode->nodeValue;
          $menuData[$filename] = $title;
       }
   }
}

现在你已经有了所有的东西$menuData你可以循环它并输出链接,假设文件名是适当的URL。或者,您可以直接输出循环中的链接,但分离内容更明智。创建一个函数来获取所需的数据,然后使用该数据进行输出。

但更好的解决方案是选择一个博客平台并使用它,然后花时间编写导入器并调整外观和感觉以适应。