No sé como tienes estructurada tu BD .. pero en algún sitio debes registrar los nombres de los archivos .. ya sea automáticamente o manualmanete.
Por ejemplo .. puedes hacer algo tipo:
1) .. primero consultar a tu BD si el archivo está registrado ...
Código PHP:
<?
// etc ... conexion a tu BD ..etc ..
// se consulta si existe el "archivo" registrado ..
$sql="SELECT COUNT(*) FROM tabla WHERE archivo='".$_GET['file']."'";
$resultado=mysql_result($sql,0);
if ($resultado == 0){
//Si no está creado .. se crea.
$sql="INSERT INTO tabla (id,archivo,descargas) VALUES ('','".$_GET['file']."',1)";
msyql_query($sql);
} else {
// si existe .. se incrementa ...
$sql="UPDATE tabla SET descargas=descargas+1 WHERE archivo='".$_GET['file']."'";
mysql_query($sql);
}
?>
Sobre el tema de estar seguro de que la descarga se efectuó completa .. no lo vas a poder saber con seguridad .. PHP ya te he comentado que no tiene control sobre la "transferencia" de los archivos al cliente .. Tendrás que asumir ese riesgo. Usa al menos ese código despues de tus cabeceras HTTP (header() ...) por lo menos si falla por ahí tu script no se contabilizará .. No sé como se comportará con descargas en "pausa" pero tu código no tiene en cuenta la opción "resume" (en las FAQ's hay un ejemplo de descargas con esa opción ... ).
Un saludo,