开发者

Need help in downloading file with header() function

I'm trying to explain as best as I can, sorry for my English. I have a list of links, each linked to a php file with an id by parameters (ex. download.php?id=1 or ?id=2 and so on). This file create a new instance of a class witch return the correct header of the files so it displays the save dialog box of the browser.

Now I need to check if the files is alr开发者_开发技巧eady downloaded in past (The first time you downloaded it I add a field on the mysql db). This checks go ahead if you haven't download the files, else return false.

Here is the problem, when it returns false or something else the browser redirect me to the download.php file, so I get a blank page or what I'm echoing. I need that if the file is already download it show me a js alert for advice ppl. Hope you can understand what i mean. Thanks for help


Technically you can without ajax, the download.php can output the following if the user has already downloaded the file:

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

Just depends how well it integrates with your site. Not tested but thats the general idea.


it's too late to show a js alert in that case, you'd need to do something like ajax to check whether the file has been downloaded, and then show the alert or start downloading the file then.

once your web browser has started loading a new url (eg download.php) then it is too late, you are already navigating away from the current page.


So you've got a page that looks like:

1. file1
2. file2
3. file3

and they've got links to the download script on each. If you want to prevent multiple downloads, you do it in two places. Here on the main file list page, and on the download.php page. When the user clicks on one of the files, you have an onclick handler remove the link from the clicked file. This can be done by refreshing this page (and simply not adding the download link when the page is generated), or using some DOM manipulation to remove the tag around the filename.

The download page will also do checks if the file's been sent previous and can handle that condition itself.

Doing so in both places will degrade nicely if for whatever reason the client doesn't have Javascript enabled.


You need to handle it in two places for the best behavior.

  1. Determine if the user can download the file when you generate the download page, and don't create links for files that can't be downloaded.

  2. To handle the case of someone having multiple windows open or otherwise downloading a file without reloading the downloads page, check if the user can download the file in download.php before sending any headers. If he can't, send a redirect back to the download page:

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

    …and use the error parameter to include a message at the top of the file list explaining what happened.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