Home
 

Customer Support

Search for keywords:

Browse by category:

Can I run a PHP script on cron?

Yes, you can run a PHP script on cron. Look here to see how to setup your own crontab.

If your PHP scripts do not have executable permissions, 644 or -rw-r--r-- for example, then as part of the command portion of the cron line, you must specify the php interpreter and pass it the filename of the PHP script (including full path to the script from your home directory) that you want executed, like so:

28 14 * * * /usr/local/bin/php -q /myscript.phtml
6 3 20 4 * /usr/local/bin/php -q /htdocs/www/x.php


The first cron line above will run myscript.phtml located in your home directory every day at 2:28PM. The second line will run the script x.php from your /htdocs/www/ directory once a year on April 20th at 3:06AM.

When you explicitly specify the php interpreter /usr/local/bin/php your scripts need not have filenames ending in .php .phtml .php3 .php4. Conversely, if your script filenames do not end in one of those PHP extensions, then you must explicitly use the php interpreter in the command portion of your cron as above.

The -q flag suppresses HTTP header output. As long as your script itself does not send anything to stdout, -q will prevent cron from sending you an email every time the script runs. For example, print and echo send to stdout. Avoid using these functions if you want to prevent cron from sending you email.

If your PHP scripts do have executable permissions like 755 or -rwxr-xr-x and they have one of the PHP filename extensions above, then you do not need to specify the php interpreter in the command portion of your cron line, like this:

5 17 * * 2 /myscript.php


The above cron would run myscript.php in your home directory every Tuesday at 5:05PM.

User-Contributed Notes

add a note
15-Jul-2004 13:49
See this for running command line php scripts with arguments:

  http://us2.php.net/features.commandline

25-Aug-2004 09:09
When you have a PHP script that manipulates file structure (say deleting
certain files at a certain time) and that script is activated by a cron
job, make sure that you explicitly specify the file system structure in
your script -- that is, write out '/htdocs/www/deleteThisFile.txt'
instead of $_SERVER[DOCUMENT_ROOT].'/deleteThisFile.txt'

For some reason the cron server doesn't activate the
$_SERVER[DOCUMENT_ROOT] variable.

23-Dec-2004 07:22
Wow, this was the first tutorial I found (including all of google's
first page of results) that a.)told me something other than what the
***** mean in the crontab, and b.) Told me how to execute a php script!
I was SO RELIEVED!

I had spent so much time searching through piles of jargon I didn't
understand and that didn't give a SINGLE example of how to run a php
script via cron (even though they purported to be tutorials) and then I
found this. THANK YOU!

20-Sep-2005 15:17
I agree with a number of the other comments that are listed.  This was a
very quick and consise description of how to use cron with php.  Every
other text that I found was useless.

15-Nov-2005 16:09
You can use cURL functions as a replacement for includes:

    http://us2.php.net/curl

rob -at- sportofalifetime.com
06-Mar-2006 20:00
Actually, there is a way to use includes. I had to do this with the
includes because I had multiple levels of scripts and even needed to run
the pear::Mail library. The main thing to conceptualize is that you're
not using Apache's environement anymore so your paths aren't the same as
if you were coming in from a browser. Nevertheless, you can set your env
(path) on the fly and it will behave nicely again LOL:

// Set path since we're not using apache env
ini_set("include_path",
".:/usr/lib/php:/usr/local/lib/php:/home/path/to/pear");

// Now I can include these scripts (which in fact call scripts that call
other scripts...etc.,etc.
include 'Mine_uses_pear_Mail.php';//Mail actually includes other
php...so you see how hairy it can get!
include 'DB.php';

Note that I'm on a shared host, so I ran a phpinfo() script to get the
php default paths; than used those + the pear path that I needed; The
one dot is for current directory i.e.   .:
Also note that the first php script your cron job is running needs to
have:
#!/usr/local/bin/php at the VERY beginning (even before the <?php tag!)
This is because the cron is going to run the script but doesn't now to
get the php iinterpreter involved. That line basically 'execs' or tells
php engine 'hey, run this code'. Sorry for the pedantics, but that's how
I think of it ;)

