Можно и без крона: при сохранении очередного файла запускать заодно чистку. Причём чистка не обязательно должна быть полной: достаточно стереть несколько подлежащих удалению старых файлов. Ведь этот процесс запускается при каждом сохранении нового файла.
Для ускорения чистки можно при сохранении именовать новый файлы таким образом, чтобы они были отстортированы по времени создания, например, в подпапки по дням, и по времени:
date('Ymd/His-') . substr( md5_file( $tmp_filename), 0, 4)