2012-08-03 45 views
6

我正在創建一個讓用戶「上傳」文件和評論框的簡單表單。 用戶選擇文件後(可以是圖片或pdf)並點擊提交,我不會將 文件存儲到我的網絡服務器,該文件將被插入到電子郵件中併發送給我。在沒有將文件保存到網絡服務器的情況下發送帶附件的電子郵件

我的問題是:如何在不存儲任何地方的情況下附加文件。

我不想使用第三方模塊。

更新:

$attachment = $_FILES["OrderList"]["tmp_name"]; 
$content = file_get_contents($attachment); 
$content = chunk_split(base64_encode($content)); 

我得到了一個錯誤:

Filename cannot be empty in C:\dir\orders\upload.php on line 24

線24 $content = file_get_contents($attachment);

+1

上傳它,將其固定,發送,刪除它。 – Matt 2012-08-03 15:15:30

+0

怎麼樣,將它保存爲臨時文件,然後將其刪除 – amitchhajer 2012-08-03 15:16:00

+0

PHP在您的腳本甚至開始之前將上傳的文件存儲在tmp目錄中,因此您將無法避免將文件保存到文件系統。 – 2012-08-03 15:16:12

回答

3

當你接受來自PHP文件上傳你已經保存它。

只要將它存儲在tmp文件夾中即可使用它。

當腳本結束時,PHP會自動爲你刪除它。

+0

但是當我使用 '$ attachment = $ _FILES [「OrderList」] [「tmp_name」]; $ content = file_get_contents($ attachment); $ content = chunk_split(base64_encode($ content));' 我得到一個錯誤:文件名不能在file_get_contents中爲空 – triston 2012-08-03 15:27:22

+0

您是否回顯$ attachment?它說了什麼?您是否在上載時發佈的腳本中運行代碼段? – 2012-08-05 20:27:54

+0

我通過在php.ini中添加tmp_dir來修復它,最新的php(比5.3更新)不會設置默認的tmp_dir。非常感謝。 – triston 2012-08-08 17:53:41

0

通過上傳文件,它將被保存在服務器上的臨時目錄中。 PUT方法是個例外,在這種情況下,文件直接在php://輸入中發送。之後,您可以使用任何您喜歡的PHP郵件庫。

PHP manual for PUT'ing files

3

今天我遇到了類似的情況,並找到了解決方法,所以這裏是

if ($_FILES["file"]["error"] > 0) { 
echo "Error: " . $_FILES["file"]["error"] . "<br>"; 
} else { 


$temp = explode(".", $_FILES["file"]["name"]); 
$extension = end($temp); 
$newname= $_FILES["file"]["tmp_name"].".".$extension; 
rename($_FILES["file"]["tmp_name"],$newname); 
$attachments = array($newname); 

    wp_mail('emailto send', 'title', 'message','',$attachments); 
} 
+0

是的,你是對的..!這是最簡單的方法。如果你想保留原始文件名,那麼你會改變重命名如下: rename($ _ FILES [「file」] [「name」],$ newname); – Invincible 2015-09-29 09:38:06

相關問題