Перейти к содержимому

Где хранить index php файл

  • автор:

Чтение и вывод файлов вне директории сервера

Доброго времени суток. Мне необходимо выводить различные файлы, а именно css, js, xml, png, jpg и все другие, которые могут располагаться и использоваться на сервере. Файлы могут находиться в папке на уровень ниже директории сервера, основная папка проекта это public , веб сервер настроен на чтение index.php именно из этой папки. Файлы контента при этом расположены в папке Content , а именно Content\Theme\Default , либо же и вовсе в другой папке, которая находиться на уровень ниже папки public . Структура проекта приблизительно следующая:

web/ . public . . index.php . Content . . Theme . . . Default . . . . image.png . . . . styles.css . . . . main.js 

Какие есть варианты «прочитать» и «скормить» браузеру файлы, которые лежат вне папки public ? В голову приходит лишь заставить PHP читать и запоминать файлы, после генерировать роутер с путем и названием файла, а после этого кэшированный файл отдавать по нужному роутеру с соответствующими значениями header() , собственно так и работает. Но возникают другие проблемы, к примеру проблемы с памятью PHP, ведь ему придется постоянно читать, запоминать и отдавать множество данных файла. Пара мегабайт памяти будет испорчена, ко всему этому время ответа от сервера значительно увеличивается — от пары картинок переданных с помощью readfile($png) ответ сервера увеличился с 50mc до 2сек. Возможно существуют различные библиотеки для PHP, которые подойдут для моих целей, либо же есть куда более простые способы подготовки файлов для браузера вне папки public ? P.S: Заранее благодарю ответы и любые советы.

Где хранить конфигурацию php приложения?

Самый оптимальный вариант хранения настроек php приложения. В примерах для начинающих разработчиков, конфигурация приложения задаётся в начале исполняемого файла. Но для серьёзного Web приложения с множеством настроек такой вид конфигурации не удобен.

Рассмотрим на простом примере как оптимизировать хранение настроек приложения.

Создадим файл index.php со следующим содержимым:

 // Настройки для подключения к базе данных $dbHost = 'localhost'; $dbUser = 'tester'; $dbPassword = 'fB8vh83gHj4'; $dbDatabase = 'my_base'; // Настройки для отправки почты через SMTP $mailerHost = 'smtp.yandex.ru'; $mailerUsername = 'sender@test.ru'; $mailerPassword = 'fdDj3gf4Hbh'; $mailerPort = '465'; $mailerEncryption = 'SSL'; 

Мы видим 2 группы переменных: первая для подключения к базе данных, а вторая для отправки письма по smtp протоколу. Избавимся от многочисленных переменных, объединив все значения в один многомерный ассоциативный массив.

 $config = [ 'db' => [ 'host' => 'localhost', 'user' => 'tester', 'password' => 'fB8vh83gHj4', 'database' => 'my_base' ], 'mailer' => [ 'host' => 'smtp.yandex.ru', 'username' => 'sender@test.ru', 'password' => 'Vbs3Hts42sdh', 'port' => '465', 'encryption' => 'SSL' ] ]; 

Уже лучше. В современных Web приложениях конфигурацию принято хранить в отдельном файле / файлах. Давайте создадим файл config.php, перенесём туда наш массив и подгрузим его в index.php

Подключать будем с помощью конструкциии require, использовав её полезную особенность — возможно выполнить выражение return внутри включаемого файла. Делать это нужно следующим образом:

 // Код файла config.php return [ 'db' => [ 'host' => 'localhost', 'user' => 'tester', 'password' => 'fB8vh83gHj4', 'database' => 'my_base' ], 'mailer' => [ 'host' => 'smtp.yandex.ru', 'username' => 'sender@test.ru', 'password' => 'Vbs3Hts42sdh', 'port' => '465', 'encryption' => 'SSL' ] ]; 

В файле конфигурации мы сделали return нашего массива. А в index.php присвоим этот массив переменной $config, используя выражение require.

 // Код файла index.php $config = require 'config.php'; print_r($config); 

С помощью print_r выведем результат. Вот что у нас получилось:

Конфигурация php приложения

Если конфиг слишком большой, разбивать его на несколько файлов и собирайте с помощью require.

Хранение файла конфигурации в репозитории

При работе с git или mercurial репозиторием нужно придерживаться следующему правилу — не хранить реальные настройки приложения в репозитории. Добавлять в репозиторий только структуру файла конфигурации, так называемый скелет.

Это нужно сделать по следующим причинам:

  • При хранении боевых настроек в репозитории они могут попасть не в те руки.
  • Если вы работаете в команде, у каждого её члена должны быть свои индивидуальный настройки (например конфиг для подключения к базе данных на локальном компьютере).

Перейдём к практике. Создайте файл «config.sample.php». Скопируйте туда созержимое вашего файла конфигурации и удалите как минимум значения важных (в нашем случае — паролей).

 // Код файла config.sample.php return [ 'db' => [ 'host' => 'localhost', 'user' => '', 'password' => '', 'database' => '' ], 'mailer' => [ 'host' => '', 'username' => '', 'password' => '', 'port' => '465', 'encryption' => 'SSL' ] ]; 

