How do I hit a set of web pages to run scripts that perform tasks or update data?
Is there a way to set up a cron job or at least execute a php file to run every so often?
On Windows you would use the “Windows Task Scheduler” to execute PHP scripts either via a URL, or directly via a path to php.exe – at specific time intervals (or on specific events).
Run PHP Script Via URL
To hit a URL you can use command line tools such as “wget” or “curl” (wget and curl are already included in WampDeveloper Pro under the Tools folder), and for multiple URLs you would wrap it all up into 1 batch file.
For example, to hit this
URL…http://domain.name/webapp/tools/cron.php
You would use “wget” by executing this command…
C:\WampDeveloper\Tools\gnuwin32\wget.exe -q -O NUL http://domain.name/webapp/tools/cron.php
* The “-q” switch makes wget silent and the “-O NUL” option discards the output (instead of saving it to a file).
Set up a “Windows Scheduled Task” (via “Task Scheduler”)…
Create Task...
Triggers: Daily
Advanced settings... Repeat task every: 5 minutes; Indefinitely
Action: Start a program
Program/script: C:\WampDeveloper\Tools\gnuwin32\wget.exe
Arguments: -q -O NUL http://domain.name/webapp/tools/cron.php
Start In: C:\WampDeveloper\Tools\gnuwin32\
Run PHP Script Directly
An even simpler and more straight-forward way to perform the above is to just run the PHP scripts directly without involving Apache, or anything other than the PHP interpreter/engine (php.exe)…
For example, to create a Task that executes this PHP file every 5
minutes…C:\WampDeveloper\Websites\domain.name\webroot\webapp\tools\cron.php
Set up a “Windows Scheduled Task” (via “Task Scheduler”)…
Create Task...
Triggers: Daily
Advanced settings... Repeat task every: 5 minutes; Indefinitely
Action: Start a program
Program/script: C:\WampDeveloper\Components\Php\php.exe
Arguments: -f C:\WampDeveloper\Websites\domain.name\webroot\webapp\tools\cron.php
Start In: C:\WampDeveloper\Websites\domain.name\webroot\
* The ‘start in’ path would need to reflect the path the script is expecting to be started in (so all its inner relative paths work). Usually this is either the webapp’s folder, or the folder the script is in.
You could also create this Task via the command-line –
schtasks /create /sc minute /mo 5 /tn "my task name" /tr "C:\WampDeveloper\Components\Php\php.exe -f C:\WampDeveloper\Websites\domain.name\webroot\webapp\tools\cron.php"
* The command-line method doesn’t allow a start-in directory.
Run Multiple PHP Scripts via Batch File
If you have multiple scripts or URLs to hit on 1 Task, create a batch file (filename.bat) containing multiple instances of the above commands…
C:\WampDeveloper\Tools\gnuwin32\wget.exe -q -O NUL http://domain.name/url1
C:\WampDeveloper\Tools\gnuwin32\wget.exe -q -O NUL http://domain.name/url2
C:\WampDeveloper\Tools\gnuwin32\wget.exe -q -O NUL http://domain.name/url3
C:\WampDeveloper\Components\Php\php.exe -f C:\WampDeveloper\Websites\domain.name\webroot\path\file1.php
C:\WampDeveloper\Components\Php\php.exe -f C:\WampDeveloper\Websites\domain.name\webroot\path\file2.php
C:\WampDeveloper\Components\Php\php.exe -f C:\WampDeveloper\Websites\domain.name\webroot\path\file3.php
Set up a “Windows Scheduled Task” (via “Task Scheduler”)…
Create Task...
Triggers: Daily
Advanced settings... Repeat task every: 5 minutes; Indefinitely
Action: Start a program
Program/script: C:\path\filename.bat
Arguments:
Start In: C:\path\
Authentication with User and Password
If the URL requires authentication or authorization, use wget with these extra switches to perform HTTP Authentication:
wget -q -O NUL --user=username --password=password http://url
In some obscure situations, switch: --auth-no-challenge
might
need to be used.
Also, in newer versions of wget, the “--user
” and
“--password
” switches might be replaced with
“--http-user
” and “--http-password
“.
Debugging Issues
If wget is unable to hit the URL or script, run it directly from the command
line without silencing the output (i.e., don’t use -q -O NUL
) to
find out what the exact issue is:
wget http://url