User tests: Successful: Unsuccessful:
Pull Request for Issue #36898 .
Alternative to PR #45523 .
This is complete (I hope) implementation of environment variables in Joomla.
This version uses Symfony\Dotenv component which have an ability to use php file for the environment variables caching. Which should improve security and boot speed. Also provides CLI commands for dump .env to php file, and for debugging of existing variables.
Compared to vlucas/phpdotenv used in #45523 Symfony\Dotenv lacks of customization (like custom Parser etc) but we probably will not bee need it any time soon.
Key points:
.env (or .env.local.php) in root folder to enable it. Or for CLI run command as JOOMLA_ENV=test php cli/joomla.php foobar-comandJOOMLA_ENV is prod. In this state .env file is not allowed and must be used .env.local.php instead. During installation of prod environment installer will dump .env to .env.local.php and remove .env.New CLI commands:
php cli/joomla.php config-dotenv:dump compiles .env files into a PHP-optimized file .env.local.phpphp cli/joomla.php config-dotenv:debug displays all the environment variables configured by dotenv..env with DB options:JOOMLA_DB_TYPE="mysql"
JOOMLA_DB_HOST="Your DB host"
JOOMLA_DB_USER="Your DB user"
JOOMLA_DB_PASSWORD="Your DB password"
JOOMLA_DB_NAME="Your db name"
JOOMLA_DB_PREFIX="DB prefix"
And run installer. You should be asked for Site name, and User information.
Then installation should be completed, as usual.
.env with all installation parameters and user information:JOOMLA_DB_TYPE="mysql"
JOOMLA_DB_HOST="Your DB host"
JOOMLA_DB_USER="Your DB user"
JOOMLA_DB_PASSWORD="Your DB password"
JOOMLA_DB_NAME="Your db name"
JOOMLA_DB_PREFIX="DB prefix"
JOOMLA_SITE_NAME="Test installation"
JOOMLA_PUBLIC_FOLDER=""
JOOMLA_ADMIN_USER="Your admin user"
JOOMLA_ADMIN_USERNAME="Your admin username"
JOOMLA_ADMIN_PASSWORD="Your admin user password"
JOOMLA_ADMIN_EMAIL="Your admin user email"
And run installer. You will not be asked for Site name, and User information.
The installation should be completed, as usual.
Create .env.local.php with DB options, and copy options from configuration.php.
(skip this step if the site was installed with use of .env)
<?php
return [
'JOOMLA_DB_TYPE' => 'mysql',
'JOOMLA_DB_HOST' => 'Your DB host',
'JOOMLA_DB_USER' => 'Your DB user',
'JOOMLA_DB_PASSWORD' => 'Your DB password',
'JOOMLA_DB_NAME' => 'Your db name',
'JOOMLA_DB_PREFIX' => 'DB prefix',
];Then visit the site, all should work as before.
Please select:
| Status | New | ⇒ | Pending |
| Category | ⇒ | Repository Administration com_config Language & Strings External Library Composer Change Installation JavaScript Libraries |
| Labels |
Added:
Feature
Language Change
Composer Dependency Changed
PR-6.1-dev
|
||
enforce a environment variable to use environment variables
Sorry I did not understand this part, what do you mean?
that the it's allowed with out public folder
It is safe to use now, and for prod env it will require PHP version.
Also requiring "public folder" will make impossible to do installation using env variables which makes whole changes useless.
I tried to test this PR. So I created the .env file with the content you mentioned.
When perfoming the installation using the Web installer everything is like without the .env file. I had to enter everything by hand.
When perfoming the installation using the CLI I get ased all the inputs like without the .env file. But instead of the super user password prompt I get the following output over and over again.
Deprecated: rtrim(): Passing null to parameter #1 ($string) of type string is deprecated in D:\wamp64\www\joom6test\libraries\vendor\symfony\console\Helper\QuestionHelper.php on line 412
[WARNING] Value for admin-password is incorrect: Field required: Set the password for your Super User account
Set the password for your Super User account:
> Das System kann den angegebenen Pfad nicht finden.
Call Stack:
0.0004 493400 1. {main}() D:\wamp64\www\joom6test\installation\joomla.php:0
0.0019 505800 2. require_once('D:\wamp64\www\joom6test\installation\includes\cli.php') D:\wamp64\www\joom6test\installation\joomla.php:39
0.1466 5285672 3. Joomla\Console\Application->execute() D:\wamp64\www\joom6test\installation\includes\cli.php:67
0.2162 5315216 4. Joomla\Console\Application->doExecute() D:\wamp64\www\joom6test\libraries\vendor\joomla\console\src\Application.php:413
0.2955 7268160 5. Joomla\Console\Application->runCommand($command = class Joomla\CMS\Installation\Console\InstallCommand { private ${Joomla\Console\Command\AbstractCommand}aliases = []; private ${Joomla\Console\Command\AbstractCommand}application = class Joomla\CMS\Installation\Application\CliInstallationApplication { protected $config = class Joomla\Registry\Registry { ... }; protected ?Psr\Log\LoggerInterface $logger = class Joomla\CMS\Log\DelegatingPsrLogger { ... }; private ${Joomla\Application\AbstractApplication}dispatcher = class Joomla\Event\Dispatcher { ... }; private ${Joomla\Console\Application}autoExit = TRUE; private ${Joomla\Console\Application}catchThrowables = TRUE; private ${Joomla\Console\Application}commands = [...]; private ${Joomla\Console\Application}commandLoader = NULL; private ${Joomla\Console\Application}consoleInput = class Symfony\Component\Console\Input\ArgvInput { ... }; private ${Joomla\Console\Application}consoleOutput = class Symfony\Component\Console\Output\ConsoleOutput { ... }; private ${Joomla\Console\Application}defaultCommand = 'list'; private ${Joomla\Console\Application}definition = class Symfony\Component\Console\Input\InputDefinition { ... }; private ${Joomla\Console\Application}helperSet = class Symfony\Component\Console\Helper\HelperSet { ... }; private ${Joomla\Console\Application}initialised = TRUE; private ${Joomla\Console\Application}name = 'Joomla CLI installation'; private ${Joomla\Console\Application}runningCommand = ...; private ${Joomla\Console\Application}terminal = class Symfony\Component\Console\Terminal { ... }; private ${Joomla\Console\Application}version = '6.1.0-alpha3'; private ${Joomla\Console\Application}wantsHelp = FALSE; public $input = NULL; protected $language = class Joomla\CMS\Language\Language { ... }; protected $mvcFactory = class Joomla\CMS\MVC\Factory\MVCFactory { ... }; protected $session = class Joomla\CMS\Session\Session { ... }; protected $clientId = 2; protected $identity = NULL; private $userFactory = NULL; private $container = NULL }; private ${Joomla\Console\Command\AbstractCommand}applicationDefinitionMerged = TRUE; private ${Joomla\Console\Command\AbstractCommand}applicationDefinitionMergedWithArgs = TRUE; private ${Joomla\Console\Command\AbstractCommand}definition = class Symfony\Component\Console\Input\InputDefinition { private array $arguments = [...]; private int $requiredCount = 1; private ?Symfony\Component\Console\Input\InputArgument $lastArrayArgument = NULL; private ?Symfony\Component\Console\Input\InputArgument $lastOptionalArgument = NULL; private array $options = [...]; private array $negations = [...]; private array $shortcuts = [...] }; private ${Joomla\Console\Command\AbstractCommand}description = 'Install the Joomla CMS'; private ${Joomla\Console\Command\AbstractCommand}help = '<info>%command.name%</info> will install Joomla\n\t\t\nUsage: <info>php %command.full_name%</info>'; private ${Joomla\Console\Command\AbstractCommand}helperSet = class Symfony\Component\Console\Helper\HelperSet { private array $helpers = [...] }; private ${Joomla\Console\Command\AbstractCommand}hidden = FALSE; private ${Joomla\Console\Command\AbstractCommand}name = 'install'; private ${Joomla\Console\Command\AbstractCommand}synopsis = ['short' => 'install [options] [--] <command>', 'long' => 'install [--site-name SITE-NAME] [--admin-user ADMIN-USER] [--admin-username ADMIN-USERNAME] [--admin-password ADMIN-PASSWORD] [--admin-email ADMIN-EMAIL] [--db-type DB-TYPE] [--db-host DB-HOST] [--db-user DB-USER] [--db-pass [DB-PASS]] [--db-name DB-NAME] [--db-prefix DB-PREFIX] [--db-encryption DB-ENCRYPTION] [--db-sslkey [DB-SSLKEY]] [--db-sslcert [DB-SSLCERT]] [--db-sslverifyservercert [DB-SSLVERIFYSERVERCERT]] [--db-sslca [DB-SSLCA]] [--db-sslcipher [DB-SSLCIPHER]] [--public-folder [PUBLIC-FOLDER]] [-h|'...]; protected $ioStyle = class Symfony\Component\Console\Style\SymfonyStyle { private Symfony\Component\Console\Output\OutputInterface ${Symfony\Component\Console\Style\OutputStyle}output = class Symfony\Component\Console\Output\ConsoleOutput { ... }; private Symfony\Component\Console\Helper\SymfonyQuestionHelper $questionHelper = class Symfony\Component\Console\Helper\SymfonyQuestionHelper { ... }; private Symfony\Component\Console\Helper\ProgressBar $progressBar = *uninitialized*; private int $lineLength = 119; private Symfony\Component\Console\Output\TrimmedBufferOutput $bufferedOutput = class Symfony\Component\Console\Output\TrimmedBufferOutput { ... }; private Symfony\Component\Console\Input\InputInterface $input = class Symfony\Component\Console\Input\ArgvInput { ... }; private Symfony\Component\Console\Output\OutputInterface $output = class Symfony\Component\Console\Output\ConsoleOutput { ... } }; protected $cliInput = class Symfony\Component\Console\Input\ArgvInput { protected Symfony\Component\Console\Input\InputDefinition $definition = class Symfony\Component\Console\Input\InputDefinition { ... }; protected $stream = NULL; protected array $options = [...]; protected array $arguments = [...]; protected bool $interactive = TRUE; private array $tokens = [...]; private array $parsed = [...] } }, $input = class Symfony\Component\Console\Input\ArgvInput { protected Symfony\Component\Console\Input\InputDefinition $definition = class Symfony\Component\Console\Input\InputDefinition { private array $arguments = [...]; private int $requiredCount = 1; private ?Symfony\Component\Console\Input\InputArgument $lastArrayArgument = NULL; private ?Symfony\Component\Console\Input\InputArgument $lastOptionalArgument = NULL; private array $options = [...]; private array $negations = [...]; private array $shortcuts = [...] }; protected $stream = NULL; protected array $options = []; protected array $arguments = ['command' => 'install']; protected bool $interactive = TRUE; private array $tokens = [0 => 'install']; private array $parsed = [] }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private array $styles = [...]; private Symfony\Component\Console\Formatter\OutputFormatterStyleStack $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... }; private bool $decorated = TRUE }; private ${Symfony\Component\Console\Output\StreamOutput}stream = resource(2) of type (stream); private Symfony\Component\Console\Output\OutputInterface $stderr = class Symfony\Component\Console\Output\StreamOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... }; private $stream = resource(3) of type (stream) }; private array $consoleSectionOutputs = [] }) D:\wamp64\www\joom6test\libraries\vendor\joomla\console\src\Application.php:374
0.2971 7371624 6. Joomla\Console\Command\AbstractCommand->execute($input = class Symfony\Component\Console\Input\ArgvInput { protected Symfony\Component\Console\Input\InputDefinition $definition = class Symfony\Component\Console\Input\InputDefinition { private array $arguments = [...]; private int $requiredCount = 1; private ?Symfony\Component\Console\Input\InputArgument $lastArrayArgument = NULL; private ?Symfony\Component\Console\Input\InputArgument $lastOptionalArgument = NULL; private array $options = [...]; private array $negations = [...]; private array $shortcuts = [...] }; protected $stream = NULL; protected array $options = []; protected array $arguments = ['command' => 'install']; protected bool $interactive = TRUE; private array $tokens = [0 => 'install']; private array $parsed = [] }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private array $styles = [...]; private Symfony\Component\Console\Formatter\OutputFormatterStyleStack $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... }; private bool $decorated = TRUE }; private ${Symfony\Component\Console\Output\StreamOutput}stream = resource(2) of type (stream); private Symfony\Component\Console\Output\OutputInterface $stderr = class Symfony\Component\Console\Output\StreamOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... }; private $stream = resource(3) of type (stream) }; private array $consoleSectionOutputs = [] }) D:\wamp64\www\joom6test\libraries\vendor\joomla\console\src\Application.php:1078
0.2974 7373344 7. Joomla\CMS\Installation\Console\InstallCommand->doExecute($input = class Symfony\Component\Console\Input\ArgvInput { protected Symfony\Component\Console\Input\InputDefinition $definition = class Symfony\Component\Console\Input\InputDefinition { private array $arguments = [...]; private int $requiredCount = 1; private ?Symfony\Component\Console\Input\InputArgument $lastArrayArgument = NULL; private ?Symfony\Component\Console\Input\InputArgument $lastOptionalArgument = NULL; private array $options = [...]; private array $negations = [...]; private array $shortcuts = [...] }; protected $stream = NULL; protected array $options = []; protected array $arguments = ['command' => 'install']; protected bool $interactive = TRUE; private array $tokens = [0 => 'install']; private array $parsed = [] }, $output = class Symfony\Component\Console\Output\ConsoleOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { private array $styles = [...]; private Symfony\Component\Console\Formatter\OutputFormatterStyleStack $styleStack = class Symfony\Component\Console\Formatter\OutputFormatterStyleStack { ... }; private bool $decorated = TRUE }; private ${Symfony\Component\Console\Output\StreamOutput}stream = resource(2) of type (stream); private Symfony\Component\Console\Output\OutputInterface $stderr = class Symfony\Component\Console\Output\StreamOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... }; private $stream = resource(3) of type (stream) }; private array $consoleSectionOutputs = [] }) D:\wamp64\www\joom6test\libraries\vendor\joomla\console\src\Command\AbstractCommand.php:234
0.3359 8570104 8. Joomla\CMS\Installation\Console\InstallCommand->getCLIOptions() D:\wamp64\www\joom6test\installation\src\Console\InstallCommand.php:101
7.0553 9429200 9. Joomla\CMS\Installation\Console\InstallCommand->getStringFromOption($option = 'admin-password', $question = 'Set the password for your Super User account', $field = class Joomla\CMS\Form\Field\PasswordField { protected $description = 'INSTL_ADMIN_PASSWORD_LENGTH'; protected $hint = ''; protected $autocomplete = 'new-password'; protected $spellcheck = TRUE; protected $autofocus = FALSE; protected $element = class SimpleXMLElement { public $@attributes = [...] }; protected $form = class Joomla\CMS\Form\Form { protected $data = class Joomla\Registry\Registry { ... }; protected $errors = [...]; protected $name = 'jform'; protected $options = [...]; protected $xml = class SimpleXMLElement { ... }; protected $controlFields = [...]; public $repeat = FALSE; private $databaseAwareTraitDatabase = class Joomla\Database\Mysqli\MysqliDriver { ... }; private $currentUser = class Joomla\CMS\User\User { ... } }; protected $formControl = 'jform'; protected $hidden = FALSE; protected $hiddenLabel = FALSE; protected $hiddenDescription = FALSE; protected $translateLabel = TRUE; protected $translateDescription = TRUE; protected $translateHint = TRUE; protected $id = 'jform_admin_password'; protected $input = NULL; protected $label = NULL; protected $multiple = FALSE; public $repeat = FALSE; protected $pattern = ''; protected $validationtext = ''; protected $name = 'jform[admin_password]'; protected $fieldname = 'admin_password'; protected $group = ''; protected $required = TRUE; protected $disabled = FALSE; protected $readonly = FALSE; protected $type = 'Password'; protected $validate = 'password'; protected $value = ''; protected $default = ''; protected $size = 0; protected $class = 'required'; protected $labelclass = ''; protected $onchange = ''; protected $onclick = ''; protected $showon = ''; protected $parentclass = NULL; protected $layout = 'joomla.form.field.password'; protected $layoutData = []; protected $renderLayout = 'joomla.form.renderfield'; protected $renderLabelLayout = 'joomla.form.renderlabel'; protected $layoutPaths = [0 => '']; protected $dataAttributes = []; private ${Joomla\CMS\Form\FormField}databaseAwareTraitDatabase = class Joomla\Database\Mysqli\MysqliDriver { private ${Joomla\Database\DatabaseDriver}database = ''; public $name = 'mysqli'; public $serverType = NULL; protected $connection = NULL; protected $count = 0; protected $cursor = NULL; protected $executed = FALSE; protected $limit = 0; protected $nameQuote = '`'; protected $nullDate = '0000-00-00 00:00:00'; protected $offset = 0; protected $options = [...]; protected $sql = NULL; protected $statement = NULL; protected $tablePrefix = ''; protected $utf = TRUE; protected $errorNum = 0; protected $errorMsg = NULL; protected $transactionDepth = 0; protected $factory = class Joomla\Database\DatabaseFactory { ... }; protected $monitor = NULL; private ${Joomla\Database\DatabaseDriver}dispatcher = class Joomla\Event\Dispatcher { ... }; protected $utf8mb4 = FALSE; protected $mariadb = FALSE }; private ${Joomla\CMS\Form\FormField}currentUser = class Joomla\CMS\User\User { protected $isRoot = NULL; public $id = 0; public $name = NULL; public $username = NULL; public $email = NULL; public $password = NULL; public $password_clear = ''; public $block = NULL; public $sendEmail = 0; public $registerDate = NULL; public $lastvisitDate = NULL; public $activation = NULL; public $params = NULL; public $groups = [...]; public $guest = 1; public $lastResetTime = NULL; public $resetCount = NULL; public $requireReset = NULL; public $typeAlias = NULL; public $otpKey = NULL; public $otep = NULL; public $authProvider = NULL; protected $_params = class Joomla\Registry\Registry { ... }; protected $_authGroups = NULL; protected $_authLevels = NULL; protected $_authActions = NULL; protected $_errorMsg = NULL; protected $_errors = [...]; private bool $useExceptions = FALSE }; protected $threshold = 66; protected $minLength = 12; protected $maxLength = 99; protected $minIntegers = 0; protected $minSymbols = 0; protected $minUppercase = 0; protected $minLowercase = 0; protected $meter = TRUE; protected $force = FALSE; protected $rules = FALSE; protected $lock = FALSE }) D:\wamp64\www\joom6test\installation\src\Console\InstallCommand.php:262
9.1882 9450744 10. Symfony\Component\Console\Style\SymfonyStyle->askHidden($question = 'Set the password for your Super User account', $validator = ???) D:\wamp64\www\joom6test\installation\src\Console\InstallCommand.php:383
9.1882 9450968 11. Symfony\Component\Console\Style\SymfonyStyle->askQuestion($question = class Symfony\Component\Console\Question\Question { private ?int $attempts = NULL; private bool $hidden = TRUE; private bool $hiddenFallback = TRUE; private ?Closure $autocompleterCallback = NULL; private ?Closure $validator = NULL; private ?Closure $normalizer = NULL; private bool $trimmable = TRUE; private bool $multiline = FALSE; private ?int $timeout = NULL; private string $question = 'Set the password for your Super User account'; private string|int|float|bool|null $default = NULL }) D:\wamp64\www\joom6test\libraries\vendor\symfony\console\Style\SymfonyStyle.php:229
9.1882 9450936 12. Symfony\Component\Console\Helper\QuestionHelper->ask($input = class Symfony\Component\Console\Input\ArgvInput { protected Symfony\Component\Console\Input\InputDefinition $definition = class Symfony\Component\Console\Input\InputDefinition { private array $arguments = [...]; private int $requiredCount = 1; private ?Symfony\Component\Console\Input\InputArgument $lastArrayArgument = NULL; private ?Symfony\Component\Console\Input\InputArgument $lastOptionalArgument = NULL; private array $options = [...]; private array $negations = [...]; private array $shortcuts = [...] }; protected $stream = NULL; protected array $options = []; protected array $arguments = ['command' => 'install']; protected bool $interactive = TRUE; private array $tokens = [0 => 'install']; private array $parsed = [] }, $output = class Symfony\Component\Console\Style\SymfonyStyle { private Symfony\Component\Console\Output\OutputInterface ${Symfony\Component\Console\Style\OutputStyle}output = class Symfony\Component\Console\Output\ConsoleOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... }; private ${Symfony\Component\Console\Output\StreamOutput}stream = resource(2) of type (stream); private Symfony\Component\Console\Output\OutputInterface $stderr = class Symfony\Component\Console\Output\StreamOutput { ... }; private array $consoleSectionOutputs = [...] }; private Symfony\Component\Console\Helper\SymfonyQuestionHelper $questionHelper = class Symfony\Component\Console\Helper\SymfonyQuestionHelper { protected ?Symfony\Component\Console\Helper\HelperSet $helperSet = NULL }; private Symfony\Component\Console\Helper\ProgressBar $progressBar = *uninitialized*; private int $lineLength = 119; private Symfony\Component\Console\Output\TrimmedBufferOutput $bufferedOutput = class Symfony\Component\Console\Output\TrimmedBufferOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... }; private int $maxLength = 4; private string $buffer = '\n > ' }; private Symfony\Component\Console\Input\InputInterface $input = class Symfony\Component\Console\Input\ArgvInput { protected Symfony\Component\Console\Input\InputDefinition $definition = class Symfony\Component\Console\Input\InputDefinition { ... }; protected $stream = NULL; protected array $options = [...]; protected array $arguments = [...]; protected bool $interactive = TRUE; private array $tokens = [...]; private array $parsed = [...] }; private Symfony\Component\Console\Output\OutputInterface $output = class Symfony\Component\Console\Output\ConsoleOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... }; private ${Symfony\Component\Console\Output\StreamOutput}stream = resource(2) of type (stream); private Symfony\Component\Console\Output\OutputInterface $stderr = class Symfony\Component\Console\Output\StreamOutput { ... }; private array $consoleSectionOutputs = [...] } }, $question = class Symfony\Component\Console\Question\Question { private ?int $attempts = NULL; private bool $hidden = TRUE; private bool $hiddenFallback = TRUE; private ?Closure $autocompleterCallback = NULL; private ?Closure $validator = NULL; private ?Closure $normalizer = NULL; private bool $trimmable = TRUE; private bool $multiline = FALSE; private ?int $timeout = NULL; private string $question = 'Set the password for your Super User account'; private string|int|float|bool|null $default = NULL }) D:\wamp64\www\joom6test\libraries\vendor\symfony\console\Style\SymfonyStyle.php:307
9.1882 9450936 13. Symfony\Component\Console\Helper\QuestionHelper->doAsk($inputStream = resource(1) of type (stream), $output = class Symfony\Component\Console\Style\SymfonyStyle { private Symfony\Component\Console\Output\OutputInterface ${Symfony\Component\Console\Style\OutputStyle}output = class Symfony\Component\Console\Output\ConsoleOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... }; private ${Symfony\Component\Console\Output\StreamOutput}stream = resource(2) of type (stream); private Symfony\Component\Console\Output\OutputInterface $stderr = class Symfony\Component\Console\Output\StreamOutput { ... }; private array $consoleSectionOutputs = [...] }; private Symfony\Component\Console\Helper\SymfonyQuestionHelper $questionHelper = class Symfony\Component\Console\Helper\SymfonyQuestionHelper { protected ?Symfony\Component\Console\Helper\HelperSet $helperSet = NULL }; private Symfony\Component\Console\Helper\ProgressBar $progressBar = *uninitialized*; private int $lineLength = 119; private Symfony\Component\Console\Output\TrimmedBufferOutput $bufferedOutput = class Symfony\Component\Console\Output\TrimmedBufferOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... }; private int $maxLength = 4; private string $buffer = '\n > ' }; private Symfony\Component\Console\Input\InputInterface $input = class Symfony\Component\Console\Input\ArgvInput { protected Symfony\Component\Console\Input\InputDefinition $definition = class Symfony\Component\Console\Input\InputDefinition { ... }; protected $stream = NULL; protected array $options = [...]; protected array $arguments = [...]; protected bool $interactive = TRUE; private array $tokens = [...]; private array $parsed = [...] }; private Symfony\Component\Console\Output\OutputInterface $output = class Symfony\Component\Console\Output\ConsoleOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... }; private ${Symfony\Component\Console\Output\StreamOutput}stream = resource(2) of type (stream); private Symfony\Component\Console\Output\OutputInterface $stderr = class Symfony\Component\Console\Output\StreamOutput { ... }; private array $consoleSectionOutputs = [...] } }, $question = class Symfony\Component\Console\Question\Question { private ?int $attempts = NULL; private bool $hidden = TRUE; private bool $hiddenFallback = TRUE; private ?Closure $autocompleterCallback = NULL; private ?Closure $validator = NULL; private ?Closure $normalizer = NULL; private bool $trimmable = TRUE; private bool $multiline = FALSE; private ?int $timeout = NULL; private string $question = 'Set the password for your Super User account'; private string|int|float|bool|null $default = NULL }) D:\wamp64\www\joom6test\libraries\vendor\symfony\console\Helper\QuestionHelper.php:62
9.1889 9450536 14. Symfony\Component\Console\Helper\QuestionHelper->getHiddenResponse($output = class Symfony\Component\Console\Style\SymfonyStyle { private Symfony\Component\Console\Output\OutputInterface ${Symfony\Component\Console\Style\OutputStyle}output = class Symfony\Component\Console\Output\ConsoleOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... }; private ${Symfony\Component\Console\Output\StreamOutput}stream = resource(2) of type (stream); private Symfony\Component\Console\Output\OutputInterface $stderr = class Symfony\Component\Console\Output\StreamOutput { ... }; private array $consoleSectionOutputs = [...] }; private Symfony\Component\Console\Helper\SymfonyQuestionHelper $questionHelper = class Symfony\Component\Console\Helper\SymfonyQuestionHelper { protected ?Symfony\Component\Console\Helper\HelperSet $helperSet = NULL }; private Symfony\Component\Console\Helper\ProgressBar $progressBar = *uninitialized*; private int $lineLength = 119; private Symfony\Component\Console\Output\TrimmedBufferOutput $bufferedOutput = class Symfony\Component\Console\Output\TrimmedBufferOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... }; private int $maxLength = 4; private string $buffer = '\n > ' }; private Symfony\Component\Console\Input\InputInterface $input = class Symfony\Component\Console\Input\ArgvInput { protected Symfony\Component\Console\Input\InputDefinition $definition = class Symfony\Component\Console\Input\InputDefinition { ... }; protected $stream = NULL; protected array $options = [...]; protected array $arguments = [...]; protected bool $interactive = TRUE; private array $tokens = [...]; private array $parsed = [...] }; private Symfony\Component\Console\Output\OutputInterface $output = class Symfony\Component\Console\Output\ConsoleOutput { private int ${Symfony\Component\Console\Output\Output}verbosity = 32; private Symfony\Component\Console\Formatter\OutputFormatterInterface ${Symfony\Component\Console\Output\Output}formatter = class Symfony\Component\Console\Formatter\OutputFormatter { ... }; private ${Symfony\Component\Console\Output\StreamOutput}stream = resource(2) of type (stream); private Symfony\Component\Console\Output\OutputInterface $stderr = class Symfony\Component\Console\Output\StreamOutput { ... }; private array $consoleSectionOutputs = [...] } }, $inputStream = resource(1) of type (stream), $trimmable = TRUE) D:\wamp64\www\joom6test\libraries\vendor\symfony\console\Helper\QuestionHelper.php:109
9.2211 9450536 15. rtrim($string = NULL) D:\wamp64\www\joom6test\libraries\vendor\symfony\console\Helper\QuestionHelper.php:412
Do I have to do anything else than just create the .env file?
If I right remember it is some issue with Laragon
Similar problem #45523 (comment)
@Fedik Have I done something wrong?
Do I need to do something additional then just creating the .env file? Do I need to add it as an environment variable or something?
Because in my test it seems to ignore the .env completely.
I tested with Joomla! 6.1.0 Alpha 3 and PHP v8.3.24.
Depend how did you run the test.
The PR can be tested only with prebuilt package or using GIT.
It cannot be tested with patch tester.
| Labels |
Added:
PBF
|
||
I fixed PR conflict, wait when build is finished. Then can download new prebuilt package.
Oke, now the tests with the Web UI were successful. But with CLI it does not work.
If I do not provide any info for the super user credentials in the .env file then I get the error I already reported:
Deprecated: rtrim(): Passing null to parameter #1 ($string) of type string is deprecated in D:\wamp64\www\joom6test\libraries\vendor\symfony\console\Helper\QuestionHelper.php on line 412
[WARNING] Value for admin-password is incorrect: Field required: Set the password for your Super User account
Set the password for your Super User account:
> Das System kann den angegebenen Pfad nicht finden.
If I provide info for the super user credentials in the .env file then I get the following error, even though I pasted th same password which worked in the Web UI installation:
Install Joomla
==============
Checking system requirements...OK
Collecting configuration...OK
In CliInstallationApplication.php line 143:
Password is too short. Passwords must have at least 12 characters.
The CLI error I already commented #46665 (comment)
It can be something to do with your installation.
Please try CLI install without this PR using latest joomla stable release, does it work?
Please try CLI install without this PR using latest joomla stable release, does it work?
No. With Joomla 6.0.2 (stable release) it also does not work. Here I also get
Deprecated: rtrim(): Passing null to parameter #1 ($string) of type string is deprecated in D:\wamp64\www\joom6test\libraries\vendor\symfony\console\Helper\QuestionHelper.php on line 412
[WARNING] Value for admin-password is incorrect: Field required: Set the password for your Super User account
Set the password for your Super User account:
> Das System kann den angegebenen Pfad nicht finden.
Okay, so it is something to do with your local PHP installation.
Okay, so it is something to do with your local PHP installation.
Then it seems that I can not test this PR. Sorry...
I'm still not happy with 2 things, enforce a environment variable to use environment variables and that the it's allowed with out public folder.