PHP $_SERVER variables - CLI via SSH vs cron
Posted January 31st, 2012 in PHP
I have a number of batch processes that run using PHP as the command interpreter, and discovered after making a change to one of them the other day that the variables available to PHP in the $_SERVER superglobal are different depending on whether it's run via an SSH session or cron. This post shows the difference on Debian 6. The values available are probably the same on other distros.
$_SERVER using the CLI via SSH
Using the PHP command line interpeter (CLI) the following was displayed when running print_r($_SERVER), showing which variables are available:
Array
(
[TERM] => xterm-color
[SHELL] => /bin/bash
[SSH_CLIENT] => A.B.C.D 58867 22
[SSH_TTY] => /dev/pts/0
[USER] => chris
[MAIL] => /var/mail/chris
[PATH] => /usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
[PWD] => /tmp
[LANG] => en_NZ.UTF-8
[SHLVL] => 1
[HOME] => /home/chris
[LOGNAME] => chris
[SSH_CONNECTION] => A.B.C.D 58867 A.B.C.D 22
[_] => /usr/bin/php
[OLDPWD] => /home/chris
[PHP_SELF] => 1.php
[SCRIPT_NAME] => 1.php
[SCRIPT_FILENAME] => 1.php
[PATH_TRANSLATED] => 1.php
[DOCUMENT_ROOT] =>
[REQUEST_TIME] => 1327976915
[argv] => Array
(
[0] => 1.php
)
[argc] => 1
)
Note that I've substituted the actual IP addresses with A.B.C.D in the example above.
$_SERVER using the CLI via cron
Running a PHP script under cron yields less variables in the $_SERVER array. My example script doing print_r($_SERVER) output this:
Array
(
[HOME] => /home/chris
[LOGNAME] => chris
[PATH] => /usr/bin:/bin
[LANG] => en_NZ.UTF-8
[SHELL] => /bin/sh
[PWD] => /home/chris
[PHP_SELF] => /tmp/1.php
[SCRIPT_NAME] => /tmp/1.php
[SCRIPT_FILENAME] => /tmp/1.php
[PATH_TRANSLATED] => /tmp/1.php
[DOCUMENT_ROOT] =>
[REQUEST_TIME] => 1327976941
[argv] => Array
(
[0] => /tmp/1.php
)
[argc] => 1
)
Reason for posting this
As I mentioned at the start of this post, I run a lot of batch processes via cron using PHP. Sometimes I need to use $_SERVER variables and as I discovered they're not all available under cron, so testing via the command line won't necessarily yield the same response as when using cron.
I've posted this as a quick reference should I need to use $_SERVER variables in the future using cron so I can see what's available. With the issue I was having the other day, it was the [USER] variable being present from the command line using SSH which isn't present when using cron.
Related posts:
- PHP command line syntax checking (Saturday, April 24th 2010)
- Running PHP scripts as shell scripts (Monday, February 2nd 2009)
- Command line arguments for the PHP CLI (Thursday, June 19th 2008)
- Command line arguments with a PHP CLI script (Sunday, June 15th 2008)
- Determine whether PHP is being run via HTTP or CLI (Saturday, March 8th 2008)

Comments
blog comments powered by Disqus