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($res, 0, '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($file, round($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?