Arhn - архитектура программирования

Как условно установить значение php ini в .htaccess или другими способами для конкретных запросов

Я работаю с типичным приложением MVC (как оказалось, ZF 1.x), используя mod_rewrite, где все запросы направляются в один файл index.php в моем каталоге /public.

И администраторы сайта, и обычные пользователи отправляются не иначе. Теперь я застрял, пытаясь увеличить некоторые значения INI, такие как upload_max_filesize и post_max_size (которые можно изменить PHP_INI_PERDIR) только для административных пользователей сайта.

Если не считать изменения способа отправки приложения, может ли кто-нибудь предложить альтернативный метод? Я рассматривал возможность какого-то условного блока в файле .htaccess, возможно... Что-то, где вызывается строка `php_value, говорит, что URI запроса соответствует определенному шаблону. Почти уверен, что это не вариант, но подумал, что спрошу, нашел ли кто-нибудь другие решения.

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


  • Почему бы не увеличить значение для всех и не проверить размер с помощью PHP, а затем позволить коду работать или нет, в зависимости от того, есть ли у пользователя права администратора или нет? 12.12.2013
  • Спасибо за идею. Но главная причина, по которой этого не делают, — возможность злоупотреблений. Если мне нужно дождаться загрузки файла размером 500 МБ, только для того, чтобы отклонить его. Дает отличный вектор для атаки. Вы не хотите, чтобы эти значения были такими большими по умолчанию. 12.12.2013
  • @ficuscr Вы всегда будете ждать полной загрузки файла, независимо от размера файла, отказ PHP угрожать запросу не означает, что Apache не будет ... Подумайте об этом! 12.12.2013
  • @MathieuDumoulin Точка взята. Думаю, это был не лучший пример. Возьмем, к примеру, что-то вроде max_input_vars. Суть того, что я сказал, по-прежнему верна, я думаю. 12.12.2013

Ответы:


1

HTTP сам по себе не известен пользователю, это механизм, управляемый PHP с помощью файлов cookie, поэтому нет, вы ничего не можете с этим поделать, кроме как увеличить значения для всех!

12.12.2013
  • Интересно, не могли бы вы сделать шаг назад и сбалансировать нагрузку ваших административных пользователей на отдельный экземпляр httpd/php, который будет находиться на той же машине и использовать ту же базу данных, но работать с другими настройками? 12.12.2013
  • Это действительно балансировка нагрузки на данный момент? И я думаю, что это немного излишне, вам нужно найти способ идентифицировать своих пользователей с помощью файла cookie или IP-адреса... :) 12.12.2013
  • Поэтому мне интересно, могу ли я с помощью httpd и htaccess создать условный блок, соответствующий URI, подобно тому, как работает блок «Файлы». 12.12.2013
  • Если вы поместите токен в URL-адрес, вы можете использовать условие в mod_rewrite, но я не знаю, можно ли это сделать для .htaccess php_value, я сомневаюсь в этом, у кого-то еще может быть ответ, но, насколько я знаю, это нельзя делать! 12.12.2013
  • Нет, это не настоящая балансировка нагрузки, но я подумал, что это может быть интересным приемом. Некоторые подходы к балансировке нагрузки уже делят нагрузку на пользователя (и сохраняют пользовательский сеанс в целом на одной машине в течение всего времени), поэтому я подумал, что это может не потребовать такого большого форсирования. 12.12.2013
  • @Matt Gibson, я думаю, что подобный обходной путь относится к тому, что я имею в виду под переписыванием вещей, чтобы определенные страницы, которым требуются эти повышенные значения, отправлялись через отдельный каталог. Чтобы лучше объяснить, почему я этого не сделал: на сайте нет раздела администратора как такового, сайт в основном добавляет панель инструментов администратора на определенные страницы. 12.12.2013

  • 2

    Не можете ли вы сделать как (псевдокод)?

    if($user=='admin') ini_set('upload_max_filesize','100m');
    
    12.12.2013
  • Это не сработает, потому что upload_max_filesize или post_max_size оцениваются до запуска скрипта! 12.12.2013
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..