-2

我有一个像这个例子一样的文件夹结构

Groups 
- apple
-- ahen45.html
-- rev34.html
-- ......

- bat
-- fsf.html
-- ere.html
--....

...

组是父级折叠的。苹果,蝙蝠等子文件夹

像这样有超过 50000 个子文件夹和超过 20000 个 html 文件。现在我试图通过 php 读取这些 html 文件并将标题元关键字正文和子文件夹作为类别

<?php
$file =$_SERVER["DOCUMENT_ROOT"];
$dir = new RecursiveDirectoryIterator('groups/',
    FilesystemIterator::SKIP_DOTS);

$it  = new RecursiveIteratorIterator($dir,
    RecursiveIteratorIterator::SELF_FIRST);

$it->setMaxDepth(1);

foreach ($it as $fileinfo) {
    if ($fileinfo->isDir()) {
       echo $category = $fileinfo->getFilename();

    }
    else if ($fileinfo->isFile()) {
        $fileinfo->getFilename();
        $myURL = $file.'/group/groups/'.$category.'/'.$fileinfo->getFilename();

        $doc = new DOMDocument();
        $doc->loadHTMLFile($myURL);

        $elements = $doc->getElementsByTagName('meta');
        $elements = $doc->getElementsByTagName('title');
        $elements = $doc->getElementsByTagName('body'); 

    foreach ($elements as $el) {
            echo $el->nodeValue, PHP_EOL;
    }

    }
}
?>

当我这样尝试时,它正在检查整个页面并发出警告,如标签(其他标签如 or )未关闭。我该怎么做才能完美工作?

4

2 回答 2

1

遵循程序

  1. 使用readdir读取目录
  2. 然后html files使用glob()阅读所有内容请参阅 如何列出目录中的文件和文件夹(PHP)
  3. 使用get_meta_tags()获取meta tagsfor title引用如何使用 php 获取 HTML 页面的标题?用于身体的相同代码,您需要更改preg_match条件。您也可以尝试 从外部网站获取标题和元标记

尝试以上几点,您将获得一些成功。然后来一个新的question

于 2013-09-05T04:53:50.813 回答
0
<?php
$file =$_SERVER["DOCUMENT_ROOT"];
$dir = new RecursiveDirectoryIterator('groups/',
    FilesystemIterator::SKIP_DOTS);

$it  = new RecursiveIteratorIterator($dir,
    RecursiveIteratorIterator::SELF_FIRST);

$it->setMaxDepth(1);

foreach ($it as $fileinfo) {
    if ($fileinfo->isDir()) {
       echo $category = $fileinfo->getFilename();      
    }
    else if ($fileinfo->isFile()) {
        $fileinfo->getFilename();
        $myURL = $file.'/group/groups/'.$category.'/'.$fileinfo->getFilename();


        $doc = new DOMDocument();
        @$doc->loadHTMLFile($myURL);
        $doc->strictErrorChecking = false;
        $doc->recover=true;
        $doc->formatOutput = true;

        $metas = $doc->getElementsByTagName('meta');        
        $elements1 = $doc->getElementsByTagName('title');
        $elements2 = $doc->getElementsByTagName('body');

            for ($i = 0; $i < $metas->length; $i++)
            {
                $meta = $metas->item($i);
                if($meta->getAttribute('name') == 'keywords'){
                    echo $keywords = $meta->getAttribute('content');
                    echo "<br/>";
                }
            }

            foreach ($elements1 as $el1) {
                echo $el1->nodeValue, PHP_EOL;
                echo "<br/>";
            }
            foreach ($elements2 as $el2) {
                echo $el2->nodeValue, PHP_EOL;
                echo "<br/>";
            }       
    }
    echo "<hr>";
}

?>
于 2013-09-05T12:12:34.713 回答