If not by cron you need, at the very least, something else to put the wheels into spin once a day.
Something reliable, able to run unattended for days, months, years, until the heat death of the webserver.
You could write it. In php, no doubt. That would be a daemon process on your webserver.
It would have to be started at each startup.
It should be checking when then last job ran and decide if it's time to run another one.
Being daily, it could sleep() for hours (say 1 or 2) and check if sending time passed, then run its job and go back to sleep.
It cannot be run inside apache mod_php or through fastcgi.
Those scripts die after a little time. Say 30 seconds as a rule of thumb.
It could be started via the webserver program, instead of at startup time, yes, through a system()
call to a nohup
on a php command line executable, something like:
<?php system('nohup php jobrunner.php'); ?>
jobrunner should be checking if other copies of itself are running already and in that case commit suicide. It should not be startable or restartable by a web user without entering a password.
And being developed anew from scratch it could have new bugs and security risks involved.
So, yes, it could be done.
And, no, I do not think it should be done, if not for a giant project needing very custom handling of daily jobs.
In general, cron is secure, fast, mantained, known to system administrators, well accepted, already running and available at cheap hosting companies that give no command line or system() access.