Sometimes you will want to execute a long running process in the background because don’t want your user to wait it finished in the frontend. There are a few options to choose, and I chose executing the script in shell_exec
.
Problems
Basically what I was trying to do is like
<?php shell_exec('php bg.php ' . escapeshellarg($param) . ' > /dev/null &');
but somehow the script not executing and there is no error.
In bg.php
, I have set it to log errors
error_reporting(E_ALL); ini_set('error_log', './error_log');
and still no error or output.
After a bit digging, I found out that bg.php
got a syntax error. I tested it by running
$ php -l bot_bg.php PHP Parse error: syntax error, unexpected '}' in bg.php on line 11 Errors parsing bg.php
PHP couldn’t parse the file, thus using php.ini
default value instead of what I set in the code.
Solution
Well, the solution is quite simple. I simply set php.ini
value that I want to override using -d
flag
<?php shell_exec('php -d error_log=errors.log -d error_reporting=E_ALL bg.php ' . escapeshellarg($param) . ' > /dev/null &');
Now PHP-CLI will use php.ini
values that we set using -d
flag instead of what default, even if the file couldn’t be parsed.