不适用于PHP file_get_contents

时间:2010-12-28 23:04:12

标签: php

此功能:

public function createMessage($post, $messagename) {
        $dbData = array(); // don't forget to initialize your array
        foreach ($post as $key => $value) {
            $sanitizedValue = strip_tags(ucfirst(strtolower($value)));
            $message = str_replace('{$'.$key.'}', $sanitizedValue, file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/english/forms/_includes/_emails/' . $messagename . '.html'));

        }

        return $message;
    }
当我使用file_get_contents时,

不会替换HTML文件中的变量名称(副本中的{$ var}),但如果我只使用字符串而不是file_get_contents函数则可以。任何人都有任何想法。我在PHP.net的文档中没有看到任何帮助。?

3 个答案:

答案 0 :(得分:1)

您正在为每个变量重新加载文件。在循环之前移动file_get_contents调用:

public function createMessage($post, $messagename) {
  $dbData = array(); // don't forget to initialize your array
  $message = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/english/forms/_includes/_emails/' . $messagename . '.html';
  foreach ($post as $key => $value) {
    $sanitizedValue = strip_tags(ucfirst(strtolower($value)));
    $message = str_replace('{$'.$key.'}', $sanitizedValue, $message));
  }
  return $message;
}

答案 1 :(得分:1)

即使它是你不会得到你期望的结果...因为你在循环的每次迭代中打开内容但从不保存内容,你将永远不会成功地替换所有变量。您将只替换最后一次迭代的一种形式。我猜想是$key中的最后一个$_POST没有在消息模板中匹配它的变量......所以看起来好像没有任何效果,即使它确实存在。

您需要使用file_get_contents outside循环:

    $message = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/english/forms/_includes/_emails/' . $messagename . '.html';
    foreach ($post as $key => $value) {
        $sanitizedValue = strip_tags(ucfirst(strtolower($value)));
        $message = str_replace('{$'.$key.'}', $sanitizedValue, $message));

    }

答案 2 :(得分:0)

尝试打印$_SERVER['DOCUMENT_ROOT'] . '/english/forms/_includes/_emails/' . $messagename . '.html'的输出以确保您到达正确的目录。