您好我正在尝试为我的网站创建一个站点地图 (我不想使用任何应用程序或准备使用代码)
这是我的代码如何工作。 首先,它扫描根目录中的文件并将它们放在一个数组中。 然后它循环通过数组并获取该文件的内容,然后它将解析内容以获取链接(标签)
扫描目录
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; ?>
我该如何解决这个问题? 我应该去卷曲吗?但这不适用于文件,它只适用于网址
答案 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