diff --git a/conf/__init_conf__.php b/conf/__init_conf__.php index 94bfd5636f..da4f275297 100644 --- a/conf/__init_conf__.php +++ b/conf/__init_conf__.php @@ -16,11 +16,47 @@ * limitations under the License. */ -function phabricator_read_config_file($config) { +function phabricator_read_config_file($original_config) { + $root = dirname(dirname(__FILE__)); - $conf = include $root.'/conf/'.$config.'.conf.php'; + + // 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); + if ($conf === false) { - throw new Exception("Failed to read config file '{$config}'."); + if (!Filesystem::pathExists($full_config_path)) { + $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}"); } + return $conf; } diff --git a/webroot/index.php b/webroot/index.php index c02cb46404..0d4098b60b 100644 --- a/webroot/index.php +++ b/webroot/index.php @@ -55,11 +55,11 @@ if (get_magic_quotes_gpc()) { require_once dirname(dirname(__FILE__)).'/conf/__init_conf__.php'; try { + setup_aphront_basics(); + $conf = phabricator_read_config_file($env); $conf['phabricator.env'] = $env; - setup_aphront_basics(); - phutil_require_module('phabricator', 'infrastructure/env'); PhabricatorEnv::setEnvConfig($conf);