Situazione:
Diciamo che il mio hosting ha un "Memory Limit = 128M"
Io ho bisogno di fornire all'utente un file in output "dinamico", dopodichè CANCELLARE il file TEMPORANEO.
Allora, prima possibilità:
Utilizzo "readfile()" in questo modo:
Codice PHP:
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=" . $file_name);
header("Content-Length: " . filesize($file));
readfile($file);
@unlink($file);
La qual cosa "funziona", NON dà problema di "Memory Limit", MA:
se l'utente ANNULLA il "download", la funzione @unlink($file) NON viene eseguita!
Quindi, ho pensato di leggere il file in una "stringa" $data, ELIMINARE il file e spedire la stringa $data al posto del file.. in questo modo:
Codice PHP:
$data = file_get_contents($file);
@unlink($file);
header("Content-Type: application/zip");
header("Content-Disposition: attachment; filename=" . $file_name);
header("Content-Length: " . strlen($data));
echo $data;
Anche questa funziona, MA .. con file "grandi", ottengo l'errore "Allowed Memory size .. Exhausted" !!!
L' errore si verifica quando STAMPO la stringa, non quando la riempio con i dati del file.
Ho provato a "splittare" la stringa $data e spedirla un po' alla volta.. ma non cambia nulla!
Odiooooo!