www.gusucode.com > Oxwall 社交网站源码 1.8.0程序asp代码 > ow_utilities/url.php
<?php /** * EXHIBIT A. Common Public Attribution License Version 1.0 * The contents of this file are subject to the Common Public Attribution License Version 1.0 (the “License”); * you may not use this file except in compliance with the License. You may obtain a copy of the License at * http://www.oxwall.org/license. The License is based on the Mozilla Public License Version 1.1 * but Sections 14 and 15 have been added to cover use of software over a computer network and provide for * limited attribution for the Original Developer. In addition, Exhibit A has been modified to be consistent * with Exhibit B. Software distributed under the License is distributed on an “AS IS” basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language * governing rights and limitations under the License. The Original Code is Oxwall software. * The Initial Developer of the Original Code is Oxwall Foundation (http://www.oxwall.org/foundation). * All portions of the code written by Oxwall Foundation are Copyright (c) 2011. All Rights Reserved. * EXHIBIT B. Attribution Information * Attribution Copyright Notice: Copyright 2011 Oxwall Foundation. All rights reserved. * Attribution Phrase (not exceeding 10 words): Powered by Oxwall community software * Attribution URL: http://www.oxwall.org/ * Graphic Image as provided in the Covered Code. * Display of Attribution Information is required in Larger Works which are defined in the CPAL as a work * which combines Covered Code or portions thereof with code not governed by the terms of the CPAL. */ /** * @author Sardar Madumarov <madumarov@gmail.com> * @package ow_utilities * @since 1.0 */ class UTIL_Url { private static $redirectCodes = array( 100 => "HTTP/1.1 100 Continue", 101 => "HTTP/1.1 101 Switching Protocols", 200 => "HTTP/1.1 200 OK", 201 => "HTTP/1.1 201 Created", 202 => "HTTP/1.1 202 Accepted", 203 => "HTTP/1.1 203 Non-Authoritative Information", 204 => "HTTP/1.1 204 No Content", 205 => "HTTP/1.1 205 Reset Content", 206 => "HTTP/1.1 206 Partial Content", 300 => "HTTP/1.1 300 Multiple Choices", 301 => "HTTP/1.1 301 Moved Permanently", 302 => "HTTP/1.1 302 Found", 303 => "HTTP/1.1 303 See Other", 304 => "HTTP/1.1 304 Not Modified", 305 => "HTTP/1.1 305 Use Proxy", 307 => "HTTP/1.1 307 Temporary Redirect", 400 => "HTTP/1.1 400 Bad Request", 401 => "HTTP/1.1 401 Unauthorized", 402 => "HTTP/1.1 402 Payment Required", 403 => "HTTP/1.1 403 Forbidden", 404 => "HTTP/1.1 404 Not Found", 405 => "HTTP/1.1 405 Method Not Allowed", 406 => "HTTP/1.1 406 Not Acceptable", 407 => "HTTP/1.1 407 Proxy Authentication Required", 408 => "HTTP/1.1 408 Request Time-out", 409 => "HTTP/1.1 409 Conflict", 410 => "HTTP/1.1 410 Gone", 411 => "HTTP/1.1 411 Length Required", 412 => "HTTP/1.1 412 Precondition Failed", 413 => "HTTP/1.1 413 Request Entity Too Large", 414 => "HTTP/1.1 414 Request-URI Too Large", 415 => "HTTP/1.1 415 Unsupported Media Type", 416 => "HTTP/1.1 416 Requested range not satisfiable", 417 => "HTTP/1.1 417 Expectation Failed", 500 => "HTTP/1.1 500 Internal Server Error", 501 => "HTTP/1.1 501 Not Implemented", 502 => "HTTP/1.1 502 Bad Gateway", 503 => "HTTP/1.1 503 Service Unavailable", 504 => "HTTP/1.1 504 Gateway Time-out" ); /** * Makes search engines friendly redirect to provided URL. * * @param string $url * @param integer $redirectCode */ public static function redirect( $url, $redirectCode = null ) { $redirectCode = array_key_exists((int) $redirectCode, self::$redirectCodes) ? (int) $redirectCode : 301; header(self::$redirectCodes[$redirectCode]); header("Location: " . $url); exit(); } /** * Removes site installation subfolder from request URI * * @param string $urlHome * @param string $requestUri * @return string */ public static function getRealRequestUri( $urlHome, $requestUri ) { $urlArray = parse_url($urlHome); $originalUri = UTIL_String::removeFirstAndLastSlashes($requestUri); $originalPath = UTIL_String::removeFirstAndLastSlashes($urlArray['path']); if ( $originalPath === '' ) { return $originalUri; } $uri = mb_substr($originalUri, (mb_strpos($originalUri, $originalPath) + mb_strlen($originalPath))); $uri = trim(UTIL_String::removeFirstAndLastSlashes($uri)); return $uri ? self::secureUri($uri) : ''; } /** * Secure uri * * @param string $uri * @return string */ public static function secureUri( $uri ) { // remove posible native uri encoding $uriInfo = parse_url(urldecode($uri)); if ( $uriInfo ) { $processedUri = ''; // process uri path if ( !empty($uriInfo['path']) ) { $processedUri = implode('/', array_map('urlencode', explode('/', $uriInfo['path']))); } // process uri params if ( !empty($uriInfo['query']) ) { // parse uri params $uriParams = array(); parse_str($uriInfo['query'], $uriParams); $processedUri .= '?' . http_build_query($uriParams); } if ( !empty($uriInfo['fragment']) ) { $processedUri .= '#' . urlencode($uriInfo['fragment']); } return $processedUri; } } public static function selfUrl() { $s = (!empty($_SERVER["HTTPS"]) && ($_SERVER["HTTPS"] == "on") ) ? 's' : ''; $serverProtocol = strtolower($_SERVER["SERVER_PROTOCOL"]); $protocol = substr($serverProtocol, 0, strpos($serverProtocol, '/')) . $s; $port = ($_SERVER["SERVER_PORT"] == "80") ? "" : (":" . $_SERVER["SERVER_PORT"]); return $protocol . "://" . $_SERVER['SERVER_NAME'] . $port . self::secureUri($_SERVER['REQUEST_URI']); } public static function getLocalPath( $uri ) { $userFilesUrl = OW::getStorage()->getFileUrl(OW_DIR_USERFILES); $path = null; if ( stripos($uri, OW_URL_HOME) !== false ) { $path = str_replace(OW_URL_HOME, OW_DIR_ROOT, $uri); $path = str_replace('/', DS, $path); } else if ( stripos($uri, $userFilesUrl) !== false ) { $path = str_replace($userFilesUrl, OW_DIR_USERFILES, $uri); $path = str_replace('/', DS, $path); } return $path; } }