在处理html表单输入并通过php发送电子邮件响应的上下文中,而不是在我的代码中间有一个冗长的heredoc赋值语句,我想在一个文件中有电子邮件文本并在需要时读取它,根据需要扩展嵌入的变量。
使用适当准备的HTML表单数据输入,我之前有…
$message = <<<TEXT
NAME: {$_POST["fname"]} {$_POST["lname"]}
POSTAL ADDRESS: {$_POST["postal"]}
EMAIL ADDRESS: {$_POST["email"]}
[... message body etc.]
TEXT;
将文本移动到文件I then try…
$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;
}