0

您好我正在尝试为我的网站创建站点地图(我不想使用任何应用程序或准备使用代码)

这是我的代码的工作方式。首先它扫描根目录中的文件并将它们放入一个数组中。然后它循环遍历数组并获取该文件的内容,然后它将解析链接的内容(一个标签)

扫描目录

public function scan($directory)
{
        $dir = dir($directory);
        while (($file = $dir->read()) !== false) {
       $type  = ($this->is_directory($directory.$file)) ? 'dir' : 'link' ;
           $this->files[] =  array('address'=>$directory.DIRECTORY_SEPARATOR.$file , 'type'=>$type); 
       }
       sort($this->files);    
       $dir->close();      
}

循环槽文件并解析其内容

 public function get_links(){
         foreach($this->files as $f )
         {
             if($f['type']  == 'link' )
             { 
                    $contents =  file_get_contents($f['address']);
                    $DOM = new DOMDocument();
                    $DOM->loadHTML($contents);
                    $a = $DOM->getElementsByTagName('a');
                    foreach($a as $link){
                        $this->links[] =  $link->getAttribute('href');
                    }

             }
         }
     }

现在的问题是,当我在第二段代码中获取文件的内容时,该文件中的 php 代码没有被执行。所以我可能会得到类似的东西:

www.site.com/<?php echo $a; ?>.html
or
www.site.com/news.php?id=<?php echo $a; ?>

我该如何解决这个问题?我应该去卷曲吗?但这不适用于文件,它只适用于 url 地址

4

3 回答 3

1

你必须在你的网络服务器上玩乒乓球,并使用像 http://mysite.com/myfile.php 这样的 URL 访问文件

有多种获取 http 内容的方法。例如,请参见此处: fopen 无法在我的服务器上运行

于 2012-11-29T14:14:03.760 回答
1

是的,您将不得不使用 curl。file_get_contents()逐字节读取硬盘上的文件。这意味着它将读取您的代码而不执行它。

澄清一下:您不必严格使用 cURL,但任何可以让您通过网络服务器而不是文件系统请求页面的东西。因此,如果您的服务器支持它,您可以这样做file_get_contents('http://example.org'),但是您将无法使用 URL。

于 2012-11-29T14:10:53.667 回答
1

这取决于您的 php 文件有多复杂。如果您使用的是 MVC 或框架,它可能不像加载文件内容那么简单。如果你有简单的 php 文件(一些包含一些类的独立页面),你可以这样做:

ob_start();
include($f['address']);
$content = ob_get_contents();
ob_end_clean();
于 2012-11-29T14:12:00.970 回答