123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- <?php
- /** This file is part of KCFinder project
- *
- * @desc Path helper class
- * @package KCFinder
- * @version 3.12
- * @author Pavel Tzonkov <sunhater@sunhater.com>
- * @copyright 2010-2014 KCFinder Project
- * @license http://opensource.org/licenses/GPL-3.0 GPLv3
- * @license http://opensource.org/licenses/LGPL-3.0 LGPLv3
- * @link http://kcfinder.sunhater.com
- */
- namespace kcfinder;
- class path {
- /** Get the absolute URL path of the given one. Returns FALSE if the URL
- * is not valid or the current directory cannot be resolved (getcwd())
- * @param string $path
- * @return string */
- static function rel2abs_url($path) {
- if (substr($path, 0, 1) == "/") return $path;
- $dir = @getcwd();
- if (!isset($_SERVER['DOCUMENT_ROOT']) || ($dir === false))
- return false;
- $dir = self::normalize($dir);
- $doc_root = self::normalize($_SERVER['DOCUMENT_ROOT']);
- if (substr($dir, 0, strlen($doc_root)) != $doc_root)
- return false;
- $return = self::normalize(substr($dir, strlen($doc_root)) . "/$path");
- if (substr($return, 0, 1) !== "/")
- $return = "/$return";
- return $return;
- }
- /** Resolve full filesystem path of given URL. Returns FALSE if the URL
- * cannot be resolved
- * @param string $url
- * @return string */
- static function url2fullPath($url) {
- $url = self::normalize($url);
- $uri = isset($_SERVER['SCRIPT_NAME'])
- ? $_SERVER['SCRIPT_NAME'] : (isset($_SERVER['PHP_SELF'])
- ? $_SERVER['PHP_SELF']
- : false);
- $uri = self::normalize($uri);
- if (substr($url, 0, 1) !== "/") {
- if ($uri === false) return false;
- $url = dirname($uri) . "/$url";
- }
- if (isset($_SERVER['DOCUMENT_ROOT'])) {
- return self::normalize($_SERVER['DOCUMENT_ROOT'] . "/$url");
- } else {
- if ($uri === false) return false;
- if (isset($_SERVER['SCRIPT_FILENAME'])) {
- $scr_filename = self::normalize($_SERVER['SCRIPT_FILENAME']);
- return self::normalize(substr($scr_filename, 0, -strlen($uri)) . "/$url");
- }
- $count = count(explode('/', $uri)) - 1;
- for ($i = 0, $chdir = ""; $i < $count; $i++)
- $chdir .= "../";
- $chdir = self::normalize($chdir);
- $dir = getcwd();
- if (($dir === false) || !@chdir($chdir))
- return false;
- $rdir = getcwd();
- chdir($dir);
- return ($rdir !== false) ? self::normalize($rdir . "/$url") : false;
- }
- }
- /** Normalize the given path. On Windows servers backslash will be replaced
- * with slash. Removes unnecessary double slashes and double dots. Removes
- * last slash if it exists. Examples:
- * path::normalize("C:\\any\\path\\") returns "C:/any/path"
- * path::normalize("/your/path/..//home/") returns "/your/home"
- * @param string $path
- * @return string */
- static function normalize($path) {
- // Backslash to slash convert
- if (strtoupper(substr(PHP_OS, 0, 3)) == "WIN") {
- $path = preg_replace('/([^\\\])\\\+([^\\\])/s', "$1/$2", $path);
- if (substr($path, -1) == "\\") $path = substr($path, 0, -1);
- if (substr($path, 0, 1) == "\\") $path = "/" . substr($path, 1);
- }
- $path = preg_replace('/\/+/s', "/", $path);
- $path = "/$path";
- if (substr($path, -1) != "/")
- $path .= "/";
- $expr = '/\/([^\/]{1}|[^\.\/]{2}|[^\/]{3,})\/\.\.\//s';
- while (preg_match($expr, $path))
- $path = preg_replace($expr, "/", $path);
- $path = substr($path, 0, -1);
- $path = substr($path, 1);
- return $path;
- }
- /** Encode URL Path
- * @param string $path
- * @return string */
- static function urlPathEncode($path) {
- $path = self::normalize($path);
- $encoded = "";
- foreach (explode("/", $path) as $dir)
- $encoded .= rawurlencode($dir) . "/";
- $encoded = substr($encoded, 0, -1);
- return $encoded;
- }
- /** Decode URL Path
- * @param string $path
- * @return string */
- static function urlPathDecode($path) {
- $path = self::normalize($path);
- $decoded = "";
- foreach (explode("/", $path) as $dir)
- $decoded .= rawurldecode($dir) . "/";
- $decoded = substr($decoded, 0, -1);
- return $decoded;
- }
- }
- ?>
|