заменить строку в файле с php - PullRequest
4 голосов
/ 29 марта 2009

Я пишу модуль электронной почты для своего веб-приложения, который отправляет пользователю письмо в формате html по завершении задачи, такой как регистрация. Теперь, когда форматирование этого электронного письма может измениться, я решил создать шаблонную html-страницу, которая является электронным письмом, с пользовательскими тегами, которые необходимо заменить, например% fullname%.

Моя функция имеет массив в формате массива (% fullname% => 'Joe Bloggs'); с ключом в качестве идентификатора тега и значением того, что необходимо заменить.

Я пробовал следующее:

        $fp = @fopen('email.html', 'r');

    if($fp)
    {
      while(!feof($fp)){

      $line = fgets($fp);                 

      foreach($data as $value){

          echo $value;
          $repstr = str_replace(key($data), $value, $line);           

      }


      $content .= $repstr;

      }
      fclose($fp);
    }

Это лучший способ сделать это? как только 1 признак заменен в настоящее время ... я на правильном пути или миль от ??

спасибо ...

Ответы [ 4 ]

5 голосов
/ 29 марта 2009

Я думаю, что проблема в вашем foreach. Это должно исправить это:

foreach($data as $key => $value){
    $repstr = str_replace($key, $value, $line);               
}

В качестве альтернативы, я думаю, это должно быть более эффективным:

$file = @file_get_contents("email.html");
if($file) {
    $file = str_replace(array_keys($data), array_values($data), $file);
    print $file;
}
2 голосов
/ 28 ноября 2011
//read the entire string
$str=implode("\n",file('somefile.txt'));

$fp=fopen('somefile.txt','w');
//replace something in the file string - this is a VERY simple example
$str=str_replace('Yankees','Cardinals',$str);

//now, TOTALLY rewrite the file
fwrite($fp,$str,strlen($str));
0 голосов
/ 29 марта 2009

Немного другой подход заключается в использовании heredocs PHP в сочетании с интерполяцией строк, т. Е .:

$email = <<<EOD
<HTML><BODY>
Hi $fullname,
  You have just signed up.
</BODY></HTML>
EOD;

Это позволяет избежать отдельного файла и упростить последующую простую замену.

0 голосов
/ 29 марта 2009

Похоже, это должно сработать, но я бы использовал "file_get_contents ()" и сделал бы это одним большим взрывом.

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