|
Posted by Arthur Wiebe on 07/01/05 03:39
Richard Lynch wrote:
> On Sat, June 25, 2005 11:55 am, Arthur Wiebe said:
>
>>vlad georgescu wrote:
>>
>>>i want to make a "reminder" application which sends emails at certain
>>>hour
>>>in php. is this posibile ? if not, what else can I use ?
>>>
>>
>>I've done it using pure PHP for a calendar script.
>>
>>What I did was write a PHP script with a loop that checks every second
>>whether or not something should be done. For example:
>>
>>
>><?php
>>$t = true;
>>while ($t) {
>> if (time() == $myTimeStamp) {
>> mail(args);
>> }
>>}
>>?>
>>
>>at the top of the script I have a line like this:
>>#!/usr/bin/env php
>>for *nixs' and I wrote a little batch file for Windows systems.
>>At least it works.
>
>
> This works, but it's kind of resource intensive, I think...
>
> You've pretty much got a whole PHP binary running all day, every day. Not
> a real big deal, but it's not really needed, as you'll see.
>
> Your loop is the big issue.
>
> You're going to call time() maybe a few thousand times in one second!
>
> At least in *MY* single crude bench mark test, it got called 6082 times.
> <?php
> $start = time();
> $i = 1;
> while (time() == $start){
> echo $i, "\n";
> $i++
> }
> ?>
>
> I will spare you the 6000+ lines of output, but it ended with 6082. :-)
>
> Do you really want PHP sitting there spinning its wheels furiously to call
> time() 6000 times every second?...
>
> You could simple put a sleep(1) inside your loop, so it would sleep for
> one second.
>
> Even then, do you really need to check email every single second of every
> day?
>
> Maybe if you have a *TON* of email to send out...
>
> It's more likely that sending email every 5 minutes would work just fine.
>
> The better solution, IMHO, would be to use cron (see: man 5 crontab) to
> run a script every 5 minutes to see who needs to get email notification,
> and send out the emails, and quit.
>
> 5 minutes can be varied as needed for your application.
>
> Sometimes it can be 24 hours, or a whole week.
>
> Other times you actually *WANT* it every minute.
>
> If your web calendar only allows things to occur on even 15 minute blocks,
> then there's not much point to checking more frequently than every 15
> minutes, because nothing can happen to change things until 15 minutes goes
> by, except users changing their preferences, and that can either run the
> script as well, or they can just be warned in the interface that it will
> take at least 30 minutes for their change to take effect.
>
> 29 minutes, actually, if they just missed the last cron job, but who's
> counting?
>
Yes, that is something I forgot to mention. I use the sleep() function
with a value of 1 and the script runs using 0% of the CPU.
Navigation:
[Reply to this message]
|