Добавьте файл config.sample.php в репозиторий. А боевой файл конфигурации config.php не должен туда попадать, поэтому исключите его из индексации, добавив строчку в файл «.gitignore«:

 config.php 

Хранение классов в отдельных файлах в PHP

До этого урока мы писали наши классы в том же файле, где и вызывали их. В реальной жизни классы обычно хранятся в отдельных файлах, причем каждый класс в своем отдельном файле. При этом существует соглашение о том, что файл с классом следует называть так же, как и сам класс. Давайте посмотрим на практике. Сделаем файл User.php с классом User :

Пусть теперь у нас есть файл index.php , в котором мы хотим воспользоваться нашим классом User . Мы не можем в этом файле просто взять и создать объект класса User — это вызовет ошибку, так как PHP не сможет найди код этого класса:

Для того, чтобы класс User был доступен в файле index.php , нужно подключить этому нему файл с нашим классом. Сделаем это с помощью команды require_once :

Сделайте несколько классов в разных файлах. Подключите ваши классы к файлу index.php .

Вопрос / ответ

Панель управления хостингом

E-Mail

  • Управление E-mail аккаунтами
  • MX-записи
  • Почтовый веб-клиент: Roundcube
  • Перенаправления
  • Автоответчики
  • Списки рассылок
  • Черный список E-Mail
  • Сообщения об отсутствии
  • Универсальный почтовый адрес

Базы данных MySQL

  • phpMyAdmin
  • Создание базы данных
  • Удаление базы данных
  • Добавление пользователей
  • Изменение пароля базы данных

SSL защита сайта

  • Установка сертификата Let’s Encrypt
  • Установка купленного сертификата
  • Использование сертификатов сервера
  • Создание самоподписанного сертификата
  • Загрузка файлов на защищенный сайт

Управление DNS

  • DNS записи
  • Изменение параметров DNS
  • Информация для новичков

FTP аккаунты

  • Создание FTP аккаунта
  • Изменение и удаление FTP аккаунтов
  • Создание FTP аккаунта с доступом к конкретному поддомену

Поддомены

  • Создание поддоменов
  • Удаление поддоменов
  • Статистика поддоменов
  • Лог использования и лог ошибок
  • Создание FTP аккаунта с доступом к конкретному поддомену

Резервные копии

  • Создание резервной копии
  • Хранение резервных копий
  • Выбор того, что необходимо сохранить в резервной копии
  • Восстановление из резервной копии

Менеджер файлов

  • Навигация
  • Загрузка файлов
  • Создание новых папок и файлов
  • Копирование и перемещение файлов
  • Редактирование файлов
  • Переименование файлов
  • Изменение прав доступа к файлам
  • Удаление файлов и папок

Загрузка файлов сайта на сервер

  • Структура директорий
  • Загрузка через FTP
  • Загрузка с помощью файлового менеджера
  • Основной файл сайта (index)

Статистика сайта

  • Дисковое пространство
  • Системные логи
  • Статистика Webalizer
  • Информация об аккаунте

Выполнение скриптов

  • Программные пути
  • PHP скрипты
  • CGI скрипты
  • Установленные модули Perl
  • Общие сведения о правах доступа

С чего начать

  • Вход в панель управления
  • Выход из панели управления

Разное

  • Дополнительные домены
  • Перенаправление сайта
  • Доменные указатели
  • Cron задачи
  • Страницы ошибок
  • Запароленные папки
  • Mime-типы
  • Обработчики Apache
  • Ключи входа

Технические вопросы

SSH, FTP, SFTP

  • Подключение по SSH
  • Подключение по FTP
  • Подключение по SFTP
  • Установка composer

Базы данных MySQL

  • Хост для подключения к MySQL
  • Подключение к MySQL извне
  • Подключение на внешний сервер Mysql
  • Логин/пароль для входа в PhpMyAdmin

Почта

  • Настройка отправки писем с сайта
  • Пересылка почты
  • Адрес авторизации в почте
  • Сайт рассылает спам
  • Лимит на отправку писем
  • Статистика отправки писем
  • Настройка почтового клиента
  • Настройка заголовка From

Memcached

  • Как заказать Memcached сервер
  • Использование Memcached
  • Memcached и WordPress
  • Memcached и Joomla
  • Memcached и Bitrix

Почтовый хостинг

SSL-сертификаты

  • Подтверждение сертификата

Домены

  • NS сервера

Оплата услуг, тарифы

  • Изменение тарифного плана

CMS хостинг

  • WordPress хостинг
  • 1С хостинг

Партнерская программа

Бухгалтерия, документы

  • Заключение бумажного договора
  • Акты выполненных работ
  • Отказ от услуг

БелГИЭ

  • Регистрация сайта в БелГИЭ
  • Изменение данных о сайте
  • Удаление сайта из БелГИЭ
  • Регистрация субдоменов

Другие вопросы

  • Чем открыть файл PDF

Основной файл сайта (index)

index.html — файл по умолчанию для любой веб-папки. Это означает, что когда посетитель переходит по адресу http://site.by, в действительности сервер открывает файл http://site.by/index.html. Это актуально для любой общедоступной папки, включая поддомены.

При загрузке основного файла веб-сайта, не забудьте назвать его index.html. Могут использоваться и другие расширения для главного файла index (index.php, index.shtml и др.), в зависимости от того какой язык используется.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *