E-posta içine HTML dosyasını okuyun

5 Cevap php

Ive iyi html e-postaları ve tüm eserlerini göndermek için bir senaryo yazmış. Ben e-posta sonra bir süre döngü ve fgets () istimal okumak ayrı bir HTML dosyasında saklanır var. Ancak, ben html içine değişkenler geçmek mümkün olmak istiyorum. Örneğin, bir html dosyası i gibi bir şey olabilir ..

<body>
    Dear Name <br/>
    Thank you for your recent purhcase
</body>

ve ben bu yüzden böyle bir dizeye bunu okuyun

$file = fopen($filename, "r");
while(!feof($file)) {
    $html.= fgets($file, 4096);
}
fclose ($file);

Ben bir değişkeni tarafından html dosyası "Ad" yerine ve bunu yapmanın en iyi yolu tamamen emin değil im mümkün olmak istiyorum. Ben her zaman kendi etiketi yapmak ve sonra dizeye dosyayı okumak kez ive isim ile değiştirmek için regex kullanabilirsiniz, ancak bunu yapmak için daha iyi / daha kolay bir yöntem varsa im merak olabilir.

(Bir yan not olarak, eğer herkes yerine fgets birden aramaların file_get_contents kullanmak için onun daha iyi olmadığını bilir, id bilmek ilginizi)

5 Cevap

str_replace () ayrıca potansiyel eşleşen ve istemeyebilirsiniz şeyleri değiştirme dezavantajları vardır. Smarty Bu kesinlikle overkill, ben aşağıdaki gibi bir şey yaparak yukarıda Matt'in öneri takip edecek

function getEmailContents(array $vars) {
  extract($vars);

  ob_start();
  include 'email.html.php';
  return ob_get_clean();
}

email.html.php böyle olmazdı

<body>
    Dear <?php echo $name; ?> <br/>
    Thank you for your recent purhcase of <?php echo $product; ?>
</body>

ve bu gibi çağırabilirsiniz

$emailContents = getEmailContents(array('name' => 'El Yobo', 'product' => 'Something'));

Yanlışlıkla bu şekilde her şey maç asla ve kolayca ilave str_replace () çağrıları kullanmak zorunda kalmadan, vb diğer değişkenlerle birlikte genişlettiği.

Eğer çok daha ileri gitmek gerekiyorsa, o Smarty bakarak faydalı olabilir.

Sen gibi tutucuları tanımlamak için str_replace () kullanabilirsiniz

Dear %name
Thank you for your recent purchase of %product

ve sonra anında değiştirin:

$html = str_replace("%name", $order_name, $html);
$product = str_replace("%product", $order_product, $html);

Kullanımı file_get_contents() veya fopen() hem de tüm hakkıdır.

Yerine ve include bunu bir PHP dosyası kullanın. fgets veya replace şey onu okumaya gerek yok.

ob_start();
include("yourTemplate.html.php");

$html = ob_get_clean();

// $html now has whatever your template output

Eğer değişkenler bir sürü varsa, sizin için işi yapmak için böyle Smarty olarak varolan çiftleşmiş motora bakmak isteyebilirsiniz. Alternatif olarak, PHP'nin str_replace() accepts array parameters and is quite powerful in that regard -- or if you need to make sure that whatever you've replaced cannot in turn be mistaken as a placeholder, strtr() bu işlevselliği sunar (ama çok daha uyuşuk).

Eğer gelecekte daha fazla özellik beklemek eğer, bir çiftleşmiş sistemi kullanarak düşünebilirsiniz.