ob_start () внутри цикла - PullRequest
       34

ob_start () внутри цикла

5 голосов
/ 03 ноября 2010

У меня проблема при цикле с использованием цикла foreach () и внутри этого цикла с использованием ob_start () и ob_get_clean ().

Вот моя функция:

protected function renderEmail() {
$template = $this->_case.".php";
if(is_file($this->_dir.DS.$template)) {
    ob_start();
    if(!empty($this->_records)) {               
        foreach($this->_records as $key => $value) {
            ${$key} = $value;
        }
    }
    require_once($this->_dir.DS.$template);
    return ob_get_clean();
} else {
    $this->_errors[] = "Email template not found";
    return false;
} }

Эта функция в основном генерирует содержимое письма и затем возвращает его.

Проблема у меня возникает, когда я перебираю несколько адресов электронной почты - для отправки того же содержимого электронной почты - только первый возвращает содержимое - следующие пустые - есть идеи, почему?

Ответы [ 3 ]

15 голосов
/ 03 ноября 2010

Хорошо, - вы не поверите, - как только я отправил этот вопрос - сразу после того, как я понял, в чем проблема - я использую функцию require_once (), которая предотвращает повторное включение одного и того же файлаизменил на include () все работает отлично!

1 голос
/ 10 марта 2018

Каждый раз, когда вы собираетесь использовать один и тот же файл несколько раз внутри цикла, вы никогда не должны использовать require_once () или include_once, вместо этого используйте «include», и все будет хорошо!

0 голосов
/ 03 ноября 2010

Зачем цикличность?

extract($this->_records);

выглядит немного короче

foreach($this->_records as $key => $value) {
    ${$key} = $value;
}

и, кроме того, родной

, а var_dump отличноиногда помогать (в следующий раз, когда вы столкнетесь с такими проблемами): *

...