将文件读入字符串时如何扩展文本文件中的变量?

How to expand variables that are in a text file when reading the file into a string?

在处理 html 表单输入和通过 php 发送电子邮件进行响应的上下文中,而不是在我的代码中间有一个冗长的 heredoc 赋值语句,我想要文件中的电子邮件文本并在需要时读入,根据需要扩展嵌入变量。

使用适当准备的 HTML 表单数据输入,我以前有...

$message = <<<TEXT  
NAME: {$_POST["fname"]} {$_POST["lname"]}
POSTAL ADDRESS: {$_POST["postal"]}
EMAIL ADDRESS: {$_POST["email"]}
[... message body etc.]
TEXT;

将文本移动到文件然后我尝试了...

$message = file_get_contents('filename.txt');

…但发现文本中的变量没有展开,导致输出中包含变量标识符作为文字。

有没有办法在将文件读入字符串时扩展变量?

可能有重复的,如果找到我会删除。但是想到了两种方式:

如果您这样构建文件:

NAME: {fname} {lname}

然后循环$_POST变量:

$message = file_get_contents('filename.txt');

foreach($_POST as $key => $val) {
    $message = str_replace('{'.$key.'}', $val, $message);
}

如果您这样构建文件:

NAME: <?= $_POST["fname"] ?> <?= $_POST["lname"] ?>

如果 HTML .txt 或其他(不是 .php)则:

ob_start();
$file = file_get_contents('filename.txt');
eval($file);
$message = ob_get_clean();

如果是 .php 文件,则缓冲输出并包括:

ob_start();
include('filename.php');
$message = ob_get_clean();

感谢 AbraCadaver 的帮助,我将所有内容放入一个函数中,该函数将处理文件和数组,返回组合消息。我构造文件以使用 [key] 标记要插入数据的位置。奇迹般有效。谢谢。

function compose_message($file, $array) {
    // reads content of $file
    // interpolates values from $array into text of file
    // returns composed message
    $message = file_get_contents($file);
    $keys = array_keys($array);
    foreach ($keys as $key) {
        $message = str_replace("[$key]", $array[$key], $message);
    }
    return $message;
}