Ищете простую в обслуживании и безопасную структуру каталогов для составного сайта
Недавно я унаследовал более старый пользовательский веб-сайт PHP, который состоит из трех частей: общедоступный раздел для всеобщего просмотра, раздел участников и раздел администратора. Раздел каталога выглядит следующим образом:
->css
->doc
->inc
->js
->member
->css
->doc
->inc
->js
->admin
->css
->doc
->inc
->js
Похоже, что сайт изначально был создан путем трехкратного копирования каталога. Техническое обслуживание оказывается болезненным, потому что существует три копии большинства функций. Например, если я хочу изменить загрузчика, я должен не забудьте изменить его три раза. Однако в настоящее время эти три раздела сильно отличаются друг от друга и имеют совершенно разное назначение, поэтому со временем многие функции эволюционировали друг от друга. Это означает, что я должен различать, прежде чем копировать, на всякий случай.
Запланирован большой капитальный ремонт интерфейса, и мы также обновляем безопасность и переходим с mysql_query на PDO. Похоже, сейчас тоже самое подходящее время для капитального ремонта структуры.
Итак, мой первый вопрос: каков хороший способ сохранить трехсторонняя структура для пользователей, но упрощающая? Есть ли недостаток в создании единого каталога inc или lib на верхнем уровне и размещении там всех общих файлов?
Для дополнительного усложнения мы хотели бы модернизировать логин, поэтому я изучаю Огромный пакет php-входа panique. Он будет использоваться для входа в систему участников и администраторов. Этот пакет имеет структуру MVC и выглядит так, как будто он предназначен для того, чтобы служить основой для всего сайта. Но я не уверен, как я следует включить его в наш уже существующий сайт... Я не хочу копировать его дважды, для разделов администратора и участников. Мне интересно, следует ли мне разместить каталоги участников и администраторов в каталоге php-login или разместить php-login в общем каталоге lib, который я рассматриваю...
1 answers
Что касается структуры объекта, я бы исходил из этого:
->css
->doc
->inc
->js
->member
->css
->doc
->inc
->js
->admin
->css
->doc
->inc
->js
К этому:
->guest
->loginpage.php
->guest_only_item_1.php
->guest_only_item_2.php
...
->guest_only_item_n.php
->common
->shared_php_file_1.php
->shared_php_file_2.php
...
->shared_php_file_n.php
->somestylesheet.css
->somejavascript.js
->someimage.jpg
->someniceimage.png
->member
->member_only_item_1.php
->member_only_item_2.php
...
->member_only_item_n.php
->admin
->admin_only_item_1.php
->admin_only_item_2.php
...
->admin_only_item_n.php
Я не уверен, сколько элементов вы планируете иметь для каждого типа пользователей, поэтому я предположил, что по крайней мере три, поэтому я перечислил строки элементов три раза в каждом разделе. Общий раздел предназначен для файлов, которыми пользуются все.
Затем в PHP, когда вы загружаете специальную страницу, вы можете использовать следующий PHP-код в начале, чтобы добавить общие php-файлы (если применимо) независимо от раздел, в котором вы находитесь:
include "../common/shared_php_file_1.php";
include "../common/shared_php_file_2.php";
И в части HTML вы можете использовать следующие фрагменты кода в своем коде для добавления общих файлов:
<link rel="stylesheet" href="../common/somestylesheet.css">
<script type="text/javascript" src="../common/somejavascript.js"></script>
<img src="../common/someimage.jpg" width=1 height=1>
<img src="../common/someniceimage.png" width=1 height=1>
Если вы используете тег изображения, убедитесь, что вы установили значения ширины и высоты в соответствии с фактическими размерами изображения, а не 1.
Кроме того, в вашей настройке вы захотите, чтобы сценарий входа в систему создавал какой-либо файл cookie, в котором хранится специальный хэш, представляющий, что пользователь вошел в систему, а затем, когда пользователь попытается получить доступ к сайту, используйте свой скрипт прочитайте его и сопоставьте с базой данных пользователей, и если пользователь не находится в нужном разделе сайта, его/ее следует перенаправить туда. Если пользователь не вошел в систему, его следует перенаправить в гостевой раздел.
Просто убедитесь, что в базе данных есть как минимум три поля. Один для имени пользователя, один для пароля и один для типа пользователя.