Включить файл в переменную - PullRequest
4 голосов
/ 14 марта 2011

Я пытаюсь сохранить мой код в чистоте, разбить его на файлы (вроде библиотек). Но некоторые из этих файлов понадобятся для запуска 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, оно сохраняет его как строку, поэтому есть ли варианты для этого, или мне не повезло?

UPDATE:

Так вроде:

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

Или вы имели в виду создать функцию для каждого файла?

Ответы [ 2 ]

10 голосов
/ 14 марта 2011

Кажется, вам нужно использовать Output Buffering Control - см. Особенно ob_start() и ob_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 !!!
0 голосов
/ 14 марта 2011

Как выглядит 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());
...