2010-05-03 29 views
0

我試圖盡我所能解釋,對不起我的英語。 我有一個鏈接列表,每個鏈接到一個帶有參數id的php文件(例如download.php?id=1?id=2等)。 該文件創建一個類的新實例,返回文件的正確標題,以顯示瀏覽器的保存對話框。需要幫助下載頭文件()函數

現在我需要檢查文件是否已經下載過去(第一次下載它時,我在mysql db上添加了一個字段)。 如果您尚未下載文件,則會進行檢查,否則返回false。

這是問題所在,當它返回false或其他東西時,瀏覽器會將我重定向到download.php文件,所以我得到一個空白頁或我正在迴應的內容。 我需要,如果該文件已經下載它顯示我的意見的PPI的js警報。希望你能明白我的意思。 感謝您的幫助

+0

@riccardo,你的英文很好,不要道歉。你能顯示你使用的代碼,所以我們可以嘗試複製?使用粘貼代碼可以提供幫助,因爲我們可能會發現可能會超出的內容。 – 2010-05-03 15:19:31

+0

好吧,這是好的:)。沒有太多的代碼要顯示。我正在使用一個類來下載從phpclasses下載的文件。 「核心」使用ob_start()爲文件和ob_end_flush()設置標題。這工作像一個魅力,但我不知道如何提供警報,如果文件已經下載。 – Kreker 2010-05-03 15:33:27

回答

2

從技術上講,你可以沒有Ajax的的download.php可以輸出以下,如果用戶已經下載的文件:

<script> 
alert('It was false - you already have the file!'); 
window.back(); 
</script> 

只是取決於它如何妥善與您的網站整合。沒有測試,但那是一般的想法。

+0

mmmm這種工作,但有點不太時尚,因爲它顯示我的空白頁面,警報然後返回並重新加載頁面:( 感謝您的幫助 – Kreker 2010-05-03 15:39:41

+0

這就是爲什麼我說「取決於它與您的網站的整合程度如何」。在用戶決定點擊按鈕時,您始終可以在背景中欣賞帶有音樂的美麗圖片。 – zaf 2010-05-03 15:42:13

0

在這種情況下顯示js警報已經太晚了,您需要執行一些操作來檢查文件是否已下載,然後顯示警報或開始下載文件。

一旦你的網絡瀏覽器開始加載一個新的url(例如download.php),那麼已經太晚了,你已經離開當前頁面。

+0

是的。試圖在AJAX中做一些事情,但現在還有一個問題,ajax的答案可以被操縱,所以會有安全問題。 或者我錯了? – Kreker 2010-05-03 15:31:16

+0

您需要發送一些可用於識別會話的內容。 – zaf 2010-05-03 15:43:37

+0

此外,我可以使用AJAX,但當我通過AJAX調用PHP文件時,它不能返回可下載文件的修改頭文件,因爲jquery(我正在使用它)無法正確處理響應... 我很傷心> :-( – Kreker 2010-05-03 15:45:14

0

所以,你有一個頁面,看起來像:

1. file1 
2. file2 
3. file3 

和他們有聯繫,在每個下載腳本。如果你想防止多次下載,你可以在兩個地方進行。在主文件列表頁面和download.php頁面上。當用戶點擊其中一個文件時,你有一個onclick處理程序從被點擊的文件中刪除鏈接。這可以通過刷新此頁面(並且在生成頁面時不添加下載鏈接)或使用某些DOM操作來刪除文件名周圍的標記來完成。

下載頁面也會檢查文件是否已經發送過去,並且可以自己處理該條件。

如果因爲任何原因客戶端沒有啓用Javascript,在兩個地方都這樣做會很好地降級。

0

您需要在兩個地方處理以獲得最佳行爲。

  1. 確定用戶是否可以在生成下載頁面時下載文件,並且不會爲無法下載的文件創建鏈接。

  2. 爲了處理有某人多個窗口打開或以其他方式下載文件無需重新加載下載頁面的情況下,檢查用戶可以下載該文件在download.php之前發送任何頭。如果他不能,發送重定向回的下載頁面:

    header("Location: downloads.php?error=repeat_download"); 
    exit; 
    

    ...並使用error參數包含在文件列表解釋發生了什麼事的頂部的消息。