За последние 24 часа нас посетили 9840 программистов и 892 робота. Сейчас ищут 178 программистов ...

Доступ к общим файлам в common

Тема в разделе "PHP для профи", создана пользователем Konstant1n, 26 дек 2018.

  1. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    Доступ за пределы рабочей директории __DIR__

    Всем привет!
    Написал сайт на PHP MVC, сделал разделение на backend, common, frontend. Настроил в openserver домены x1.local - директория frontend, admin.x1.local - директория backend. Так вот, как подключить файлы из директории common в frontend и backend?
    namespace'ы не использую.
    Пробовал так: в frontend/web/index.php прописал require __DIR|__.'/../../common/config/config.php - ошибка. В этом случае __DIR__ - это эже текущая директория index.php, т.е. frontend/web.

    Как решить проблему? help me
    В разделе новичком не смогли решить этот вопрос
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Konstant1n Это называется защита. Фича. Запрет на выход с корневой директории. Что бы ты не смог шариться по всем файлам. Можно настроить но не нужно. В предыдущей теме ответил.
    Плюс эта конструкция явно не правильная
     
    Konstant1n нравится это.
  3. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.446
    Симпатии:
    570
    @Konstant1n, я вам на этот вопрос пару дней назад отвечал. Уточняющих вопросов не было. Значит, все понятно.

    В абс. путях лучше не использовать /../ (для этого есть dirname() и т.п.).

    Какая ошибка? См. описание маг. констант в руководстве. __DIR__ содержит каталог тек. исполняемого файла.

    Как выше написали, может быть и запрет на доступ к произвольным каталогам (см. open_basedir), только обычно все же это НЕ «запрет на выход с корневой директории», потому что нормой считается держать внутр. кухню сайта выше корня (многие хостеры сейчас дефолтом поддерживают такую структуру). Ели вам разрешено «подниматься» только на один уровень выше корня, «распараллеливайте» не только служебные каталоги, но и публичные внутри «каталога сайта», например:
    frontend
    frontend_public
    backend
    backend_public
    common
    Или делайте за пределами корня восходящую иерархию:
    frontend_public
    backend_public
    php/frontend
    php/backend
    php/common

    Корни морды и админки в ряде случаев можно совместить, направляя запросы в нужный фронт в зависимости от имени хоста (в наших админках даже есть механизм, когда фронт админки передает управление расположенному в этом же каталоге фронту морды, когда запрос попал в админку «по ошибке»).
    --- Добавлено ---
    Если вы определяете базу во фронте, находящемся в корне, попробуйте так:
    define('INCLUDE_PATH',dirname(__DIR__).'/common/');
    Или для второго показанного мной варианта так:
    define('INCLUDE_PATH',dirname(__DIR__).'/php/common/');
    --- Добавлено ---
    Я давал ссылку на пример использования. Если непонятно:
    require(INCLUDE_PATH.'config/config.php');
     
    Konstant1n нравится это.
  4. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    попробую. дело в том что, через админку я редактирую заметки, загружаю файлы и т.п. Куда лучше сохранить эти файлы, если структура такова
    backend/web/ - для админки
    frontend/web/ - для юзеров ?
     
  5. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    Благодарю Вас, получилось
    PHP:
    1. define('INCLUDE_PATH',dirname(__DIR__,1).'/common');
    2.  
    3. function autoLoad( $className ) {
    4.     $directories = [
    5.         INCLUDE_PATH.'/config/',
    6.         INCLUDE_PATH.'/helpers/',
    7.         INCLUDE_PATH.'/exceptions/',
    8.         __DIR__.'/controllers/',
    9.         __DIR__.'/core/',
    10.         INCLUDE_PATH.'/core/',
    11.         __DIR__.'/models/',
    12.         __DIR__.'/widgets/',
    13.     ];
    14.     foreach ( $directories as $directory ) {
    15.         $file = $directory.$className.'.php';
    16.         if ( file_exists($file) ) {
    17.             require $file;
    18.             return true;
    19.         }
    20.     }
    21.     return false;
    22. }
    23.  
    24. spl_autoload_register('autoLoad' );
    25. date_default_timezone_set(Config::TIME_ZONE);
    --- Добавлено ---
    css и js файлы можно тоже вынести? Я вынес, но с подключением проблемы
    и можно ли из папки common картинки выводить?
     
    #5 Konstant1n, 26 дек 2018
    Последнее редактирование: 26 дек 2018
  6. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Konstant1n Если у тебя нету цели отделить (именно отделить) админку апи и сайт (для последующего размещения на разных серверах) зачем тебе вообще поддомены? Подумай об этом.
     
    Walk и Konstant1n нравится это.
  7. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    значит у меня естьцель отделить админку от сайта
     
  8. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Konstant1n зачем ты тогда создаешь общие файлы и думаешь над их подключением в пределах одного сервера? Где здесь логика? Можно конечно создать общий файл и копировать его при доставке на сервер плюс разные конфиги на прод и дев но это уже совсем другая история
     
    Konstant1n нравится это.
  9. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.446
    Симпатии:
    570
    Надеюсь, вы приняли к сведению мое замечание: на два уровня выше корня на шареде могут и «не пустить».

    Не знаю, как вам, а мне непривычно видеть константу с _PATH на конце имени, значение кот. не имеет трэйлинг слеша.
    --- Добавлено ---
    Естественно, обвес должен находиться в паблик каталоге. Доступ к нему со стороны браузера осуществляется по адресам, а не по путям лок. ФС ;)
    --- Добавлено ---
    У нас, например, ресурсы для админки часто подтягиваются из «третьего» источника, которым пользуется много экземпляров админок.
     
    Konstant1n нравится это.
  10. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    что это такое?
    --- Добавлено ---
    чтобы не плодить файлы с одинаковым содержимым.
    в common у меня:
    config/config.php
    core/model.php
    core/view.php
    core/route.php
    helpers/hml.php
    ...
    надо сделать изменения, меняю только здесь и все
     
    #10 Konstant1n, 27 дек 2018
    Последнее редактирование: 27 дек 2018
  11. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.446
    Симпатии:
    570
    shared hosting, услуга вирт. хостинга по-нашему.
    --- Добавлено ---
    ...в каталог др. «сайта» тоже могут «не пустить», поэтому я показал вариант с разными корнями, но общим для корней надкаталогом.
     
    Konstant1n нравится это.
  12. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @Konstant1n Еще раз повторю. Определись с целю. Если тебе нужно отделить фронт от бека это одно. Тут не может быть никаких общих файлов. Если тебе просто хочется иметь admin.site.com просто потому что хочется тебе не обязательно создавать два отдельных сайта создай один. Укажи admin.site.com как алиас к site.com и в роуте (в единой точке входа) уже определяй куда идет запрос в зависимости от домена
     
    Walk и Konstant1n нравится это.
  13. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.446
    Симпатии:
    570
    Ну возможность-то может быть. Есть и морда, и админка, часть файлов используется совместно. А если есть только что-то одно, то эти файлы, естественно, используются только тем, что есть.
    --- Добавлено ---
    Я об этом писал выше. Только нужно предусмотреть возможность «выплевывания» из админки запроса, предназначенного не ей.
     
    Konstant1n нравится это.
  14. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    Вообще эта идея пришла с yii2.0 advanced. Разделяю, с соображения безопасности: в frontend/web только для отображения данных, а в backend/web добавлю авторизацию для админа + папку закрою паролем (это может быть и лишним), и тут вьюшки будут уже с формами для редактирвоания, а для юзеров вьюшки без форм редактирования - просто текст.

    Раньше у меня все было в одной папке x1.local, админка в x1.lcal/admin - сказали так опасно, что по хорошему надо спрятать админку и форму авторизации, потом посмотрел yii2.0.... сейчас вот разбираюсь как же лучше, оптимальнее, безопаснее
     
  15. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.446
    Симпатии:
    570
    @Konstant1n, вьюшки и т.п. должны быть закрыты ото всех от прямого доступа.
    --- Добавлено ---
    ...В паблик каталогах вы оставляете максимум фронт морды/админки и, естественно, статик обвес.
     
    Konstant1n нравится это.
  16. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @miketomlin мне кажется он просто хочет дать доступ по фтп что бы на прямую редактировали)
     
  17. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    нет. для этого же админка есть - backend. форма авторизации есть
    --- Добавлено ---
    да, они все закрыты - вне папки web, т.е. в frontend/views
    --- Добавлено ---
    Код (Text):
    1. такова структура:
    2. backend
    3. common
    4. frontend
    5.    core
    6.    models
    7.    controllers
    8.    views
    9.    web
    10.        css
    11.        js
    12.        img
    13.        index.php
    14.        .htaccess
    15.    load.php
     
  18. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.446
    Симпатии:
    570
    @nospiou, не, он хочет вынести админку на др. хост, насколько я понимаю. Это я ему подсказал в др. теме. Ну или в йи подсмотрел, как написал.
     
  19. Konstant1n

    Konstant1n Активный пользователь

    С нами с:
    14 авг 2017
    Сообщения:
    273
    Симпатии:
    1
    Адрес:
    Волгоград
    не, админка остается на том же хосте. может неправильно написал вопрос
    админка и сайт в одном хосте, но в разных папках - backend и frontend, их общая часть в common
     
  20. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    backend это php frontend это html js админка это админка все изменения делаются через гит проще всего создать ярлык. У тебя концепция не правильная потому и сложно обьяснить.
     
  21. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.446
    Симпатии:
    570
    @nospiou, не только. Морду сайта в целом тоже называют фронтэндом, а админку – бэкэндом.
    --- Добавлено ---
    Конечно из контекста должно быть понятно, о чем речь.
     
  22. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Не слышал. Получается html код админки это фронт бека?:)
     
  23. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.446
    Симпатии:
    570
    А что тогда означает
    backend/web/ - для админки
    frontend/web/ - для юзеров ? Я думал, это разные корни.
    --- Добавлено ---
    Естественно, совмещать это в одном контексте – идиотизм :) Хотя ты вот написал, и в принципе вполне понятно, о чем речь. Без шуток.
    --- Добавлено ---
    фронт фронта
    бэк фронта
    фронт бэка
    бэк бэка
    Все понятно. Никакой неоднозначности :D
    --- Добавлено ---
    Mля, фронт бэка фронта – это фронт-контроллер морды что ли получается :confused:
     
  24. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    @miketomlin Ну как минимум звучит интересно. Но что пытается сделать тс я так и не понял. Дать доступ к php коду пользовательской части и скрыть php код админки? А какой в этом смысл? Там что то секретное? drop table я везде могу написать. А ключи с разным доступом и так выносятся в конфиг.
     
  25. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.446
    Симпатии:
    570
    @nospiou, с учетом его последнего уточнения мне, видимо, просто разделить в основном бэк фронта и бэк бэка, а также вынести в бэкэнде (php) общие либы в отдельный каталог, хотя последнее, возможно, касается и фронтэнда (js и проч. обвес, например шрифты или картинки).
    --- Добавлено ---
    ...и как к этим общим элементам обращаться.