<?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>