I'd like to be able to run a line of PHP code on the command line similar to how the following options work:
:~> perl -e "print 'hi';"
:~> python -c "print 'hi'"
:~> ruby -e "puts 'hi'"
I'd like to be able to do:
:~> php "echo 'hi';"
I've read that there is a -r option that can do what I need for php, however it doesn't appear to be available when I try to use it. I've tried using PHP 5.2.13 and PHP 4.4.9 and neither have an -r option available.
I wrote this script (that I called run_php.php) - which works, but I'm not a huge fan of it just because I feel like there should be a more "correct" way to do it.
#!/usr/bin/php5 -q
<?php echo eval($argv[1]); ?>
My question is: is there a -r option? If so, why is it not available when I run --help? If there is no -r option, what is the best way to do this (without writing an intermediary script if possible)?
Thanks!
=== EDIT ===
Because I don't think it was very clear above, the -r option is NOT available to me. Here is the php -h output for both versions of PHP that I'm running.
PHP 4.4.9
Usage: php [-q] [-h] [-s] [-v] [-i] [-f <file>]
php <file> [args...]
-a Run interactively
-C Do not chdir to the script's directory
-c <path>|<file> Look for php.ini file in this directory
-n No php.ini file will be used
-d foo[=bar] Define INI entry foo with value 'bar'
-e Generate extended information for debugger/profiler
-f <file> Parse <file>. Implies `-q'
-h This help
-i PHP information
-l Syntax check only (lint)
-m Show compiled in modules
-q Quiet-mode. Suppress HTTP Header output.
-s Display colour syntax highlighted source.
-v Version number
-w Display source with stripped comments and whitespace.
-z <file> Load Zend extension <file>.
php 5.2.13
Usage: php [-q] [-h] [-s] [-v] [-i] [-f <file>]
php <file> [args...]
-a Run interactively
-C Do not chdir to the script's directory
-c <path>|<file> Look for php.ini file in this directory
-n No php.ini file will be used
-d foo[=bar] Define INI entry foo with value 'bar'
-e Generate extended information for debugger/profiler
-f <file> Parse <file>. Implies `-q'
-h This help
-i PHP information
-l Syntax check only (lint)
-m Show compiled in modules
-q Quiet-mode. Suppress HTTP Header output.
-s Display colour syntax highlighted source.
-v Version number
-w Display source with stripped comments and whitespace.
-z <file> Load Zend extension <file>.
There is NO -r option. When I try to use the -r option I get:
Error in argument 1, char 2: option not found r
Sorry for the confusion.
Extra Semi colon is not required in the end.
You can mention
php -r "echo 'hi';"
instead ofphp -r "echo 'hi';";
Another example(To get current timestamp at command line):
EDIT2: Yep, it's there in PHP 5.2's cli SAPI.
EDIT: If you cannot upgrade and that's the case that there's no such option in PHP 5.2 (I don't have it at hand to test), you can do this:
Original:
There is indeed a
-r
option (though I'm not sure about PHP 5.2):Just make sure you are using the command line version of PHP.
php --version
should give you something like this (notice "cli"):Take a look at this page on PHP command line features, if you haven't already. There are some posts on issues based on OS and double or single quotes.
I would also check the PHP information
to see if PHP was compiled with CLI support disabled (--disable-cli).
The easiest way to do it is to use the -r flag. However, I've found that it does not allow multiline inputs. To work around that, you can do this:
Which lets you pipe from stdin, like so:
However, to answer the original question, if you do not have the -r flag available, it is also possible to use the -f flag - just pass stdin as the file to open:
php -f /dev/stdin
If you do this, be aware that a) you need to include a blank space at the start of the input, and b) you have to open with
<?php
. Example:In new versions of PHP you just type "php -a" and you hop into an interactive mode, where you can experiment with PHP.