Here's a set of test scripts you can use to set up the cron initially,
and than if you get it working you can try to adapt to your script. Note
that the ini_set stuff isn't in here because this is a first step set of
scripts to get the cron working right (see my example from above to set
the paths):

Script One that your cron will call, info.php
---------------------------
#!/usr/local/bin/php
<?php
include "info2.php";
echo 'This is info.php';
phpinfo();//this'll put a lot of env info to your email! comment out if
you don't want that
?>
-----------------
Script two info2.php
-----------------
<?php
echo 'We doing an echo from info2...got here!';
?>
-------------------
Now set your cron to run every minute or so while testing and you should
see output to the email you've told cron to report to. Once you're happy
with everything, you can stop the script from logging output to your
email by adding the -q switch to your first line ala:
#!/usr/local/bin/php -q

Hope this helps someone out there in cyberland ;)

08-Mar-2006 18:45
Here is a good crontab reference:

http://en.wikipedia.org/wiki/Crontab

anonymous -at- example.com
10-Jul-2007 22:27
Be aware that when a PHP script runs from cron here, these $_SERVER
values will be different than what you see when you run the PHP script
from your own shell:

$_SERVER['PWD'] = '/var/spool'
$_SERVER['HOME'] = 'actual full path to your homedir as told in other
FAQ'
$_SERVER['TERM'] = 'dumb'

Whereas PWD when the script is run from your shell will be your present
working directory where you were sitting when you invoked the script,
HOME will not exist, and TERM would be 'linux'

Other SERVER vars that come from Apache's environment, like PHP_SELF and
DocumentRoot will not exist when the script is run from cron or from
your shell.

anonymous -at- example.com
05-Mar-2008 06:41
If you really need those server variables you can use the command:
wget http://example.com/cron/script.php

this will essentially make cron call the script as a normal user would,
via apache.

add a note

Related Questions:


How do I set PHP include_path?

What PHP modules are available and how do I load them?

How do I change timezone for PHP?

How do I do html form file uploads?

Why does a PHP function give an error that it is undefined?

Why does PHP HTTP authentication not work?

Why does my PHP script throw an Internal Server Error 500?

What version of PHP are you running and can I see a phpinfo()?

Can you change session cookie timeout in php.ini for me?

I can't upload a file larger than 8MB through a PHP script

Do you have a quick form mail script?

Can I use a PHP extension like PDFlib that I have personally purchased a license to use?

Do you offer PHP5 with MySQLi?

Where is the php_error_log?

Can I have all .html pages parsed as PHP?

What's the difference between running PHP as a cgi or as a module in safe mode?

The PHP curl module doesn't work.

My PHP session is lost whenever I go to a secure URL using the shared SSL certificate.

Do you provide PEAR?

Where can I download free PHP scripts?

How do I get different character sets within my PHP page to display correctly?

Do I need to set any 777 permissions in order for my PHP scripts to create files and directories?

Can I use Smarty Templates?

The PDFlib extension gives a UPR description error.

How do I execute my .php files as PHP 5?

How do I use the url_rewriter.tags setting for PHP?

Why does flush() not flush the data to my browser?

What is CAPTCHA? How can I use it?

Why does PHPLIB sessions give me a MySQL Database error?

Will my Zend Encoded files work?

The pfpro pfpro_process() function keeps giving me Error 31

Will IonCube encoded files work?

I need the virtual() function and it is not available.

Why does getallheaders() say undefined function?

Can I talk over SSL when opening an IMAP connection with the PHP imap_open() function?

How can one PHP file transparently handle all search-engine friendly URLs?

My PHP script needs a newer version of Zend Optimizer. What do I do?

How do I put PHP sessions into a database instead of the default files-based method?

Browse Categories:

Getting Started, FTP, Telnet/SSH, Moving Domains, E-mail, Traffic Reports, Mailing Lists, Apache, PHP, CGI, Other Server-Side Scripting, MySQL Database, Imaging Libraries, Other Software, Billing & Terms, Control Panel, E-commerce, Pre-Sales


Tiny Modwest Logo         Copyright 2000-2008 by Modwest, Inc.          About Us    |    Blog    |    Jobs    |    Web Design    |    Contact Us