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,
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/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
Note that this doesn't just apply to PHP of course, but I've seen a definite lack of
env in the PHP world.