2011-11-01 57 views
0

我有一個用戶上載文件的小表單。我想要做的就是直接從tmp位置通過電子郵件發送文件,而不必先移動文件;因爲不需要將其存儲在服務器上。由於PHP在腳本執行後從tmp文件夾中刪除文件,這將是理想的。直接從tmp位置使用上傳的文件

我使用曼努埃爾·萊莫斯的奇妙Mime message e-mail class,並能做到這一點:

$tmp_file = '/www/vhosts/mysite.be/subdomains/subdomainname/httpdocs'.$_FILES['attachment']['tmp_name']; 
$attachment=array(
    "FileName" => $_FILES['attachment']['name'], 
    "Content-Type" => $_FILES['attachment']['type'], 
    "Data" => $tmp_file, 
    "Disposition" => "attachment" 
); 
$email_message->AddFilePart($attachment); 

的問題是,我似乎無法檢索它的TMP位置的文件。我在共享主機系統上。

任何人都可以分享觀點/答案嗎?期待您的意見。

P.S:請注意,有上傳限制/超時/加密類型沒問題......

+1

您是否嘗試過驗證是否存在與上傳文件相關的問題?例如通過記錄'is_readable()'? –

+0

非常感謝。該文件應該是可讀的(根據is_readable())。問題是,腳本告訴我:「無法打開部分文件」 – maartenmachiels

+0

我修改了像'FileName「=> $ _FILES ['attachment'] ['tmp_name']'這樣的腳本,現在它可以工作,問題在於它現在發送名稱爲「glkjmlksjf」的文件,並且沒有任何擴展。任何方式來解決這個問題? – maartenmachiels

回答

1

你不應該需要把該目錄爲$tmp_file作爲tmp_name的值已經包含了這一點。還要檢查文件是否存在,作爲調試它的一種方式。

$tmp_file = $_FILES['attachment']['tmp_name']; 

if (file_exists($tmp_file)) { 
    echo "yay"; 
} 
else { 
    echo "nay :-("; 
} 

看到之後會發生什麼。

+0

謝謝你,你是正確的。定義$ tmp_file並不是必須的。我已經收集了文件的存在。現在出現另一個問題,如第三對這個問題發表評論,你能請問一下大道一看? – maartenmachiels

+0

再次,通過回顯'$ _FILES ['attachment'] ['name']'來調試它,如果這是您需要返回到您所獲得的類的文件的正確名稱並查看它可以工作,因爲它似乎沒有使用'FileName'(也許附件數組沒有正確構造)。 – fire

+0

謝謝!更深入的研究表明,該文件是通過郵件發送的,其臨時名稱只是擴展名。我可以忍受這一點。由於您和Till Helge Helwig的緣故,它以目前的形式發揮作用。祝你有美好的一天。 – maartenmachiels