Pongo el código que usé. Es un poco chapuza, y lo reconozco, pero me vale. Éste es el trozo de código que descarga el archivo al ordenador del usuario que lo solicita. Como se ve, primero se recibe el archivo y el directorio (por un tema de diseño específico de esa web, en otro caso sería distinto), preparo la ruta en la que está (de nuevo esto dependerá de la ruta en la que esté el arcvhivo), lo abro, lo transmito y es entonces cuando paso mi función "borrado" por register_shutdown_function(). Por las pruebas que hice y lo que pude averiguar, con esto consigo que no se ejecute la función "borrado" hasta que el archivo "$archivo_a_borrar" haya terminado de "salir" del servidor.
Esto me causó un "efecto colateral", y es que me añadía unos número, a mi entender aleatorios, al comienzo del nombre del archivo, y no he tenido tiempo de investigarlo más a fondo, aunque lo haré. No sé si te ocurrirá siempre lo mismo. El caso es que funciona muy bien.
Código PHP:
<?php
error_reporting(0);
$f = $_POST['archiv'];
$ruta = $_POST['directorio'];
$ruta = '../../'.$ruta;
$ruta = $ruta.'/';
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"$f\"\n");
$fp=fopen($ruta."$f", "r");
fpassthru($fp);
register_shutdown_function("borrado");
function borrado(){
global $fp,$f;
$ruta = $_POST['directorio'];
fclose($fp);
$archivo_a_borrar="/wamp/www/".$ruta."/".$f;
unlink($archivo_a_borrar);
}
?>
Suerte, espero que le sirva a laguien.