{
foreach ($GLOBALS['phorkie']['cfgfiles'] as $file => $loaded) {
if ($loaded) {
- $this->ok('Loaded config file: ' . $file);
+ $this->ok('Loaded config file: ' . Tools::foldPath($file));
} else {
- $this->info('Possible config file: ' . $file . ' (not loaded)');
+ $this->info(
+ 'Possible config file: ' . Tools::foldPath($file)
+ . ' (not loaded)'
+ );
}
}
}
return '/';
}
+
+ /**
+ * Resolves "/../" and "/./" in file paths without validating them.
+ */
+ public static function foldPath($path)
+ {
+ $path = str_replace('/./', '/', $path);
+ $path = str_replace('/./', '/', $path);
+ $path = preg_replace('#/[^/]+/\.\./#', '/', $path);
+ $path = preg_replace('#/[^/]+/\.\./#', '/', $path);
+ return $path;
+ }
}
?>
$_SERVER['SCRIPT_NAME'] = '/new.php';
$this->assertEquals('/foo/', Tools::detectBaseUrl());
}
+
+ public function testFoldPathParentSingle()
+ {
+ $this->assertEquals(
+ '/path/to/foo',
+ Tools::foldPath('/path/to/bar/../foo')
+ );
+ }
+
+ public function testFoldPathParentDouble()
+ {
+ $this->assertEquals(
+ '/path/to/foo',
+ Tools::foldPath('/path/to/foo/bar/../../foo')
+ );
+ }
+
+ public function testFoldPathCurrentSingle()
+ {
+ $this->assertEquals(
+ '/path/to/foo/',
+ Tools::foldPath('/path/to/foo/./')
+ );
+ }
+
+ public function testFoldPathCurrentThrice()
+ {
+ $this->assertEquals(
+ '/path/to/foo/',
+ Tools::foldPath('/path/././to/foo/./')
+ );
+ }
}
?>
<div class="page-header">
<h1>phorkie setup check</h1>
</div>
+ <h3>Check results</h3>
<ul class="list-group">
HTM;
}
$out .= <<<HTM
</ul>
+HTM;
+
+if (array_sum($GLOBALS['phorkie']['cfgfiles']) == 0) {
+ //no config file loaded
+ reset($GLOBALS['phorkie']['cfgfiles']);
+ list($cfgFilePath, ) = each($GLOBALS['phorkie']['cfgfiles']);
+
+ $cfgFilePath = Tools::foldPath($cfgFilePath);
+ $cfgFileTemplate = htmlspecialchars(
+ file_get_contents(__DIR__ . '/../data/config.php.dist')
+ );
+
+ $out .= <<<HTM
+ <h3 id="configfile">Configuration file</h3>
+ <p>
+ Phorkie did not find a configuration file.
+ Please create one at
+ </p>
+ <pre>$cfgFilePath</pre>
+ <p>
+ from the following template:
+ </p>
+ <pre>$cfgFileTemplate</pre>
+ <p>
+ Remove the leading <tt>//</tt> from a line if you want to adjust it.
+ </p>
+HTM;
+}
+
+$out .= <<<HTM
<p>
<a href="./">back</a> to the index
</p>