2013-02-27 109 views
0

我的表單上傳要添加到使用PHPMailer創建的郵件的文件。文件上傳時延遲執行

不幸的是,郵件沒有被髮送,我認爲這可能是因爲它在執行過程中發送得太快。因此,我想要做的是在小環路增加有效暫停進一步執行,直到該文件已被上傳:

while (!move_uploaded_file($_FILES['upload'][$first_name.' CV'], $target_path)) 
{ 
    sleep(1); 

    if (move_uploaded_file($_FILES['upload'][$first_name.' CV'], $target_path)) 
    { 
     echo "The file ". basename($_FILES['upload'][$first_name.' CV'])." has been uploaded"; 
    } 
    else 
    { 
     echo "There was an error uploading the file, please try again!"; 
    } 
} 

這是我想出但我不完全相信它的在這裏做。

  1. !move_uploaded_file...在循環的開始上傳該文件的聲明:

    請爲我以下澄清?

  2. 如果是,是否在通過循環的每次迭代中上傳文件?
  3. 是否在if語句中的move_uploaded_file...聲明中還聲明瞭上載文件還是隻檢查文件是否已上傳?
  4. 處理這類事情的最佳方式是什麼?我敢肯定這不是它...

在此先感謝!

回答

0

在文件上傳完成之前,PHP腳本不會執行。你正試圖解決錯誤的問題。

Web服務器處理請求,其中包括處理和等待文件數據上傳。只有在Web服務器收到完整的請求後,它纔會調用你的PHP腳本。 (也就是說,除非您使用的是一些不尋常的網絡服務器。)$_FILES中的任何內容都保證在那裏現在

0
  1. 是的,無論如何它是移動文件。一旦它移動了文件,我想它會返回false。
  2. 是的,它試圖在每次迭代時移動文件
  3. 這也試圖移動該文件。你正在執行的方法沒有聲明它。
  4. move_uploaded_file是一個同步調用。只需使用下面的代碼,如果文件上傳成功,它將輸入if語句。我猜這是一個紅色的鯡魚爲您的問題

代碼:

if (move_uploaded_file($_FILES['upload'][$first_name.' CV'], $target_path)) 
{ 
    echo "The file ". basename($_FILES['upload'][$first_name.' CV'])." has been uploaded"; 
} 
else 
{ 
    echo "There was an error uploading the file, please try again!"; 
} 
+0

您在紅鯡魚問題失去我了,但幸運的是我還沒有應用,同時還循環。我目前所有的是if語句,但它似乎沒有上傳文件(服務器中的文件夾是空的)... – Ortund 2013-02-27 10:53:44

+0

我的意思是這可能不是爲什麼你的郵件不被髮送! – cowls 2013-02-27 10:55:10

+0

啊......這讓我想知道還有什麼可以的:/ – Ortund 2013-02-27 10:56:26