Nginx: Как запретить прямое обращение к файлам

Для одной задумки потребовалось запретить прямое обращение к файлам, при этом, чтобы сценарий движка, мог иметь полный доступ, к файлам. Сделать это надо было на Nginx. Мне помогли с этим и сейчас расскажу, что необходимо сделать, чтобы запретить.

Папка для запрета: /app/XX/data/. Вместо XX идентификатор приложения, то есть цифры, которые постоянно меняются.

Код для конфига Nginx:
	location ~* /app/\d+/data/ {
		valid_referers server_names;
		if ($invalid_referer) {
			return 404;
		}
	}

Многие пишут return 403 (Запрещено), я решил, что будет лучше отправлять на 404 ошибку, нежели прямо давать понять, что сюда нельзя.

После добавления строк выше, необходимо перечитать конфигурацию. Для этого я использую команду:
nginx -s reload

Готово. Теперь папка data скрыта от прямого обращения.

Возможно, пригодится: Тема: Команды для настройки сервера....

jQuery: Как заменить класс у элемента

Для замены класса будем использовать две функции:
  • removeClass: Удаляет класс или классы, что были указанны.
  • addClass: Добавляет указанный класс элементу.

Допустим элемент div#taskInfo имеет класс displayNone, который нам необходимо заменить на displayInlineBlock:
<div id="taskInfo" class="displayNone"></div>

Делаем так:
$('#taskInfo').removeClass('displayNone').addClass('displayInlineBlock');

Предварительно стоит проверить наличие класса, что необходимо заменить:
if ($('#taskInfo').hasClass('displayNone')) {
	$('#taskInfo').removeClass('displayNone').addClass('displayInlineBlock');
};
...

Как записать массив в файл на PHP

PHP
Для записи в файл, можно использовать функцию file_put_contents, которая и была создана для записи в файл. Пример:
// $file: Путь и имя файла, в который будет осуществляться запись
// $content: Текст / Код, который необходимо записать
file_put_contents($file, $content);

Если указанного файла не существует, функция file_put_contents его создаст. И если файл создан, функция его перезапишет.

Функция отлично пишет строки, но вот писать массивы не умеет. Чтобы записать массив в файл, при помощи file_put_contents, необходимо предварительно перевести "структуру" массива в строку. Сделать это можно функцией var_export, добавив второй необязательный параметр: true (true - возвращает представление переменной вместо его вывода):
// $file: Путь и имя файла, в который будет осуществляться запись
// $content: Массив, который необходимо записать в файл
$content = var_export($content, true);
file_put_contents($file, $content);

Теперь массив будет записан в файл, сохранив свою структуру....

Вложенная буферизация ob_start()

PHP
Мой движок использует буферизацию. При написании одного модуля (Блог: Обработать файл перед его получением на PHP) мне потребовалось добавить в уже существующею буферизацию, ещё одну. В интернете искал, как правильно сделать вложенную буферизацию и решение было найдено. Моя буферизация в буферизации выглядит так:
		// Получение шаблона приложения
		ob_start();
		include (phpfox::getParam('core.dir_app') . $id . PHPFOX_DS . 'page' . PHPFOX_DS . $page . '.php');
		$html = ob_get_clean();
		// End: Получение шаблона приложения
...

Обработать файл перед его получением на PHP

PHP
При написании одного модуля для движка, потребовалось получать шаблоны для вставки кода в уже загруженную страницу. Делал это так:
		// Получение шаблона приложения
		$html = file_get_contents(phpfox::getParam('core.dir_app') . $id . PHPFOX_DS . 'page' . PHPFOX_DS . $page . '.php', true);

По ходу развития модуля, пришлось добавлять PHP код, он должен был выполняться перед получением самого шаблона. Но он не обрабатывался функцией file_get_contents. Код проходил, либо как текст, либо, как закомментированный код...

Чтобы PHP код выполнялся перед вставкой шаблона в страницу, было принято решение заменить file_get_contents, на:
		// Получение шаблона приложения
		ob_start();
		include (phpfox::getParam('core.dir_app') . $id . PHPFOX_DS . 'page' . PHPFOX_DS . $page . '.php');
		$html = ob_get_contents();
		ob_end_clean();
		// End: Получение шаблона приложения

Так работает, как хотелось. Код выполняется перед вставкой в страницу.

Так как мой движок изначально использует буферизацию,...