2011-02-11 22:17:06 +01:00
|
|
|
<?php
|
|
|
|
|
Improve error messages for PHABRICATOR_ENV
Summary:
- Allow user to specify "myconf" (recommended) or "myconf.conf.php" (less
surprising).
- Make sure syntax errors and other problems are surfaced.
- If the configuration value isn't valid, give them a list of all valid
values.
Test Plan:
- Added a syntax error, got a useful error.
- Set PHABRICATOR_ENV to a silly value, got a list of valid values.
- Set PHABRICATOR_ENV to have .conf.php suffix, site still worked.
Reviewed By: kevinwallace
Reviewers: kevinwallace, codeblock, aran, jungejason, tuomaspelkonen
CC: aran, epriestley, kevinwallace
Differential Revision: 381
2011-05-31 04:52:51 +02:00
|
|
|
function phabricator_read_config_file($original_config) {
|
|
|
|
|
2011-02-11 22:17:06 +01:00
|
|
|
$root = dirname(dirname(__FILE__));
|
Improve error messages for PHABRICATOR_ENV
Summary:
- Allow user to specify "myconf" (recommended) or "myconf.conf.php" (less
surprising).
- Make sure syntax errors and other problems are surfaced.
- If the configuration value isn't valid, give them a list of all valid
values.
Test Plan:
- Added a syntax error, got a useful error.
- Set PHABRICATOR_ENV to a silly value, got a list of valid values.
- Set PHABRICATOR_ENV to have .conf.php suffix, site still worked.
Reviewed By: kevinwallace
Reviewers: kevinwallace, codeblock, aran, jungejason, tuomaspelkonen
CC: aran, epriestley, kevinwallace
Differential Revision: 381
2011-05-31 04:52:51 +02:00
|
|
|
|
|
|
|
// Accept either "myconfig" (preferred) or "myconfig.conf.php".
|
|
|
|
$config = preg_replace('/\.conf\.php$/', '', $original_config);
|
|
|
|
$full_config_path = $root.'/conf/'.$config.'.conf.php';
|
|
|
|
|
|
|
|
// Make sure config file errors are reported.
|
|
|
|
$old_error_level = error_reporting(E_ALL | E_STRICT);
|
|
|
|
$old_display_errors = ini_get('display_errors');
|
|
|
|
ini_set('display_errors', 1);
|
|
|
|
|
|
|
|
ob_start();
|
|
|
|
$conf = include $full_config_path;
|
|
|
|
$errors = ob_get_clean();
|
|
|
|
|
|
|
|
error_reporting($old_error_level);
|
|
|
|
ini_set('display_errors', $old_display_errors);
|
|
|
|
|
2011-02-11 22:17:06 +01:00
|
|
|
if ($conf === false) {
|
Improve error messages for PHABRICATOR_ENV
Summary:
- Allow user to specify "myconf" (recommended) or "myconf.conf.php" (less
surprising).
- Make sure syntax errors and other problems are surfaced.
- If the configuration value isn't valid, give them a list of all valid
values.
Test Plan:
- Added a syntax error, got a useful error.
- Set PHABRICATOR_ENV to a silly value, got a list of valid values.
- Set PHABRICATOR_ENV to have .conf.php suffix, site still worked.
Reviewed By: kevinwallace
Reviewers: kevinwallace, codeblock, aran, jungejason, tuomaspelkonen
CC: aran, epriestley, kevinwallace
Differential Revision: 381
2011-05-31 04:52:51 +02:00
|
|
|
if (!Filesystem::pathExists($full_config_path)) {
|
Remove old, confusing configuration files
Summary:
Fixes T6230. These files have not been read by default for a long time, but users are frequently confused and try to edit `default.conf.php`.
Remove the actual files. Allow `phabricator_read_config_file(...)` to continue working as though they exist so as to not break config-file-based installs.
Test Plan:
I used this script to make sure that removing `default.conf.php` won't change things for installs which are still using config files:
```
<?php
require_once 'scripts/__init_script__.php';
$file = require 'conf/default.conf.php';
$global = new PhabricatorConfigDefaultSource();
$global_values = $global->getAllKeys();
foreach ($file as $key => $value) {
$global_value = idx($global_values, $key, (object)array());
if ($value !== $global_value) {
echo "{$key}\n\n";
echo "FILE VALUE\n";
var_dump($value);
echo "\n";
echo "DEFAULT VALUE\n";
var_dump($global_value);
return;
}
}
```
These were the keys that had issues:
- `log.access.format` Not specified in default.conf.php, safe to speciy.
- `mysql.pass` Empty string in file, null in global. Same effect.
- `metamta.default-addrress` One used `noreply@example.com`, one `noreply@phabricator.example.com`. These are just human-readable examples so it's safe to change behavior.
- `metamta.domain` same as above, `example.com` vs `phabricator.example.com`.
- `phpmailer.smtp-host` One used null, one empty string.
- `phpmailer.smtp-protocol` As above.
- `files.viewable-mime-types` File version is out of date.
- `repository.default-local-path` Null in file, set in global. This is correct to set to a default value now.
- `pygments.dropdown-choices` File version is out of date.
- `environment.append-paths` File version is empty, global version adds common paths. This //could// change behavior, but the web behavior is better and more reasonable in general, and a system would need to be configured in a very bizarre way for this to be relevant.
Reviewers: btrahan
Reviewed By: btrahan
Subscribers: epriestley
Maniphest Tasks: T6230
Differential Revision: https://secure.phabricator.com/D10628
2014-10-02 23:44:29 +02:00
|
|
|
|
|
|
|
// These are very old configuration files which we used to ship with
|
|
|
|
// by default. File based configuration was de-emphasized once web-based
|
|
|
|
// configuration was built. The actual files were removed to reduce
|
|
|
|
// user confusion over how to configure Phabricator.
|
|
|
|
|
|
|
|
switch ($config) {
|
|
|
|
case 'default':
|
|
|
|
case 'production':
|
|
|
|
return array();
|
|
|
|
case 'development':
|
|
|
|
return array(
|
|
|
|
'phabricator.developer-mode' => true,
|
|
|
|
'darkconsole.enabled' => true,
|
|
|
|
'celerity.minify' => false,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
|
Improve error messages for PHABRICATOR_ENV
Summary:
- Allow user to specify "myconf" (recommended) or "myconf.conf.php" (less
surprising).
- Make sure syntax errors and other problems are surfaced.
- If the configuration value isn't valid, give them a list of all valid
values.
Test Plan:
- Added a syntax error, got a useful error.
- Set PHABRICATOR_ENV to a silly value, got a list of valid values.
- Set PHABRICATOR_ENV to have .conf.php suffix, site still worked.
Reviewed By: kevinwallace
Reviewers: kevinwallace, codeblock, aran, jungejason, tuomaspelkonen
CC: aran, epriestley, kevinwallace
Differential Revision: 381
2011-05-31 04:52:51 +02:00
|
|
|
$files = id(new FileFinder($root.'/conf/'))
|
|
|
|
->withType('f')
|
|
|
|
->withSuffix('conf.php')
|
|
|
|
->withFollowSymlinks(true)
|
|
|
|
->find();
|
|
|
|
|
|
|
|
foreach ($files as $key => $file) {
|
|
|
|
$file = trim($file, './');
|
|
|
|
$files[$key] = preg_replace('/\.conf\.php$/', '', $file);
|
|
|
|
}
|
|
|
|
$files = " ".implode("\n ", $files);
|
|
|
|
|
|
|
|
throw new Exception(
|
|
|
|
"CONFIGURATION ERROR\n".
|
|
|
|
"Config file '{$original_config}' does not exist. Valid config files ".
|
|
|
|
"are:\n\n".$files);
|
|
|
|
}
|
|
|
|
throw new Exception("Failed to read config file '{$config}': {$errors}");
|
2011-02-11 22:17:06 +01:00
|
|
|
}
|
Improve error messages for PHABRICATOR_ENV
Summary:
- Allow user to specify "myconf" (recommended) or "myconf.conf.php" (less
surprising).
- Make sure syntax errors and other problems are surfaced.
- If the configuration value isn't valid, give them a list of all valid
values.
Test Plan:
- Added a syntax error, got a useful error.
- Set PHABRICATOR_ENV to a silly value, got a list of valid values.
- Set PHABRICATOR_ENV to have .conf.php suffix, site still worked.
Reviewed By: kevinwallace
Reviewers: kevinwallace, codeblock, aran, jungejason, tuomaspelkonen
CC: aran, epriestley, kevinwallace
Differential Revision: 381
2011-05-31 04:52:51 +02:00
|
|
|
|
2011-02-11 22:17:06 +01:00
|
|
|
return $conf;
|
|
|
|
}
|