Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 是否在包含文件内容之前运行函数?_Php - Fatal编程技术网

Php 是否在包含文件内容之前运行函数?

Php 是否在包含文件内容之前运行函数?,php,Php,目前,我正在包括我的HTML“视图”,如下所示: 在包含视图文件之前,我希望能够对其内容运行函数,但我不确定如何执行该操作,并且在不使用eval的情况下仍然包含视图: 我基本上希望对函数的结果执行“include”类型的操作。大概是这样的: include foo_function(file_get_contents($path_to_view)); 我如何才能做到这一点,或者评估是我唯一的选择 编辑 我目前正在使用输出缓冲区。我不想更改磁盘上的视图内容,我只想获取视图的内容,对这些内容运行一

目前,我正在包括我的HTML“视图”,如下所示:

在包含视图文件之前,我希望能够对其内容运行函数,但我不确定如何执行该操作,并且在不使用eval的情况下仍然包含视图:

我基本上希望对函数的结果执行“include”类型的操作。大概是这样的:

include foo_function(file_get_contents($path_to_view));
我如何才能做到这一点,或者评估是我唯一的选择

编辑


我目前正在使用输出缓冲区。我不想更改磁盘上的视图内容,我只想获取视图的内容,对这些内容运行一个函数,并“包含”内容,以便对其进行计算。

查看输出缓冲区。您可以将文件的内容放入var中,然后像往常一样解析它


祝你好运。

听起来你在寻找输出缓冲。看


我现在正在使用输出缓冲区。。。但我仍然必须在某个时候“包含”文件的内容,以便对其进行评估,我正在这样做。我只想在“包含”文件之前,在文件内容上运行一个函数。我想如果你能发布更多的代码,它会澄清很多问题。例如,我无法理解你的意思。如果$path_to_视图包含HTML,则文件的include会将其内容连接到输出。实际上,这与说“echo file_get_contents($path_to_view);”是一样的。所以,为了回答您的问题,您几乎做到了:“echo my_preprocessing_function(file_get_contents($path_to_view));”是有道理的。@Remco:这似乎不会导致PHP出现在要计算的视图中。我仍然需要在视图的内容上运行一个函数。我不想实际修改磁盘上的视图,我只想获取内容,在其上运行一个函数,然后“包含”内容,以便对其进行计算。@TaylorOtwell-使用上述示例中的输出缓冲,PHP将包含您的视图并在其中安全地执行PHP,然后运行回调函数。
$buffer
变量包含视图的内容,以便进一步处理它。这不是你要找的吗?也许。。执行的顺序是什么?我基本上运行了一些简单的正则表达式来将“模板”转换成普通的PHP。。。在输出缓冲区的内容被PHP“评估”之前,我需要运行回调。@TaylorOtwell-首先执行
include
。您要查找的内容可能类似于
file\u get\u contents($path\u to\u view)
获取内容,然后调用函数,最后使用
eval
。小心使用
eval
@TaylorOtwell-我已经使用
ob\u start
和类似于上面示例的东西创建了模板。您可以调用
preg_replace('/abc/','$buffer)
然后
返回$buffer在PHP执行后替换。。。
include foo_function(file_get_contents($path_to_view));
<?php

function callback($buffer)
{
  // Do something useful here.

  return $buffer;
}

ob_start('callback');

include $path_to_view;

ob_end_flush();