From b491d0dfe198b05bf6c707e122e8222dd1002079 Mon Sep 17 00:00:00 2001 From: Baptiste CONTRERAS <38988658+BaptisteContreras@users.noreply.github.com> Date: Wed, 16 Aug 2023 21:34:32 +0200 Subject: [PATCH] [Runtime] Add environment variable APP_RUNTIME_MODE --- src/Symfony/Component/Runtime/CHANGELOG.md | 5 +++++ .../Internal/autoload_runtime.template | 10 +++++++++ .../Tests/phpt/runtime_mode_from_default.php | 16 ++++++++++++++ .../phpt/runtime_mode_from_default.php.phpt | 12 +++++++++++ .../Tests/phpt/runtime_mode_from_env.php | 18 ++++++++++++++++ .../Tests/phpt/runtime_mode_from_env.php.phpt | 12 +++++++++++ ...rom_env_with_server_and_frankenphp_set.php | 21 +++++++++++++++++++ ...nv_with_server_and_frankenphp_set.php.phpt | 13 ++++++++++++ .../runtime_mode_from_frankenphp_env_var.php | 18 ++++++++++++++++ ...time_mode_from_frankenphp_env_var.php.phpt | 12 +++++++++++ ...untime_mode_from_frankenphp_server_var.php | 18 ++++++++++++++++ ...e_mode_from_frankenphp_server_var.php.phpt | 12 +++++++++++ .../Tests/phpt/runtime_mode_from_server.php | 18 ++++++++++++++++ .../phpt/runtime_mode_from_server.php.phpt | 12 +++++++++++ 14 files changed, 197 insertions(+) create mode 100644 src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_default.php create mode 100644 src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_default.php.phpt create mode 100644 src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_env.php create mode 100644 src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_env.php.phpt create mode 100644 src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_env_with_server_and_frankenphp_set.php create mode 100644 src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_env_with_server_and_frankenphp_set.php.phpt create mode 100644 src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_frankenphp_env_var.php create mode 100644 src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_frankenphp_env_var.php.phpt create mode 100644 src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_frankenphp_server_var.php create mode 100644 src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_frankenphp_server_var.php.phpt create mode 100644 src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_server.php create mode 100644 src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_server.php.phpt diff --git a/src/Symfony/Component/Runtime/CHANGELOG.md b/src/Symfony/Component/Runtime/CHANGELOG.md index 3f5d90c8db90..b3bb7d8b823d 100644 --- a/src/Symfony/Component/Runtime/CHANGELOG.md +++ b/src/Symfony/Component/Runtime/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +6.4 +--- + +* Add the environnement variable `APP_RUNTIME_MODE` + 5.4 --- diff --git a/src/Symfony/Component/Runtime/Internal/autoload_runtime.template b/src/Symfony/Component/Runtime/Internal/autoload_runtime.template index 68af945932ed..99f8c6731437 100644 --- a/src/Symfony/Component/Runtime/Internal/autoload_runtime.template +++ b/src/Symfony/Component/Runtime/Internal/autoload_runtime.template @@ -12,6 +12,16 @@ if (!is_object($app)) { throw new TypeError(sprintf('Invalid return value: callable object expected, "%s" returned from "%s".', get_debug_type($app), $_SERVER['SCRIPT_FILENAME'])); } +if (null === ($_ENV['APP_RUNTIME_MODE'] ??= $_SERVER['APP_RUNTIME_MODE'] ?? null)) { + if ($_ENV['FRANKENPHP_WORKER'] ?? $_SERVER['FRANKENPHP_WORKER'] ?? false) { + $_ENV['APP_RUNTIME_MODE'] = 'worker'; + } elseif (\PHP_SAPI === 'cli' || \PHP_SAPI === 'phpdbg') { + $_ENV['APP_RUNTIME_MODE'] = 'cli'; + } else { + $_ENV['APP_RUNTIME_MODE'] = 'web'; + } +} + $runtime = $_SERVER['APP_RUNTIME'] ?? $_ENV['APP_RUNTIME'] ?? %runtime_class%; $runtime = new $runtime(($_SERVER['APP_RUNTIME_OPTIONS'] ?? $_ENV['APP_RUNTIME_OPTIONS'] ?? []) + %runtime_options%); diff --git a/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_default.php b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_default.php new file mode 100644 index 000000000000..41ce32f9f651 --- /dev/null +++ b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_default.php @@ -0,0 +1,16 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +require __DIR__.'/autoload.php'; + +return function (array $context): void { + echo 'From context ', $context['APP_RUNTIME_MODE'], ', from $_ENV ', $_ENV['APP_RUNTIME_MODE']; +}; diff --git a/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_default.php.phpt b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_default.php.phpt new file mode 100644 index 000000000000..f47e9aaa6011 --- /dev/null +++ b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_default.php.phpt @@ -0,0 +1,12 @@ +--TEST-- +Test set ENV variable APP_RUNTIME_MODE by guessing it from PHP_SAPI +--INI-- +display_errors=1 +--FILE-- + +--EXPECTF-- +From context cli, from $_ENV cli diff --git a/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_env.php b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_env.php new file mode 100644 index 000000000000..8868fa5e78ba --- /dev/null +++ b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_env.php @@ -0,0 +1,18 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +$_ENV['APP_RUNTIME_MODE'] = 'env'; + +require __DIR__.'/autoload.php'; + +return function (array $context): void { + echo 'From context ', $context['APP_RUNTIME_MODE'], ', from $_ENV ', $_ENV['APP_RUNTIME_MODE']; +}; diff --git a/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_env.php.phpt b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_env.php.phpt new file mode 100644 index 000000000000..3778c0719a1d --- /dev/null +++ b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_env.php.phpt @@ -0,0 +1,12 @@ +--TEST-- +Test set ENV variable APP_RUNTIME_MODE from $_ENV +--INI-- +display_errors=1 +--FILE-- + +--EXPECTF-- +From context env, from $_ENV env diff --git a/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_env_with_server_and_frankenphp_set.php b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_env_with_server_and_frankenphp_set.php new file mode 100644 index 000000000000..31397bd993fd --- /dev/null +++ b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_env_with_server_and_frankenphp_set.php @@ -0,0 +1,21 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +$_SERVER['APP_RUNTIME_MODE'] = 'server'; +$_ENV['APP_RUNTIME_MODE'] = 'env'; +$_ENV['FRANKENPHP_WORKER'] = '1'; +$_SERVER['FRANKENPHP_WORKER'] = '1'; + +require __DIR__.'/autoload.php'; + +return function (array $context): void { + echo 'From context ', $context['APP_RUNTIME_MODE'], ', from $_ENV ', $_ENV['APP_RUNTIME_MODE']; +}; diff --git a/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_env_with_server_and_frankenphp_set.php.phpt b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_env_with_server_and_frankenphp_set.php.phpt new file mode 100644 index 000000000000..c5c02da4d35a --- /dev/null +++ b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_env_with_server_and_frankenphp_set.php.phpt @@ -0,0 +1,13 @@ +--TEST-- +Test set ENV variable APP_RUNTIME_MODE from $_ENV with variable also set in $_SERVER and FRANKENPHP_WORKER +also set in $_ENV and $_SERVER +--INI-- +display_errors=1 +--FILE-- + +--EXPECTF-- +From context server, from $_ENV env diff --git a/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_frankenphp_env_var.php b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_frankenphp_env_var.php new file mode 100644 index 000000000000..a252eb4b5f17 --- /dev/null +++ b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_frankenphp_env_var.php @@ -0,0 +1,18 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +$_ENV['FRANKENPHP_WORKER'] = '1'; + +require __DIR__.'/autoload.php'; + +return function (array $context): void { + echo 'From context ', $context['APP_RUNTIME_MODE'], ', from $_ENV ', $_ENV['APP_RUNTIME_MODE']; +}; diff --git a/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_frankenphp_env_var.php.phpt b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_frankenphp_env_var.php.phpt new file mode 100644 index 000000000000..34e4c12a4804 --- /dev/null +++ b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_frankenphp_env_var.php.phpt @@ -0,0 +1,12 @@ +--TEST-- +Test set ENV variable APP_RUNTIME_MODE with FRANKENPHP_WORKER $_ENV variable set +--INI-- +display_errors=1 +--FILE-- + +--EXPECTF-- +From context worker, from $_ENV worker diff --git a/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_frankenphp_server_var.php b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_frankenphp_server_var.php new file mode 100644 index 000000000000..a6942d586c47 --- /dev/null +++ b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_frankenphp_server_var.php @@ -0,0 +1,18 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +$_SERVER['FRANKENPHP_WORKER'] = '1'; + +require __DIR__.'/autoload.php'; + +return function (array $context): void { + echo 'From context ', $context['APP_RUNTIME_MODE'], ', from $_ENV ', $_ENV['APP_RUNTIME_MODE']; +}; diff --git a/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_frankenphp_server_var.php.phpt b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_frankenphp_server_var.php.phpt new file mode 100644 index 000000000000..85bdc6cffabc --- /dev/null +++ b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_frankenphp_server_var.php.phpt @@ -0,0 +1,12 @@ +--TEST-- +Test set ENV variable APP_RUNTIME_MODE with FRANKENPHP_WORKER $_SERVER variable set +--INI-- +display_errors=1 +--FILE-- + +--EXPECTF-- +From context worker, from $_ENV worker diff --git a/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_server.php b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_server.php new file mode 100644 index 000000000000..69b0c91883f2 --- /dev/null +++ b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_server.php @@ -0,0 +1,18 @@ + + * + * For the full copyright and license information, please view the LICENSE + * file that was distributed with this source code. + */ + +$_SERVER['APP_RUNTIME_MODE'] = 'server'; + +require __DIR__.'/autoload.php'; + +return function (array $context): void { + echo 'From context ', $context['APP_RUNTIME_MODE'], ', from $_ENV ', $_ENV['APP_RUNTIME_MODE']; +}; diff --git a/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_server.php.phpt b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_server.php.phpt new file mode 100644 index 000000000000..5f987e8bfeed --- /dev/null +++ b/src/Symfony/Component/Runtime/Tests/phpt/runtime_mode_from_server.php.phpt @@ -0,0 +1,12 @@ +--TEST-- +Test set ENV variable APP_RUNTIME_MODE from $_SERVER +--INI-- +display_errors=1 +--FILE-- + +--EXPECTF-- +From context server, from $_ENV server
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: