Вход Регистрация
Файл: qa-include/qa-index.php
Строк: 138
<?php

/*
    Question2Answer (c) Gideon Greenspan

    http://www.question2answer.org/

    
    File: qa-include/qa-index.php
    Version: See define()s at top of qa-include/qa-base.php
    Description: The Grand Central of Q2A - most requests come through here


    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU General Public License
    as published by the Free Software Foundation; either version 2
    of the License, or (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    More about this license: http://www.question2answer.org/license.php
*/

//    Try our best to set base path here just in case it wasn't set in index.php (pre version 1.0.1)

    
if (!defined('QA_BASE_DIR'))
        
define('QA_BASE_DIR'dirname(empty($_SERVER['SCRIPT_FILENAME']) ? dirname(__FILE__) : $_SERVER['SCRIPT_FILENAME']).'/');


//    If this is an special non-page request, branch off here

    
if (@$_POST['qa']=='ajax')
        require 
'qa-ajax.php';

    elseif (@
$_GET['qa']=='image')
        require 
'qa-image.php';

    elseif (@
$_GET['qa']=='blob')
        require 
'qa-blob.php';

    else {
        
    
//    Otherwise, load the Q2A base file which sets up a bunch of crucial stuff
        
        
require 'qa-base.php';
        
    
    
//    Determine the request and root of the installation, and the requested start position used by many pages
        
        
function qa_index_set_request()
        {
            if (
qa_to_override(__FUNCTION__)) { $args=func_get_args(); return qa_call_override(__FUNCTION__$args); }
        
            
$relativedepth=0;
            
            if (isset(
$_GET['qa-rewrite'])) { // URLs rewritten by .htaccess
                
$urlformat=QA_URL_FORMAT_NEAT;
                
$requestparts=explode('/'qa_gpc_to_string($_GET['qa-rewrite']));
                unset(
$_GET['qa-rewrite']);
                
$relativedepth=count($requestparts);
                
                
// Workaround for fact that Apache unescapes characters while rewriting, based on assumption that $_GET['qa-rewrite'] has
                // right path depth, which is true do long as there are only escaped characters in the last part of the path
                
if (!empty($_SERVER['REQUEST_URI'])) {
                    
$origpath=$_SERVER['REQUEST_URI'];
                    
$_GET=array();
                    
                    
$questionpos=strpos($origpath'?');
                    if (
is_numeric($questionpos)) {
                        
$params=explode('&'substr($origpath$questionpos+1));
                        
                        foreach (
$params as $param)
                            if (
preg_match('/^([^=]*)(=(.*))?$/'$param$matches))
                                
$_GET[urldecode($matches[1])]=qa_string_to_gpc(urldecode(@$matches[3]));
        
                        
$origpath=substr($origpath0$questionpos);
                    }
                    
                    
$requestparts=array_slice(explode('/'urldecode($origpath)), -count($requestparts));
                }
                
            } elseif (isset(
$_GET['qa'])) {
                if (
strpos($_GET['qa'], '/')===false) {
                    
$urlformat=( (empty($_SERVER['REQUEST_URI'])) || (strpos($_SERVER['REQUEST_URI'], '/index.php')!==false) )
                        ? 
QA_URL_FORMAT_SAFEST QA_URL_FORMAT_PARAMS;
                    
$requestparts=array(qa_gpc_to_string($_GET['qa']));
                    
                    for (
$part=1$part<10$part++)
                        if (isset(
$_GET['qa_'.$part])) {
                            
$requestparts[]=qa_gpc_to_string($_GET['qa_'.$part]);
                            unset(
$_GET['qa_'.$part]);
                        }
                
                } else {
                    
$urlformat=QA_URL_FORMAT_PARAM;
                    
$requestparts=explode('/'qa_gpc_to_string($_GET['qa']));
                }
                
                unset(
$_GET['qa']);
            
            } else {
                
$phpselfunescaped=strtr($_SERVER['PHP_SELF'], '+'' '); // seems necessary, and plus does not work with this scheme
                
$indexpath='/index.php/';
                
$indexpos=strpos($phpselfunescaped$indexpath);
                
                if (
is_numeric($indexpos)) {
                    
$urlformat=QA_URL_FORMAT_INDEX;
                    
$requestparts=explode('/'substr($phpselfunescaped$indexpos+strlen($indexpath)));
                    
$relativedepth=1+count($requestparts);
            
                } else {
                    
$urlformat=null// at home page so can't identify path type
                    
$requestparts=array();
                }
            }
            
            foreach (
$requestparts as $part => $requestpart// remove any blank parts
                
if (!strlen($requestpart))
                    unset(
$requestparts[$part]);
                    
            
reset($requestparts);
            
$key=key($requestparts);
            
            
$replacement=array_search(@$requestparts[$key], qa_get_request_map());
            if (
$replacement!==false)
                
$requestparts[$key]=$replacement;
        
            
qa_set_request(
                
implode('/'$requestparts),
                (
$relativedepth>1) ? str_repeat('../'$relativedepth-1) : './',
                
$urlformat
            
);
        }
    
        
qa_index_set_request();
        
        
    
//    Branch off to appropriate file for further handling
    
        
$requestlower=strtolower(qa_request());
        
        if (
$requestlower=='install')
            require 
QA_INCLUDE_DIR.'qa-install.php';
            
        elseif (
$requestlower==('url/test/'.QA_URL_TEST_STRING))
            require 
QA_INCLUDE_DIR.'qa-url-test.php';
        
        else {
    
        
//    Enable gzip compression for output (needs to come early)
    
            
if (QA_HTML_COMPRESSION// on by default
                
if (substr($requestlower06)!='admin/'// not for admin pages since some of these contain lengthy processes
                    
if (extension_loaded('zlib') && !headers_sent())
                        
ob_start('ob_gzhandler');
                        
            if (
substr($requestlower05)=='feed/')
                require 
QA_INCLUDE_DIR.'qa-feed.php';
            else
                require 
QA_INCLUDE_DIR.'qa-page.php';
        }
    }
    
    
qa_report_process_stage('shutdown');


/*
    Omit PHP closing tag to help avoid accidental output
*/
Онлайн: 1
Реклама