I am using CakePHP 2.0 and have been trying to setup a cronjob to execute a method in a controller. I’ve been going nuts, looking over various tutorials and random sites to see if I could find a solution.
The error I am receiving is this:
Undefined variable: argc [APP/webroot/cron_dispatcher.php, line 83
Here is the bottom of the cron_dispatcher.php file in my app/webroot/ directory.
if (!include(CORE_PATH . 'cake' . DS . 'bootstrap.php')) {
trigger_error("CakePHP core could not be found. Check the value of CAKE_CORE_INCLUDE_PATH in APP/webroot/index.php. It should point to the directory containing your " . DS . "cake core directory and your " . DS . "vendors root directory.", E_USER_ERROR);
}
if (isset($_GET['url']) && $_GET['url'] === 'favicon.ico') {
return;
} else {
define('CRON_DISPATCHER',true);
if($argc >= 2) {
$Dispatcher= new Dispatcher();
$Dispatcher->dispatch($argv[1]);
}
}
I cannot find where these variables ($argv and $argc) are defined. They aren’t defined anywhere in the dispatcher.php file itself. I searched Google to no avail. I’m not 100% sure how the Dispatcher works, but any help would be greatly appreciated. Thanks.
== UPDATE
GoDaddy’s shared hosting doesn’t allow you to change the settings of argc argv.
In case anyone else is interested,
In the new CakePHP 2.0.5, you will an index.php in webroot folder:
Copy this file and name it cron_dispatcher.php, and place it into the same directory (webroot)
You will find this code at the very bottom:
change the bottom to
You’re doing two things here: Setting CRON_DISPATCHER to true, and passing environment variables ($argv[1]).
In your controller, add this line before you do anything else:
This will ensure people going to yoursite.com/controller/cronaction won’t be able to run your script.
In your htaccess file in webroot, add this:
This will ensure poeple going to yoursite.com/cron_dispatcher.php won’t be able teo run it.
Now set up the cron job using something like the command: