Ich benutze erzwungene Download zum Download hauptsächlich Reißverschlüsse und mp3s vor Ort habe ich (http://pr1pad.kissyour.net) - um Downloads in Google Analytics zu verfolgen, in der Datenbank und zu verstecken echten Download-Pfad:Idiot-proof, browserübergreifend erzwingen download in PHP
Es ist diese:
extending CI model
... - bunch of code
function _fullread ($sd, $len) {
$ret = '';
$read = 0;
while ($read < $len && ($buf = fread($sd, $len - $read))) {
$read += strlen($buf);
$ret .= $buf;
}
return $ret;
}
function download(){
/* DOWNLOAD ITSELF */
ini_set('memory_limit', '160M');
apache_setenv('no-gzip', '1');
ob_end_flush();
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public",FALSE);
header("Content-Description: File Transfer");
header("Content-type: application/octet-stream");
if (isset($_SERVER['HTTP_USER_AGENT']) &&
(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false))
header('Content-Type: application/force-download'); //IE HEADER
header("Accept-Ranges: bytes");
header("Content-Disposition: attachment; filename=\"" . basename("dir-with- files/".$filename) . "\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize("dir-with-files/".$filename));
// Send file for download
if ($stream = fopen("dir-with-files/$filename", 'rb')){
while(!feof($stream) && connection_status() == 0){
//reset time limit for big files
set_time_limit(0);
print($this->_fullread($stream,1024*16));
flush();
}
fclose($stream);
}
}
Es ist auf LAMP mit CI 1.7.2 - Es ist meine eigene Methode zusammengestellt aus verschiedenen how-Tos alle über das Internet, weil während der Entwicklung, die Lösung dieser Probleme kam: - Serverlimit. ini_set
nicht geholfen haben, so habe ich _fullread
statt normalen fread
gepuffert, die insted von @readonly
verwendet wurde - ob_end_flush(), weil, ist nur in CI1.7.2 tat und ich brauchte Puffer
Jetzt Es ... reinigen funktioniert nicht. Es tat, dann hörte es auf, die erwartete Größe/Download-Zeit zu zeigen - ich versuchte es aufzuräumen und während ich den Code aufräumte, passierte etwas, ich weiß nicht was und in irgendeine vorherige Version - es hat nicht funktioniert (keine Änderung in Einstellungen überhaupt) - bearbeiten: nicht arbeiten = gibt alles ins Browserfenster aus.
Also ich sagte, schrauben Sie es, ich werde hier suchen.
Also, ich sehe im Grunde für Skript oder eine Funktion, die ich zu meinem Output-Modell setzen und tun:
- Anrufkraft Download (in Chrome Downloads zu starten, in IE, FF, Safari geöffnet die modal öffnen/speichern/abbrechen)
- anzeigen Größe der Datei und die geschätzte dl Zeit (das ist bis zu Browser, ich weiß, aber zuerst müssen, Browser Dateigröße
- WORK (getestet & bestätigt wissen!) in IE6,7 , 8, FF3, Opera, Chrome & und Safari auf PC + Mac (Linux ... ich don ' t Pflege wirklich) - das ist für Kopfteil
- auf dem Server, ich habe Grenze auch so etwas wie 56MB Speicher, die ich nicht hinzufügen können, so dass auch wichtig
Danke im Voraus.
bearbeiten: Jetzt fühle ich mich mehr denn je/vor geschraubt, da ich Download mit .htaccess zu zwingen versucht - während es funktionierte, es einige kleinere/Haupt (Pick Ihre) Probleme
es- hatte zeigte vollständigen Pfad (für mich minor)
- es wartet, bis ganzer Download es herunterzuladen (zeigen als „Verbinden“) und dann zeigen, gerade fertig ist - und Downloads in einer Sekunde (Dur für mich)
Jetzt, obwohl ich .htac gelöscht habe cess, es wartet immer noch, bis der Download abgeschlossen ist (genau so, als würde es zuerst in den Cache geladen werden) und es wird einfach connected
angezeigt und öffnet/speichert den Dialog.
verwandt: http://stackoverflow.com/questions/1465573/forcing-to-download-a-file-using-php –