Способы ограничения доступа к директориям проекта
Кто знает библиотеки/функции которые могли бы запретить доступ к определённым директориям сайта?
Предыстория - в проекте есть куча папок бекенда (всё вперемешку с фронтом), в некоторых по понятным причинам юзерам делать нечего. Так вот в каждой из ник создавать файлы .htaccess с правилами - не вариант ибо директорий много, а сеять хаос не хочется (что я понял только сейчас). Сейчас всё работает так - есть код собственной разработки)) который занимается автоматическим созданием файлов .htaccess в нужных директориях, если они отсутствуют. Но беда в том что много copy past'ы которая занимается одним и тем же, только пути разные. Я думаю о не ликвидности текущего решения говорить не приходиться...
Ближе к сути - мне нужно компактное решение в биде библиотеки/функции, которое
примерно по такому синтаксису bouncer_dir("full path to dir1", "full path to dir2", "full path to dir3") будет ограничивать доступ к папкам. Неважно как, пусть создаёт htaccess с одинаковыми правилами, если других вариантов нету.
Если кто знает решение в виде функции, библиотеки или просто может дать совет, то - буду признателен
Ответы (1 шт):
function htAccessWrite( $paths = [] ) {
$result = false;
if ( is_array( $paths ) && count( $paths ) > 0 ) {
foreach( $paths as $path ) {
$path .= ( mb_substr( $path, mb_strlen($path) - 1, 1) != DIRECTORY_SEPARATOR ? DIRECTORY_SEPARATOR : '' );
if ( !is_null($path) && trim($path) != "" && ( realpath( trim($path) ) !== false AND is_dir( realpath( trim($path) ) ) ) && is_writeable( $path ) ) {
//Файл уже существует?
if ( file_exists($path . '.htaccess') ) {
//Открываем его на чтение - смотрим нет ли уже в нем наших инструкций - если нет дописываем - если есть - пропускаем файл
} else {
//Файла не существует - пишем в него наши инструкции доступа
$fp = @fopen('.htaccess', 'w');
if ( $fp ) {
fwrite($fp, ''); //пишем в файл нужные иинструкции
fclose($fp);
}
}
$result = true;
}
}
}
return $result;
}
htAccessWrite(['/var/www/myproject.yii/web/storage/folder1', '/var/www/myproject.yii/web/storage/folder2', '/var/www/myproject.yii/web/storage/folder3']);