如何在php中运行shtml include

如何在php中运行shtml include,php,shtml,Php,Shtml,我在服务器上有几十个.shtml文件,其中包括以下语句,包括.inc文件: <!--#include virtual="../v4/rightmenu.inc" --> 这正是它在工作正常的源代码上显示的方式 我想知道我是否可以在不改变php代码的情况下在php代码上运行它,因为当前文件中包含了很多此类内容,我不想弄乱很多这样的代码 我只是不想将其更改为类似于通过单个php文件将所有请求路由到.shtml文件的东西。例如:_includeParser.php 这种文件的一个非

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

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

这正是它在工作正常的源代码上显示的方式

我想知道我是否可以在不改变php代码的情况下在php代码上运行它,因为当前文件中包含了很多此类内容,我不想弄乱很多这样的代码

我只是不想将其更改为类似于通过单个php文件将所有请求路由到
.shtml
文件的东西。例如:_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;
/**
*此函数应返回包含文件的内容
*/
函数getIncludeFileContent($match){
列表(,$file)=$match;
//以$file返回某物
}
/**
*此函数应为最初请求的.shtml文件返回一个php可读路径
*/
函数getRealpath($uri){
//返回请求的uri的实际路径
}
//将请求的uri映射到文件
//“重定向URL”可能与您的配置有所不同,请查看$\u服务器阵列
//如果此处出现故障,则获取正确的值
$realpath=getRealpath($_SERVER['REDIRECT_URL']);
//解析每个include语句
//这里的正则表达式模式可能需要一些调整
$output=preg\u replace\u回调(
“@@i”,
“GetIncludeDeflecontents”,
文件获取内容($realpath)
);
//输出最终内容
echo$输出;

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

SHTML在它的时代很不错,但你基本上是想让石器时代保持活力。进入90年代。。。我们有饼干,所以你否决了?如果可以的话,我可以,但我正在处理数百个页面,我不想用我的一生去改变它们。你可以编写一个重写规则(mod_rewrite/htaccess)将所有这些.shtml文件传递给一个php文件,而这个php文件反过来会查找/解析请求文件中的include语句@我不明白,你能详细说明你的答案吗?我没有投反对票。当我留下我的评论时,这已经存在了。我只会对明显错误的事情投反对票。你只是对此有不同的看法,这不是“错”。但是再一次,现在忍受一点短期的痛苦并修复你的文件,这样你以后就不必再处理这个问题了。在每次请求时动态替换有什么意义?@Krab这一点就好像你包含了一个php文件一样。可重用性。出于什么其他原因,您会将代码/文本块放在不同的文件中?不,我的意思是,将#include指令替换为
有什么好处?如果preg是贪婪的(我认为是贪婪的),如果还有另一个以
结尾的HTML注释,您的regexp将无法工作“-->
在#include之后。也许还有一个。你不是说
+
,而是说
[^”]+
@Kran啊!当然,这是可能的。问题是,服务器需要配置为将.shtml文件传递给php解释器。关于正则表达式,我并不是说这个示例可以按原样使用。我只是试图勾勒出这个想法。