Salve a tutti, come vedete sono un nuovo utente e sono contento di entrare a far parte di una community come questa. Mi sto avvicinando da poco al mondo del PHP, e diciamo che lo conosco pochissimo. In ogni caso avrei un piccolo grande problema con uno script che non sono riuscito a risolvere, quindi chiedo aiuto a voi geni

In sostanza lo script serve a limitare la velocità di banda e impostare un intervallo di tempo tra un download e l'altro tramite riconoscimento dell'IP. Lo script funziona bene, il vero problema sta nei settaggi dell'hosting. Difatti, per quanto abbia potuto constatare, sull'hosting è settata la funzione di timeout che si attiva durante il download interrompendolo poichè pare che lo script rimanga in funzione fino a download terminato. Pertanto sono qui per chiedervi se esiste un metodo per raggirare tale problema. Di seguito vi posto il codice:

Codice PHP:
<?php

set_time_limit
(0);
// change this value below
$cs_conn mysql_connect('host''user''pass');
mysql_select_db('database'$cs_conn);

mysql_query("CREATE TABLE IF NOT EXISTS `downloaded` (
  `filepath` varchar(255) NOT NULL,
  `ipadres` varchar(15) NOT NULL,
  `last_access` datetime NOT NULL,
  UNIQUE KEY `filepath` (`filepath`,`ipadres`),
  KEY `ipadres` (`ipadres`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;"
);

$path '/nomefile.exe';
$local_file 'nomefile.exe';
$download_file 'nomefiledasalvare.exe';
$download_rate 100.0// velocità massima di download
$ip addslashes($_SERVER['REMOTE_ADDR']);
$dl false;


$sql sprintf("SELECT UNIX_TIMESTAMP(last_access) last_time FROM downloaded WHERE filepath = '%s' AND ipadres = '%s' ORDER BY last_access DESC"$path$ip);
$res mysql_query($sql);
if (
mysql_num_rows($res) > 0) {
    
$last_xs mysql_result($res0'last_time')+3600;
    if (
$last_xs time()) {
        
mysql_query(sprintf("REPLACE downloaded SET filepath = '%s', ipadres = '%s', last_access = NOW()"$path$ip));
        
$dl true;
    } 
} else {
    
$sql sprintf("REPLACE downloaded SET filepath = '%s', ipadres = '%s', last_access = NOW()"$path$ip);
    
mysql_query($sql);
    
$dl true;
}

if (
$dl) {

    
header('Cache-control: private');
    
header('Content-Type: application/octet-stream');
    
header('Content-Length: '.filesize($local_file));
    
header('Content-Disposition: filename='.$download_file);
 
    
// flush content
    
flush();
 
    
// open file stream
    
$file fopen($local_file"r");
 
    while (!
feof($file)) {
 
        
// send the current file part to the browser
        
print fread($fileround($download_rate 1024));
 
        
// flush the content to the browser
        
flush();
 
        
// sleep one second
        
sleep(1);
    }
 
    
// close file stream
    
fclose($file);
}
else {
    echo(
'<meta http-equiv="refresh" content="4;url=http://www.miosito.it">');
    die(
'Hai già scaricato questo file negli ultimi 60 minuti... Riprova più tardi!');
}

?>
Se ho ben capito il download parte quando si arriva su
codice:
print fread($file, round($download_rate * 1024));
e lo script termina quando il download è terminato, solo che Apache lo interrompe prima con il maledetto timeout.

Conoscete un modo per far sì che magari lo script, durante il download, dia dei "segnali" per azzerare il timeout?