Rob
Rob

Reputation: 8101

Is it possible to make a PHP script run itself every hour or so without the use of a cronjob?

I'm pretty sure I've seen this done in a php script once, although I cant find the script. It was some script that would automatically check for updates to that script, and then replace itself if there was an update.

I don't actually need all that, I just want to be able to make my PHP script automatically run every 30 minutes to an hour, but I'd like to do it without cronjobs, if its possible.

Any suggestions? Or is it even possible?

EDIT: After reading through a possible duplicate that RC linked to, I'd like to clarify.

I'd like to do this completely without using resources outside of the PHP script. AKA no outside cronjobs that send a GET request. I'd also like to do it without keeping the script running constantly and sleeping for 30 minutes

Upvotes: 7

Views: 16425

Answers (7)

Li3ro
Li3ro

Reputation: 1877

I found this:

<?php 
    // name of your file 
    $myFile="time.db"; 
    $time=file($myFile); 
    if(time()-3600 > $time[0]){ 
        // an hour has elapsed 
        // do your thing. 

    // write the new timestamp to file 
    $fh = fopen($myFile, 'w') or die("can't open file"); 
    fwrite($fh, time()); 
    fclose($fh); 
    } 

    else{ 
        // it hasn't been an hour yet, so do nothing 
    } 
?>

in here

Upvotes: 1

Mikulas Dite
Mikulas Dite

Reputation: 7941

Either way, you will need to set proper execution time so the script does not exceed it.

Upvotes: 1

RandyMorris
RandyMorris

Reputation: 1264

If the host includes a mysql 5.1+ db then perhaps timed triggers are availible to call the script? I like these mission impossible type questions, but need more information on what kind of playground and rules for the best answer.

Upvotes: 0

Tgr
Tgr

Reputation: 28210

You can either use AJAX calls from your real visitors to run scheduled jobs in the background (google for "poor man's cron", there are a number of implementations out there) or use some external cron-like service (for example a cronjob on some other machine). In theory you could just run a PHP script with no timeout and make it loop forever and fire off requests at the appropriate time, but the only thing that would achieve is reinventing cron in a very ineffective and fragile way (if the script dies for some reason, it will never start again on its own, while cron would just call it again).

Upvotes: 1

Amber
Amber

Reputation: 527378

Without keeping the script running constantly, you'll either have to use something hackish that's not guaranteed to actually run (using regular user pages accesses to run a side routine to see if X amount of time has passed since last run of the script and if so, run it again), or use an external service like cron. There's no way for a regular PHP script to just magically invoke itself.

Upvotes: 1

Galen
Galen

Reputation: 30170

If you get enough hits this will work...

Store a last update time somewhere(file, db, etc...). In a file that gets enough hits add a code that checks if the last update time was more xx minutes ago. If it was then run the script.

Upvotes: 5

Sarfraz
Sarfraz

Reputation: 382881

You may want to use the PHP's sleep function with specified time to run your code with that interval or you may want to try some online cron job services if you wish.

Upvotes: 3

Related Questions