/** * Reads a config file from the given location and returns it's * data as an associative array. * * @param mixed $location location of config file (as a string with a file or directory path) * * @return array config data * * @throws \InvalidArgumentException on errors like missing config file */ protected function readLocation($location) { $reader = null; if (is_dir($location)) { $base_location = Validator::fixPath(Validator::fixRelativePath($location)); foreach ($this->default_filenames as $filename) { $file = $base_location . $filename; if (is_readable($file)) { try { $reader = $this->getReaderByExtension($file); break; // found possible config file \o/ } catch (\InvalidArgumentException $e) { // next attempt as extension has no handler } } // next attempt, as file is not readable or does not exist } if (!$reader instanceof IConfigReader) { throw new \InvalidArgumentException('Could not find an environaut config file in "' . $base_location . '".' . PHP_EOL . 'Attempted files were: ' . implode(', ', $this->default_filenames) . '.' . PHP_EOL . 'Try calling from a different folder or specify a file using the "--config" option.'); } } elseif (is_file($location)) { $reader = $this->getReaderByExtension($location); } else { throw new \InvalidArgumentException('Currently only regular files and directories are supported for config file reading.'); } $config_data = $reader->getConfigData($location); return $config_data; }
public function testFixRelativePath() { $this->assertEquals('', Validator::fixRelativePath('')); $this->assertEquals('.', Validator::fixRelativePath('.')); $this->assertEquals('..', Validator::fixRelativePath('..')); $this->assertEquals('./../..', Validator::fixRelativePath('./../..')); $this->assertEquals('../this/not', Validator::fixRelativePath('../this/not')); $this->assertEquals('i/.htaccess', Validator::fixRelativePath('i/foo/../.htaccess')); $this->assertEquals('i/.htaccess', Validator::fixRelativePath('i/.htaccess')); $this->assertEquals('that/not', Validator::fixRelativePath('that/this/path/../../not')); $this->assertEquals('you/not', Validator::fixRelativePath('you/that/this/path/../../../not')); $this->assertEquals('not', Validator::fixRelativePath('that/this/path/../../../not')); $this->assertEquals('this/not', Validator::fixRelativePath('this/path/../not')); $this->assertEquals('this/path/not', Validator::fixRelativePath('this/path//not')); $this->assertEquals('this/path/not', Validator::fixRelativePath('this/path/./not')); $this->assertEquals('/this/not', Validator::fixRelativePath('/this/not')); $this->assertEquals('this/not', Validator::fixRelativePath('this/not')); $this->assertEquals('./this/not', Validator::fixRelativePath('./this/not')); $this->assertEquals('/this/not', Validator::fixRelativePath('/this/path/../not')); }