Установите PHP как включаемый файл

#php #html #css

#php #HTML #css

Вопрос:

У меня есть шаблон электронной почты, который находится внутри PHP-скрипта. Я использую PHPMailer, и отправленное сообщение сохраняется в вызываемой переменной $msg .

Как я могу настроить $msg , чтобы он включал файл шаблона электронной почты? Я надеюсь, что есть способ сделать это динамически с помощью включаемого файла, чтобы мне не приходилось хранить 20 копий шаблона в разных сценариях.

Ответ №1:

У вас есть несколько подходов, три из которых я упомяну ниже.

Решение № 1 — простое включение

Прежде всего, если вы включаете файл, как в следующем примере:

 include('myfile.php');
  

его код будет выполнен точно так же, как если бы он был вставлен вместо вышеупомянутой строки. Таким образом, если вы добавите объявление значения myfile.php , переменная будет доступна сразу после include() вызова функции (упомянуто выше).

Итак, в принципе, вы можете сделать что-то подобное в myfile.php file:

 <?php

$msg = 'my template';
  

и используйте $msg переменную в любом месте после include() вызова в основном файле (если переменная не была перезаписана).

Решение № 2 — включение с использованием return

Для использования в некоторых случаях, например. если вы включаете только файлы, содержащие некоторые значения, которые вы хотите использовать (основная цель файла — предоставить некоторое значение для обработки), вы можете использовать следующий пример. Это не должно мешать вашим текущим переменным (при правильном использовании).

В главном файле:

 $msg = include('myfile.php');
  

и в myfile.php файле:

 <?php

return 'my template';
  

Таким образом, ваш файл работает только путем возврата определенной переменной и не нарушает соглашение об именовании других ваших файлов. Кроме того, вы можете вызывать переменную так, как вам нравится, без необходимости изменять содержимое файла конфигурации.

Решение № 3 — буферизация вывода

В некоторых случаях (беспорядочное кодирование, HTML и т. Д.) Вам может потребоваться использовать это решение. Следующий код улавливает все, что передается файлом, и сохраняет его в переменную $msg , затем отключает буферизацию.

 ob_start();
include('myfile.php');
$msg = ob_end_flush();
  

Таким образом, если у вас есть, например. echo вызовы или некоторый статический HTML-код во включенном файле не будут записаны «как есть» и могут быть обработаны дополнительно (например. некоторые токены из вашего шаблона могут быть заменены фактическими данными, которые вы хотите использовать).

Итак, в принципе, в этом случае вы даже можете написать myfile.php что-то вроде:

 <?php

echo 'my template';
  

или даже:

 my template
  

(просто текст, а не код PHP).

Комментарии:

1. Пожалуйста, никогда не делайте # 2. Это кажется разумным, вплоть до тех пор, пока ваш код не нуждается в изменении, чтобы выполнить некоторые вычисления относительно того, что возвращать. Внезапно вы сталкиваетесь с попыткой выбрать имена переменных, которые не будут конфликтовать, и кодированием вокруг переопределений функций (исходя из недавнего опыта)

2. @PhilLello: возможно, вы не знаете, но это обычная практика для файлов конфигурации, например. в некоторых зрелых фреймворках PHP. Таким образом, я все еще предлагаю использовать это решение. Кроме того, расчет того, что возвращать в качестве параметра конфигурации, кажется основной ошибкой — на мой взгляд, параметры конфигурации не должны зависеть от некоторых сложных вычислений (скорее наоборот), и решение № 2 обеспечивает это (частично).

3. О, поверьте мне, я знаю. Я тоже был укушен этим. Подумайте, что происходит, когда вы выполняете миграцию между фреймворками и хотите использовать несовместимые форматы файлов конфигурации. Изменить реализацию функции для чтения общего файла и возврата ожидаемого формата просто; исправление каждого места, включающего конфигурацию, требует больше обслуживания и имеет более высокую вероятность ошибки. Или даже при использовании одной платформы вы можете захотеть поменять механизм резервного копирования на config — возможно, INI-файлы, возможно, XML, возможно, результаты запроса к базе данных.

Ответ №2:

Не уверен, правильно ли я вас понимаю, но почему вы не можете просто сделать это?

 include_once('filename.php');
  

Ответ №3:

Вы можете написать в своем файле шаблона:

 $msg = """ the message
bla bla bla""";
  

Затем, когда вы включаете файл из другого модуля php, вы можете получить доступ к этой переменной.

Ответ №4:

Вы можете иметь $msg = "…"; в скрипте PHP и включать это там, где это необходимо. Однако, если это просто обычный текст, вы можете рассмотреть возможность сохранения его в виде .txt файла и использования file_get_contents .

Ответ №5:

Вы можете либо сохранить его в необработанный текстовый файл и загрузить его с помощью file_get_contents, либо сохранить строку с текстом в другом php-файле и включить ее.

Пример:

Template.php:

 <?php
$globalMessage = "template string goes here";
?>
  

Любой другой файл:

 <?php
include 'Template.php';
echo $globalMessage; // has access
?>
  

Ответ №6:

Если вы хотите получить содержимое файла шаблона в переменную $ msg, вы можете сделать следующее:

 <?php
 $msg= get_include_contents('email_template_file.php');

 function get_include_contents($filename) {
 if (is_file($filename)) {
    ob_start();
    include $filename;
    return ob_get_clean();
 }
 return false;
 }

 ?>
  

Теперь ваша переменная $ msg содержит текст вашего электронного письма. Если у вас есть некоторые общие термины, такие как имя пользователя, номер телефона и т. Д., Вы хотите быть разными для разных пользователей. Храните их в токенах, таких как {username}, {phone-number} в вашем файле шаблона. Как только вы получите содержимое в переменной $ msg, вы можете использовать следующее:

 <?php str_replace('{username}',$username,$msg); ?>
  

для динамического изменения значений для каждого пользователя, которому вы хотите отправить почту.