Cross platform setting of environment scripts for PHP.
Install in project
composer require asika/cross-env
Install globally
composer global require asika/cross-env
Just call cross-env
:
cross-env APP_ENV=dev TEST_MODE=real php my-code.php
If you install it in project, use composer scripts:
{
...
"scripts": {
"build:dev": "cross-env APP_ENV=dev TEST_MODE=real php my-code.php"
},
...
}
Then call it by composer
composer build:dev
# OR
composer run build:dev
You can also call bin file directly:
./vendor/bin/cross-env APP_ENV=dev TEST_MODE=real php my-code.php
See https://getcomposer.org/doc/articles/scripts.md
If you have installed node cross-env
and has a prior order in PATH,
you can use set-env
as an global alias.
Call cross-source
to set a file as env vars.
cross-source /path/.env php my-code.php
If you want to use cross-env
in your own CLI Application, you can use CrossEnv\CrossEnv
:
$returnCode = \CrossEnv\CrossEnv::runWithCommand('APP_ENV=dev TEST_MODE=real php my-code.php');
// OR
$returnCode = \CrossEnv\CrossEnv::runWithArgs([
'APP_ENV=dev',
'TEST_MODE=real',
'php',
'my-code.php'
);
Add second argument as a callable.
use Symfony\Component\Process\Process;
\CrossEnv\CrossEnv::runWithCommand(
'APP_ENV=dev TEST_MODE=real php my-code.php',
function (string $type, string $buffer) {
if ($type === Process::ERR) {
// Handle error
} else {
// Handle output
}
}
);
See Symfony/Process: https://symfony.com/doc/current/components/process.html#usage