Defining INI Entries for PHP Scripts
Any semiregular PHP user knows how to pass INI settings to the command line interface:
$ php -d apc.enable_cli=1 script.php
But what about scripts that are executable, with a shebang and
chmod +x
? Here's a simple debug script we'll call apc-status.php
:
#!/usr/bin/php
<?php
echo json_encode($argv), PHP_EOL;
echo "apc.enable_cli = ", ini_get('apc.enable_cli'), PHP_EOL;
Normal invocation gives us this:
$ ./apc-status.php hello
[".\/apc-status.php","hello"]
apc.enable_cli = 0
But the -d
flag doesn't work as we might expect:
$ ./apc-status.php -d apc.enable_cli=1 hello
[".\/apc-status.php","-d","apc.enable_cli=1","hello"]
apc.enable_cli = 0
We can see that -d apc.enable_cli=1
has made it thorugh to the script,
rather than being absorbed and handled by the PHP interpreter. Stepping
back a bit, this makes sense: the interpreter is defined in the shebang
#!/usr/bin/php
. All flags after the script name are handed off to the
script.
By calling the php
binary directly, we can define our custom settings:
$ php -d apc.enable_cli=1 apc-status.php hello
["apc-status.php","hello"]
apc.enable_cli = 1
Alternately, you could modify the shebang:
#!/usr/bin/php -d apc.enable_cli=1<?php
Use one of these techniques if you need to pass ini settings to wrapper
scripts like PHP_CodeSniffer's phpcs
runner, or phpunit
.