Как получить доступ к моим верхним корневым папкам из public_html в моем приложении MVC PHP

у меня было веб-приложение, в котором все мои папки находились под public_html, например:

public_html
  -pages
  -templates
  -includes
  -styles
  -scripts
  -images
   index.php

так что мой веб-сайт работал отлично и на живом сервере (с версией php 5.2.17). но я хотел переключиться на объектно-ориентированный подход и изменил все, и пытался учиться и вдохновляться моделью структуры фреймворка Zend, поэтому я изменил структуру папок и он отлично работал локально в appache, новая структура такова:

application
  -models
  -controllers
  -views
  -config
  -layouts
    -templates
библиотека
  -functions
public_html
  -styles
  -scripts
  -images
   index.php

Итак, я переношу его на рабочий сервер, и теперь мое основное приложение находится вне корня (public_html), и, конечно же, я не могу получить доступ к верхним корневым папкам (приложение, библиотека) из public_html и, конечно, index.php с помощью url.
я могу включить их, но мне нужно получить доступ по url в теге привязки, например, в случае доступа мой login.php внутри папки представлений, которая находится внутри папки приложения. также необходимо получить доступ к папке контроллера из моей папки сценариев через URL-адрес (для вызовов ajax и т. д.).
я читал, что мне нужно использовать файл .htaccess, но я не знаю, какое правило я должен использовать, где Должен ли я вставить его и как. Пожалуйста, помогите мне, так как мне это нужно срочно. подскажите пожалуйста что мне делать?
с уважением


person azad6026    schedule 16.12.2012    source источник
comment
В модели MVC вы обычно не пытаетесь получить доступ к файлу в вашей папке views напрямую с помощью URL-адреса.   -  person Aditya M P    schedule 16.12.2012


Ответы (2)


Вы ошибаетесь. Присмотритесь к любому фреймворку MVC (например, упомянутому Zend). Все проходит через index.php внутри общей папки. Вам не нужно получать доступ к чему-либо ниже общей папки через URL-адрес (на самом деле это должно быть запрещено по соображениям безопасности). Вы получаете доступ к действиям контроллеров через внутреннюю структуру программы и через правила перезаписи. Обычно каждый запрос принудительно перенаправляется на index.php и дальше ваше приложение решает, куда ему идти дальше.

person ualinker    schedule 16.12.2012
comment
спасибо за быстрый ответ. но я разделил свои индексные части как navbar.php footer.php и так далее, и в моей навигационной панели, так как мое меню есть, мне нужно сослаться на мою индексную страницу, которая находится index_view.php внутри папки представлений, и это дало его контроллер внутри него также включает. Не могли бы вы рассказать мне больше, потому что я не совсем понял, что вы имели в виду. Я очень новичок в mvc. Спасибо - person azad6026; 16.12.2012
comment
Вы можете включить свои файлы в PHP-скрипт, независимо от того, где в файловой системе они фактически расположены. Почему бы просто не включить ваши navbar.php и footer.php в скрипт? Вам не нужен URL-доступ к ним. - person ualinker; 16.12.2012

Посмотрите, как CodeIgniter, платформа MVC, обрабатывает маршрутизацию файлов в своем собственном index.php файле< /а>:

$system_path = 'system';
$application_folder = 'application';
$view_folder = '';

/*
 * ---------------------------------------------------------------
 *  Resolve the system path for increased reliability
 * ---------------------------------------------------------------
 */

    // Set the current directory correctly for CLI requests
    if (defined('STDIN'))
    {
        chdir(dirname(__FILE__));
    }

    if (($_temp = realpath($system_path)) !== FALSE)
    {
        $system_path = $_temp.'/';
    }
    else
    {
        // Ensure there's a trailing slash
        $system_path = rtrim($system_path, '/').'/';
    }

    // Is the system path correct?
    if ( ! is_dir($system_path))
    {
        header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
        exit('Your system folder path does not appear to be set correctly. Please open the following file and correct this: '.pathinfo(__FILE__, PATHINFO_BASENAME));
    }

/*
 * -------------------------------------------------------------------
 *  Now that we know the path, set the main path constants
 * -------------------------------------------------------------------
 */
    // The name of THIS file
    define('SELF', pathinfo(__FILE__, PATHINFO_BASENAME));

    // Path to the system folder
    define('BASEPATH', str_replace('\\', '/', $system_path));

    // Path to the front controller (this file)
    define('FCPATH', str_replace(SELF, '', __FILE__));

    // Name of the "system folder"
    define('SYSDIR', trim(strrchr(trim(BASEPATH, '/'), '/'), '/'));

    // The path to the "application" folder
    if (is_dir($application_folder))
    {
        if (($_temp = realpath($application_folder)) !== FALSE)
        {
            $application_folder = $_temp;
        }

        define('APPPATH', $application_folder.'/');
    }
    else
    {
        if ( ! is_dir(BASEPATH.$application_folder.'/'))
        {
            header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
            exit('Your application folder path does not appear to be set correctly. Please open the following file and correct this: '.SELF);
        }

        define('APPPATH', BASEPATH.$application_folder.'/');
    }

    // The path to the "views" folder
    if ( ! is_dir($view_folder))
    {
        if ( ! empty($view_folder) && is_dir(APPPATH.$view_folder.'/'))
        {
            $view_folder = APPPATH.$view_folder;
        }
        elseif ( ! is_dir(APPPATH.'views/'))
        {
            header('HTTP/1.1 503 Service Unavailable.', TRUE, 503);
            exit('Your view folder path does not appear to be set correctly. Please open the following file and correct this: '.SELF);
        }
        else
        {
            $view_folder = APPPATH.'views';
        }
    }

    if (($_temp = realpath($view_folder)) !== FALSE)
    {
        $view_folder = realpath($view_folder).'/';
    }
    else
    {
        $view_folder = rtrim($view_folder, '/').'/';
    }

    define('VIEWPATH', $view_folder);

Вы не должны зависеть от .htaccess, вы можете столкнуться с проблемами в средах, где mod_rewrite недоступен.

Кроме того, не загружайте файлы в каталог views/ по гиперссылке. Направьте все эти запросы страниц из index.php в ваш controllers/ и затем используйте эти классы для загрузки файлов. Еще раз внимательно посмотрите на источник CodeIgniter, чтобы найти идеи.

person Aditya M P    schedule 16.12.2012