Способы ограничения доступа к директориям проекта

Кто знает библиотеки/функции которые могли бы запретить доступ к определённым директориям сайта?

Предыстория - в проекте есть куча папок бекенда (всё вперемешку с фронтом), в некоторых по понятным причинам юзерам делать нечего. Так вот в каждой из ник создавать файлы .htaccess с правилами - не вариант ибо директорий много, а сеять хаос не хочется (что я понял только сейчас). Сейчас всё работает так - есть код собственной разработки)) который занимается автоматическим созданием файлов .htaccess в нужных директориях, если они отсутствуют. Но беда в том что много copy past'ы которая занимается одним и тем же, только пути разные. Я думаю о не ликвидности текущего решения говорить не приходиться...

Ближе к сути - мне нужно компактное решение в биде библиотеки/функции, которое примерно по такому синтаксису bouncer_dir("full path to dir1", "full path to dir2", "full path to dir3") будет ограничивать доступ к папкам. Неважно как, пусть создаёт htaccess с одинаковыми правилами, если других вариантов нету.

Если кто знает решение в виде функции, библиотеки или просто может дать совет, то - буду признателен


Ответы (1 шт):

Автор решения: phpBear
    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']);
→ Ссылка