4

我试图保持我的代码干净,将其中的一些分解成文件(有点像库)。但是其中一些文件需要运行 PHP。

所以我想做的是:

$include = include("file/path/include.php");
$array[] = array(key => $include);

include("template.php");

比在 template.php 中我会:

foreach($array as $a){
    echo $a['key'];
}

所以我想将php运行后发生的事情存储在一个变量中以便以后传递。

使用 file_get_contents 不会运行 php,它会将其存储为字符串,所以有什么选项可以解决这个问题,还是我不走运?

更新:

就像:

function CreateOutput($filename) {
  if(is_file($filename)){
      file_get_contents($filename);
  }
  return $output;
}

还是您的意思是为每个文件创建一个函数?

4

2 回答 2

10

看来您需要使用Output Buffering Control-- 尤其是ob_start()andob_get_clean()函数。

使用输出缓冲将允许您将标准输出重定向到内存,而不是将其发送到浏览器。


这是一个简单的例子:

// Activate output buffering => all that's echoed after goes to memory
ob_start();

// do some echoing -- that will go to the buffer
echo "hello %MARKER% !!!";

// get what was echoed to memory, and disables output buffering
$str = ob_get_clean();

// $str now contains what whas previously echoed
// you can work on $str

$new_str = str_replace('%MARKER%', 'World', $str);

// echo to the standard output (browser)
echo $new_str;

你会得到的输出是:

hello World !!!
于 2011-03-14T20:53:19.340 回答
0

你的file/path/include.php样子怎么样?

您必须file_get_contents通过 http 调用以获取它的输出,例如

$str = file_get_contents('http://server.tld/file/path/include.php');

最好修改您的文件以通过函数输出一些文本:

<?php

function CreateOutput() {
  // ...
  return $output;
}

?>

比包含它之后,调用函数来获取输出。

include("file/path/include.php");
$array[] = array(key => CreateOutput());
于 2011-03-14T20:53:09.060 回答