如何在php中运行shtml include

时间:2011-06-30 16:01:09

标签: php shtml

我在服务器上有几十个.shtml文件,其中包含此语句以包含.inc个文件:

 <!--#include virtual="../v4/rightmenu.inc" -->

这正是它在源上工作得很好的原因。

我想知道我是否可以在我的PHP代码上运行它而不更改它,因为当前文件有很多这样的包含,我不想乱用很多这样的代码。

我只是不想将其更改为<?php include "../v4/rightmenu.inc"; ?>

1 个答案:

答案 0 :(得分:0)

使用mod_rewrite通过单个php文件将所有请求路由到.shtml个文件。对于exapmle:_includeParser.php

这样一个文件的粗略草图可能是:

/**
 * This function should return the contents of the included file
 */
function getIncludeFileContents($match) {
    list (, $file) = $match;
    // return something for $file
}

/**
 * This function should return a php-readable path for the initially requested .shtml file
 */
function getRealpath($uri) {
  // return the real path of the requested uri
}

// Map the requested uri to file
// 'REDIRECT_URL' could be something different for your configuration, have a look at the $_SERVER array
// to get the correct value if something fails here
$realpath = getRealpath($_SERVER['REDIRECT_URL']); 

// parse each include statement
// the regex pattern here could need some tweaking
$output = preg_replace_callback(
  '@<!--#include virtual="(.+?)" -->@i',
  'getIncludeFileContents',
  file_get_contents($realpath)
);

// output the final contents
echo $output;

当然,这样的解决方案可以通过一些缓存或其他方法进行优化。