<?php
echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
require_once 'RelativePath.php';
$docRoot = $_SERVER["DOCUMENT_ROOT"] . "/";
if (!empty($_POST['path'])) {
$paths = array(stripslashes($_POST['path']));
} else {
// These paths are designed to be as insane as reasonably possible. Do not try to make much sense of them please :)
$paths = array(
"../testdir/subdir/anotherdir\\testfile.html",
$docRoot . "/../../home/./John Doe/work/site/test/../../www/Project.1",
$docRoot . "/../../../../../../../../home//./\\\\/John Doe/work\\site/test/../../www/Project.1",
"../../../home/./John Doe/work/site/test/../../www/Project.1/",
"../../../home/./John Doe/work/site/test/../../www/Project.1/" . "/../Project.2/index.html",
"./././../../../../../../../../../home/./John Doe/work/site/test/../../www/Project.1" . "/" . "../Project.2/index.html",
"../../home/../../../John Doe/work/site/test/../../www/Project.1" . "/" . "../Project.2/index.html/../",
"/media/Projects/www/test/images/../../home/../../../John Doe/work/site/test.2/../../www/Project.1");
}
/**
*
* Time execution time for a function
*
* @param unknown_type $function
* @param unknown_type $title
* @param unknown_type $iterations
*/
function execTime($function, $title="", $iterations = 100000) {
list($usec, $sec) = explode(" ", microtime());
$t1 = ($sec+$usec) * 1000;
for ($i = 0 ; $i < $iterations ; $i++) {
$function();
}
list($usec, $sec) = explode(" ", microtime());
$t2 = ($sec+$usec) * 1000;
$t2 = $t2 - $t1;
if (!empty($title)) {
print "<pre>$title: " . number_format((double)$t2, 2) . " ms.</pre>\n";
}
return $t2;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xml; charset=utf-8" />
<style type="text/css">
/*<![CDATA[*/
body,table,form {
font-size: 10pt;
font-family: verdana, helvetica, sans-serif;
}
dt {
font-weight: bold;
margin-bottom: 0px;
padding-bottom: 0px;
background-color: #eeeeee;
}
dd {
margin-top: 0px;
padding-top: 0px;
margin-bottom: 2ex;
}
pre {
margin: 0px;
padding: 0px;
}
/*]]>*/
</style>
<title>Relative Path tests</title>
</head>
<body>
<h1>Relative Path tests</h1>
<?php
print "<p>docRoot: $docRoot</p>\n";
?>
<form method="post">
<p>Path:<br />
<input type="text" size="120" name="path"
value="<?php echo stripslashes($_POST['path']); ?>" /></p>
<p><input type="submit" /></p>
</form>
<dl>
<?php
foreach ($paths as $path) {
echo "<dt><pre>Path '$path' becomes:</pre></dt>\n";
echo "<dd><pre>";
echo "'" . RelativePath::getRelativePath($path) . "'\n";
print "</pre></dd>\n";
}
?>
</dl>
<?php
// This test requires PHP 5.3, due to the use of an anonymous function.
// execTime(function() {
// RelativePath::getRelativePath("./././../../../../../../../../../home/./John Doe/work/site/test/../../www/Project.1/../Project.2/index.html");
// }, "100,000 iterations took");
?>
</body>
</html>
|