problemi con header ed unlink

  • Creatore Discussione Creatore Discussione giuseppederossi
  • Data di inizio Data di inizio
G

giuseppederossi

Guest
Ciao a tutti,
su un mio sito ho implementato la possibilita' di effettuare una scelta in un set di file ed effettuare il download del file zippato contenente i file scelti. Il nome del file zippato viene creato in base alla data e all'ora e dovrebbe essere cancellato alla fine del download.
Tutto viene eseguito in modo corretto tranne unlink(), ossia il file non viene cancellato.Sembra che dopo il download, effettuato o meno in base alla scelta dalla finestra di diaologo, non viene eseguita alcuna istruzione,lato client non sembrano esserci problemi, lo zip e' corretto.
Ho visto molte differenti soluzioni, anche effettuando la cancellazione via shell di dos (sic!) , il problema e' che dopo il download il processo di script termina. Molti hanno usato i miei stessi passi:
- creazione zip
- invio header
- readfile o invio file per burst
- unlink file.
Sto usando PHP 5.0 con wamp, prove effettuate con IE6 sp2

Vi invio il codice un po' disordinato per le prove che ho effettuato:

@ignore_user_abort();
@set_time_limit(0);

header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($nome_file).";");
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($nome_file));
header ("Connection: close"); // non mi pare abbia alcun effetto
// flush();
// readfile($nome_file);

$chunksize = 1*(1024*1024);
$buffer = '';
$cnt =0;
$handle = fopen($nome_file, 'rb');
if ($handle === false) {
return false;
}
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
echo $buffer;
if ($retbytes) {
$cnt += strlen($buffer);
}
}
$status = fclose($handle);
$cancellato= @unlink($nome_file);
$command_zip = "del ".$nome_file;

exec ($command_zip);
exit;

Esiste un sistema per poter intercettare la risposta dell'utente della finestra di dialogo per il download ?

Grazie in anticio

PS: chiedo scusa se questa mail e' ripetuta: ho inviato ieri la medesima ma non l'ho vista pubblicata.
 
In verita' non so, ho cercato di intercettare un output qualsiasi, ma in pratica dopo la funzione di header e readfile o echo $buffer, non riesco a fare fare nulla allo script.
A naso, e' come se si chiudesse tutto. Ho provato anche a spostare:
header ("Connection: close");
alla fine ma dopo il file non viene cancellato.

Ho provato a caricare tutto in memoria cancellare ed inviare, ma in quasto caso il nome del file inviato e' errato, infatti mi viene downlodato il file con il nome dello script !!!
 
Giusto per curiosità, commenta la chiusura dell'handle
PHP:
$status = fclose($handle);
e riesegui lo script
 
Ciao,
ho effettuato la prova ... nulla. Ho pero' una novita': ho visto, tenendo sottocontrollo la directory dove viene creato il file da inviare, che si produceva prima il dialogo di download e poi appariva il file creato (almeno in locale). Ho inserito una pausa, per il momento fissa poi penso di inserire un loop sulla esistenza del file, e a quasto punto ... sorpresa: se effettuo il download del file, questo avviene regolarmente e poi viene cancellato (alleluia), ma se non effettuo il download (premo annulla) lo script termina. La direttiva ignore_user_request(), sembra sia affetta da un baco dal 2004 per sistemi windows !!!! Al momento posso creare un job esterno per cancellare i file piu' vecchi ma non mi piace .
Esiste un work around per il baco della funzione che dovrebbe apunto evitare che lo script si interrompa sull'abor del client ?
Qualche altro suggerimento ?
Grazie in anticipo
 

Discussioni simili