站点地图脚本:file_get_contents上未执行的php代码

时间:2012-11-29 14:08:10

标签: php

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

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

扫描目录

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; ?>

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

3 个答案:

答案 0 :(得分:1)

是的,你必须要卷曲。 file_get_contents()逐字节读取硬盘上的文件。这意味着它将读取您的代码而不执行它。

为了澄清:您不必严格使用cURL,而是让您通过网络服务器而不是文件系统请求页面的任何内容。因此,如果您的服务器支持它,您可以file_get_contents('http://example.org'),但是您不会使用URL。

答案 1 :(得分:1)

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

ob_start();
include($f['address']);
$content = ob_get_contents();
ob_end_clean();

答案 2 :(得分:1)

您必须与您的网络服务器一起打乒乓球,并使用类似网址访问该文件 http://mysite.com/myfile.php

获取http内容有多种方法。 例如,请参见此处: fopen is not working on my server