А что выдаётся, если скрипт пытается удалить файл, который в данный момент скачивается юзером??
Может какой то код ошибки??
Тогда можно так сделать, при каждым вызове скрипта пытаемся удалить все временные файлы, если ошибка (то есть юзер ещё не закачал), то оставляем в покое этот файл, а если файл удалился без проблем, то значит задание выполнено
Но тут появляется сразу первая проблема: а если у юзера связь оборвалась и он будет докачивать через пару минут??? А мы в эти пару минут удаляем файл
не порядок.
Можно ещё смотреть, как давно файл является временным, например предположить, что юзер должен за час скачать файл, тогда все файлы, созданные более часа назад, удаляем