Reply to Re: file download through php

Your name:

Reply:


Posted by csrster on 03/31/06 14:25

Chung Leong wrote:
> aljosa.mohorovic@gmail.com wrote:
> > I have a problem when doing indirect download of file through php, when
> > I click on download link Firefox and Internet Explorer give me same
> > options: Open and Save. Firefox opens file directly from Internet and
> > downloads without problem.
> >
> > Internet Explorer saves file on local disk and I can open it from disk
> > correctly but when I try to open it directly from Internet it responds
> > with "There was an error opening this document. This file cannot be
> > found.", concrete situation in my usage is Pdf document. Below is my
> > concrete code, any suggestions are appreciated.
> >
> >
> > <?php
> > ob_start();
> > include_once("config.php");
> > ini_set('display_errors', 'Off');
> > error_reporting(0);
> >
> > $args = trim($_SERVER["PATH_INFO"]);
> > $args = preg_replace("/^\//i", '', $args);
> > $argv = explode('/', $args);
> > $id = (int)$argv[0];
> >
> > import('dao.fm.file');
> > $f = fm_file::instance($id);
> >
> > if($f->get('id') < 1) {
> > die('No file.');
> > }
> > header('Content-Disposition: attachment');
> > header('Accept-Charset: UTF-8');
> > header('Content-Type: '.$f->get('type').'; charset="UTF-8";');
> > readfile(get('FILES').'/'.$f->get('id'));
> > ob_end_flush();
> > ?>
>
> The problem you encountered has to do with the dumb way IE's caching
> mechanism works. If it receives a no-cache directive from the server,
> IE would immediately remove the file after it's downloaded. The
> external program doesn't get a chance to open it.
>
> Add this and see if that fixes the problem:
>
> header('Cache-Control: ');

I am wrestling with a very similar problem. Here is some of my php
script (after taking the
above suggestion on board):

Header("Content-Type: application/octet-stream ");
Header("Content-Disposition: attachment; filename=\"$filename\"");
Header("Content-Length: $length");
Header("Cache-Control: ");

clip_tv();
while (@ob_end_flush());
exit();

function clip_tv() {
global $startTime, $duration, $fileLocation, $bitrate;
$startBytes=$startTime*$bitrate;
$cutterCommand = "/home/fedora/bin/mencoder 3>&1 1>&2 -quiet -sb
$startBytes -endpos $duration -oac copy -ovc copy -of mpeg
$fileLocation -o /proc/self/fd/3 2>/dev/null";
passthru($cutterCommand);
}

I (left-) click on a link which calls this script with some request
parameters. IE pops up
a box asking me to open or save. I select "save" and browse to a file.
IE downloads until
it reaches, supposedly, 99% of the total stream length and then "Cannot
copy file. Source
file or disk is unreadable" (my translation).

Firefox is no problem. Incidentally, IE also ignores the suggested
filename in the Content-disposition header.

--
Colin Rosenthal

[Back to original message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация