2010-01-01 108 views
1

我想從php發送電子郵件 我有一個PHP文件,其所有值&其他的PHP模板文件。file_get_contents與查詢字符串

(這兩個文件是同一臺服務器上)

我使用的file_get_contents讓PHP模板文件的內容,例如

$url="emil_form.php"; 
    $a="uname"; 
    if(($Content = file_get_contents($url. "?uname=".$a)) === false) { 
    $Content = ""; 
    } 

    ...... EMAIL Sending Code .......... 

這裏是emil_form.php(電子郵件模板文件)代碼

Your Name is : <?php $_GET['uname']; ?> 

所以一旦我在$ Content中獲得數據我可以通過電子郵件發送它。 但我得到錯誤無法打開文件....

我想要的是從原始的PHP文件傳遞數據到模板的PHP文件和什麼將模板輸出存儲在變量,所以我可以通過電子郵件發送它。

該怎麼辦?

感謝

+0

後你 – 2010-01-01 14:20:06

+0

確切的錯誤做,如果你直接調用emil_form.php?UNAME = UNAME你得到一個錯誤.. 。? – jjclarkson 2010-01-01 14:22:53

回答

9

真正的問題是,你試圖讀取一個本地文件與它後面的http查詢字符串。文件系統不理解這一點,並尋找名爲「emil_form.php?uname = uname」的文件。 $ _GET/$ _POST/etc只適用於http連接。

嘗試在模板中放置像「%% NAME %%」這樣的佔位符,並在閱讀模板後將其替換。

<?php 
$url = "emil_form.php"; 
$a = "uname"; 
if(($Content = file_get_contents($url)) === false) { 
    $Content = ""; 
} 
$Content = str_replace('%%NAME%%', $a, $Content); 
// sending mail.... 

模板將是這樣的:

Your Name is: %%NAME%% 
+0

優秀的第一個答案,我只是寫同樣的東西,但你打敗了我。 – 2010-01-01 14:50:16

+0

絕對的天才 - 愛它,謝謝你,你救了我這麼多痛苦!!!!! – 2013-02-19 08:51:09

0

請注意,您必須在$ URL文件名錯誤,WSS嘗試加載emil_form.php。

第二個問題似乎是您用於調用$ url的路徑。嘗試使其成爲完整URL以正確解析文件,避免任何您可能需要做的模板。 RTT會更慢,但你不必更改任何代碼。這看起來像:

$url = 'http://www.mysite.com/email_form.php'; 
    $a = "uname"; 
    if(($Content = file_get_contents($url. "?uname=".$a)) === false) { 
     $Content = ""; 
    } 
+0

'「email_form.php」'和'「./email_form.php」'有什麼區別? – 2010-01-01 14:46:46

+0

./表示當前目錄。 – 2010-01-01 14:59:21

1

下面是一個替代的解決方案...... 使用由「cballou」建議閱讀文件的相對路徑或絕對路徑。

但是冒險的php文件使用簡單的文本文件把你的消息模板,它取代<?php $_GET['uname']; ?>%uname%(替換鍵)獨特的東西。 讀取文件內容到一個變量,並與你的變量替換替換鍵像這樣,

$url = "/usr/local/path/to/email_form.txt"; 
     $a = "uname"; 
     if(($Content = file_get_contents($url)) === false) { 
      $Content = ""; 
     }else{ 
      $content = str_replace('%uname%', $a, $content); 
     }