2011-07-15 44 views
4

我試圖通過PHPMailer將訂單通過電子郵件發送給客戶。 我想這樣做是這樣的:PHP - 文件_get_contents()與字符串中的變量?

 $email_page = file_get_contents("email_order_html.php?order=$order_id"); 

我想這個頁面字符串的內容,所以我可以用PHPMailer的發送這一點,但這個功能不會執行,因爲在它的變量$ ORDER_ID的頁面,如何我能解決這個問題嗎?

+1

的file_get_contents不支持的URI - http://php.net/manual /en/function.file-get-contents.php – brezanac

+0

@holodoc是真的,但我會說這個問題很可能是OP不知道diffe將它與一個URI和一個本地文件進行調用。 – Gordon

+0

事實上,我認爲他確實:)他只是使用動態頁面根據與請求一起發送的order_id生成所需的內容。也許有點奇怪的方式來做到這一點,但肯定不是我見過的最差的:) – brezanac

回答

5

您只能在使用file_get_contents與Url Aware Stream Wrapper(例如,URL)時添加Query Params。它將適用於http://localhost/yourfile.php?foo=bar。這樣做會在指定的查詢參數的本地主機上向web服務器發出HTTP Get請求。該請求將被處理並且請求的結果將被返回。

當僅使用file_get_contents僅具有文件名時,不會有任何HTTP請求。通話將直接進入您的文件系統。你的文件系統不是一個網絡服務器。 PHP只會讀取文件內容。它不會執行PHP腳本,只會返回其中的文本。

您應該include該文件並調用腳本手動執行的任何操作。如果腳本依賴於順序參數,請在包含文件之前通過$_GET['order'] = $orderId進行設置。

2
use require("email_order_html.php"); 

$order_id意願提供文件

+0

是和不會,它將可用,但取決於腳本的外觀如何,它不會幫助OP。將它作爲URI參數傳遞,腳本可能要求它在$ _GET中。 – Gordon

+0

但是,$ order_id肯定可用於他曾經調用file_get_contents的地方。 – brezanac

1

正如戈登說,file_get_contents()讀取文件系統中的文件 - 文本或二進制文件,也就是說,這些文件的執行沒有結果。

您可以使用Curl(docs)來做到這一點,以防您想將腳本移動到單獨的服務器。目前,只需包含文件並將參數直接傳遞給所需的函數是一種更爲敏感的方法。

3

其中一種更好的方法是使用輸出緩衝結合簡單的內容創建腳本。

// $order_id is certainly available in place where file_get_contents has been used... 
ob_start(); 
require 'email_order_html.php'; 
$email_page = ob_get_clean(); 
4

email_template.php

<body> 
<p>{foo}</p> 
<p>{bar}</p> 
</body> 

sendmail.php

../ 

$mail = new PHPMailer(); 

//get the file: 
$body = file_get_contents('email_template.php'); 
$body = eregi_replace("[\]",'',$body); 

//setup vars to replace 
$vars = array('{foo}','{bar}'); 
$values = array($foor,$bar); 

//replace vars 
$body = str_replace($vars,$values,$body); 

//add the html tot the body 
$mail->MsgHTML($body); 

/... 

希望它可以幫助別人;)