Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1

    HEADER via PHP: Download file... se peso non funge

    Ho questo bel codicetto:
    $filename = $_POST['filename'];
    // ho specificato il file?
    if(!$filename) die("Devi specificare il nome del file da scaricare.");

    // il file esiste?
    if(!file_exists($filename)) die("File specificato non trovato..");

    // Extract the type of file which will be sent to the browser as a header
    $type = filetype($filename);

    // Download
    header("Content-type: $type");
    header("Content-Length: ".filesize($filename));
    header("Content-Disposition: attachment;filename=$filename");
    header('Pragma: no-cache');

    readfile($filename);

    Il problema è che per file sotto i 2mb, tutto funzione, ma quando cerco di far downloadare file oltre i 2mb, me ne scarica solo una parte (sia che siano file txt, access, e quan'altro).

    Secondo voi dov'è l'inghippo?!

    PLESE, HELP!!!

  2. #2
    Cioè, quale impostazione PHP (o server) blocca il download di file + grandi di 2 mb?
    (sempre che sia qui l'inghippo)...

  3. #3

  4. #4
    hai provato con questa ? http://www.devpro.it/php4_id_72.html
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5

  6. #6
    se il file è più grosso di 7/8 mb nel 90% dei casi non funziona (su hosting linux)

    questo è dovuto al fatto che il codice mette in memoria l'intero file prima di inviarlo di conseguenza se il memory limit è attivo (su linux lo è sempre mentre su windows non lo si può attivare) finisce la memoria e da errore ^^
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  7. #7
    Originariamente inviato da daniele_dll
    se il file è più grosso di 7/8 mb nel 90% dei casi non funziona (su hosting linux)

    questo è dovuto al fatto che il codice mette in memoria l'intero file prima di inviarlo di conseguenza se il memory limit è attivo (su linux lo è sempre mentre su windows non lo si può attivare) finisce la memoria e da errore ^^
    a tal proposito, sfruttando filesize per la length ed inviando l'output in while su fread (fgets quello che è insomma ...) di 4096 in 4096, questo problema resterebbe irrisolto ?
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  8. #8
    no

    il problema si risolverebbe

    è la stessa tecnica che uso io:
    - file a blocchi di 8kb
    - la content-lenght sul filesize del file
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  9. #9
    Originariamente inviato da daniele_dll
    no

    il problema si risolverebbe

    è la stessa tecnica che uso io:
    - file a blocchi di 8kb
    - la content-lenght sul filesize del file

    tipo che questa dovrebbe essere a prova di memory_limit ?
    codice:
    function forceDownload($file) {
    	/**
    	 * Function forceDownload:
    	 *	download any type of file if it exists and is readable
    	 * -------------------------------------
    	 * @author		Andrea Giammarchi
    	 * @date		18/01/2005 [17/05/2006]
    	 * @compatibility	PHP >= 4.3.0
    	 */
    	if(file_exists($file) && is_readable($file)) {
    		$filename = basename($file);
    		if(strpos(strtoupper($_SERVER['HTTP_USER_AGENT']), 'MSIE') !== false && strpos($filename, '.') !== false) {
    			$parsename = explode('.', $filename);
    			$last = count($parsename) - 1;
    			$filename = implode('%2E', array_slice($parsename, 0, $last));
    			$filename .= '.'.$parsename[$last];
    		}
    		header('Content-Type: application/octet-stream');
    		header('Content-Disposition: attachment; filename="'.$filename.'"');
    		header('Content-Length:'.filesize($file));
    		header('Content-Transfer-Encoding: binary');
    		if(@$file = fopen($file, "rb")) {
    			while(!feof($file))
    				echo fgets($file, 8192);
    			fclose($file);
    		}
    		exit(0);
    	}
    }
    P.S. meglio fgets o fread ? ... visto che fgets termina anche al newline dovrei preferire fread, giusto ?
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  10. #10
    per lo più non è che devi preferire ... puoi usare SOLO fread
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.