Use `env`
We use quite a few technologies to build our products, but Gimme Bar is still primarily a PHP app.
To support these apps, we have a number of command-line scripts that handle maintenance tasks, cron jobs, data migration jobs, data processing workers, etc.
These scripts often run PHP in Gimme Bar land, and we make extensive use of the shebang syntax that uses common Unix practice of putting #!/path/to/interpreter
at the beginning of our command-line code. Clearly, this is nothing special—lots of people do exactly this same thing with PHP scripts.
One thing I have noticed, though, is that many developers of PHP scripts are not aware of the common Unix(y) environment helper, env
.
I put this on Twitter a while ago, and it seemed to resonate with a lot of people:
coates#PHP developers: the shebang line should be #!/usr/bin/env php
not #!/usr/bin/php
or anything else. My php is likely not where yours is.
The beauty of using /usr/bin/env php
instead of just /usr/local/bin/php
or /usr/bin/php
is that env
will use your path to find the php
you have set up for your user.
We've mostly standardized our production and development nodes, but there's no guarantee that PHP will be in the same place on each box where we run it. env
, however, is always located in /usr/bin
—at least on all of the boxes we control, and on my Mac workstation.
Maybe we're testing a new version of PHP that happens to be in /opt/php/bin/php
, or maybe we have to support an old install on a different distribution than our standard, and PHP is located in /bin/php
instead of /usr/bin/php
. The practice of using env
for this helps us push environmental configurations out of our code and into the actual environment.
If you distribute a PHP application that has command-line scripts and shebang lines, I encourage you to adopt the practice of making your shebang line #!/usr/bin/env php
.
Note that this doesn't just apply to PHP of course, but I've seen a definite lack of env
in the PHP world.