Как использовать file_put_contents () для части файла php

0

Я использую PHP и html, чтобы разработать простой механизм, который создает отчеты и отправляет их по электронной почте. Я использую функцию file_put_contents() и функцию ob_get_contents() в качестве параметра, чтобы создать html файл, который я использую для отправки по почте. Я понял, что если я использую ob_get_contents() без использования ob_start() он просто берет весь файл и помещает его в html файл. Это не хорошо для меня, так как я хочу, чтобы только части файла находились в сгенерированном html. Чтобы быть более ясным, мой код выглядит примерно так:

<html and php code I want to include in my html file>
.
.
<html and php code I don't want to include in my html file>
.
.
<html and php code I want to include in my html file>
.
.
<html and php code I don't want to include in my html file>
.
.
.

file_put_contents('report.html', ob_get_contents());
$message = file_get_contents('report.html');
mail($to, $subject, $message, $Headers);

Итак, как мне выбрать только те части, которые я хочу включить в report.html?

Большое спасибо!

  • 0
    Почему бы вам просто не «составить» свой HTML, выполнив $ html = '<html ...'; PHP-код, который вы не хотите включать; $ html . = '<некоторый другой html> + код PHP не выполнен';
  • 0
    Или вы можете сделать несколько файлов PHP, содержащих небольшие части вашего большого HTML. Таким образом, вы можете загрузить именно те файлы, которые вы хотите. Это более или менее тот же подход, что и в Kei, за исключением того, что он намного чище и не содержит встроенного HTML
Теги:

2 ответа

1

Вы делаете это излишне сложно, вам не нужны внешние файлы для создания отчета. Взгляните на это:

<?php
$report = '';

// ...
// Code not included in your report
// ...

ob_start();
// ...
// HTML and PHP code you want in your report
// ...
$report .= ob_get_clean();

// ...
// Code not included in your report
// ...

ob_start();
// ...
// HTML and PHP code you want in your report
// ...
$report .= ob_get_clean();

// Mail it
mail($to, $subject, $report, $headers);
?>

EDIT: Что касается комментария OP.

Вам нужно ob_get_flush() вместо ob_get_clean(). Оба возвращают содержимое буфера в виде строки, но первый переносит его на вывод сценария, а второй - пустым.

  • 0
    Это хорошее решение, и оно сработало для меня. Проблема в том, что я также представляю php-файл в моем графическом интерфейсе (я представляю весь php-файл и отправляю по электронной почте только часть). Когда я использую этот формат, он скрывает все содержимое файла, и я могу видеть его только по электронной почте. Есть ли способ записи в буфер, но также и на экран? (Надеюсь мой вопрос понятен)
  • 0
    @ user3111518 Готово. Смотрите редактирование.
0

Может или май не поможет


Я всегда обрабатываю это так же, как загружаю страницы при использовании php vanila PHP со сниппетом! Следующее - это то, что я держал навсегда и использовал. Он имеет две возможные основные функции. Один из них - загрузить представление (html-страницу), а другой - получить страницу html в виде строки для таких вещей, как включение в тело электронной почты.

Например:

//  will load a page into the clients browser
//    note the page location would indicate it will get the file "index.html" from "$_SERVER["DOCUMENT_ROOT"] . '/views/'"
loadView('/views/index.html');

//  or, as would be more helpful to you
$msgHTML = loadView('/views/index.html', NULL, TRUE);

Параметр TRUE просто указывает функции только возвращать строку и ничего не посылать клиенту.

Параметр NULL вы видите, предназначен для передачи массива данных. Например, скажем, у вас есть html-страница с таблицей, которую вы хотите заполнить для вызова базы данных. Вы просто сделаете свой звонок, поместите свое возвращение в массив и затем добавьте его на страницу.

$arr = array( 'key' => 'value' );
$msgHTML = loadView('/views/index.html', $arr, TRUE);

//  then in the index.html
<div><?= $key; ?></div>

Это упрощает создание HTML-кода для электронной почты.

отрывок


if (!function_exists('loadView')) {
    function loadView($file, $data=NULL, $get=FALSE) {
        if (!empty($data)) extract($data);
        ob_start();
        if (is_file($file)) include($file);
        $return = ob_get_clean();
        if (!$get) echo($return);
        return $return;
    }
}

Таким образом, вы можете сделать что-то вроде:

$htmlFirst = loadView('report.html', NULL, TRUE);
$msgFirst = 'Some message string here';
$htmlSecond = loadView('report2.html', NULL, TRUE);
$msgSecond = 'Some message string here';

$body = $htmlFirst . $msgFirst . $htmlSecond . $msgSecond;
mail($to, $subject, $body, $Headers);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню