【问题标题】:How to expand variables that are in a text file when reading the file into a string?将文件读入字符串时如何扩展文本文件中的变量?
【发布时间】:2021-06-04 23:29:23
【问题描述】:

在处理 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');

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

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

【问题讨论】:

  • str_replace ??像这样想:str_replace($message,'{$_POST["fname"]}',$_POST["fname"])

标签: php file heredoc


【解决方案1】:

可能有重复,如果发现我会删除。但是我想到了两种方法:

如果你像这样构建你的文件:

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();

【讨论】:

    【解决方案2】:

    感谢 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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-28
      • 2012-01-12
      • 2021-04-16
      • 1970-01-01
      • 2012-11-10
      • 1970-01-01
      相关资源
      最近更新 更多