Поиск по блогу

Showing posts with label Apache. Show all posts
Showing posts with label Apache. Show all posts

Sunday, October 4, 2015

Включение error_reporting в .htaccess

Для начала простой рецепт: 

Для включения вывода ошибок php в файле .htaccess необходимо добавить строку
php_value error_reporting 7
php_flag display_errors On
Эта запись соответствует включению вывода ошибок уровня «E_ERROR | E_WARNING | E_PARSE»
Для отключения вывода ошибок, включенного в php.ini используйте
php_value error_reporting 0
php_flag display_errors O

Теперь подробнее:

В интернете гуляет множество рецептов, предлагающих устанавливать вывод ошибок с помощью конструкции
php_value error_reporting “E_ALL & ~E_NOTICE”
но во многих случаях это не работает.
Для установки уровня сообщений об ошибках php требуется указать битовую маску, которая в десятичном представлении является целым положительным числом. Когда в php-коде в параметрах функции error_reporting мы указываем значение, например вида E_ERROR | E_WARNING | E_PARSE, на самом деле мы передаем результат действий над именованными константами php, имеющими значение типа int. С помощью документации легко убедиться что функция error_reporting в качестве параметра ожидает получить отнюдь не строку, а целое числовое значение.
Давайте разберемся, что это за зверь такой — битовая маска.
Если открыть список констант php, ответственных за установку уровня вывода ошибок, то можно заметить, что числовое значение каждой из них является «круглым» в двоичном представлении. То есть в двоичном виде константы будут выглядеть в виде одной единицы в старшем разряде и нескольких нулей после нее. Например:
КонстантаДесятичное представлениеДвоичное представление
E_ERROR1
  1
E_WARNING2
 10
E_PARSE4
100
Таким образом: выражение E_ERROR | E_WARNING | E_PARSE даст результат 111 в двоичном формате или 7 в десятичном. Эту-то семерку мы и подставили в директиву htaccess php_value error_reporting 7.
Зная значения констант можно легко варьировать уровень вывода ошибок, при этом нет необходимости переводить числа из десятичного представления в двоичное и обратно вручную. Нам поможет стандартный калькулятор Windows (замечу, что калькулятор, встроенный в (x)Ubuntu имеет схожие возможности). Запустим калькулятор и переведем его в режим «Программист» с помощью меню «Вид» как это показано на рисунке.
Переключение калькулятора в режим "Программист"

Теперь допустим, что мы хотим видеть сообщения об ошибках, но не хотим видеть никаких предупреждений (например мы работаем с каким-то старым php-кодом, использующим множество устаревших конструкций).
Убедимся, что калькулятор находится в десятичном режиме ввода (радио-баттон в положении «Dec») и будем последовательно вводить значения констант, отвечающих за вывод ошибок применяя к ним операцию «Or».
Органы управления калькулятора в режиме "Программист"
Константы, ответственные за предупреждения мы пропустим.
Таким образом мы выполним
1 Or 4 Or 16 Or 64 Or 256 Or 4096
что соответствует E_ERROR | E_PARSE | E_CORE_ERROR | E_COMPILE_ERROR | E_USER_ERROR | E_RECOVERABLE_ERROR. После нажатия равно мы получим 4437, что будет соответствовать битовой маске
1000101010101
В файле htaccess мы пропишем php_value error_reporting 4437 и многочисленные предупреждения не будут нам мешать, в то же время мы будем получать сообщения обо всех ошибках, приводящих к падению скрипта.

Sunday, June 15, 2014

Виртуальные хосты в Apache под Ubuntu 14.04 (боремся с Forbidden 403)

В сети можно найти много руководств по быстрой настройке и установке PHP, Apache и MySQL. Например вот это хорошо описывает процесс установки сервера, за исключением нескольких нюансов, которые выясняются по ходу дела.
Единственную сложность может составить настройка виртуальных хостов под Apache 2.4, который по умолчанию идет с новым дистрибутивом Ubuntu.
Лично мне удобно, что бы корневая директория локального сервера на компьютере, где я работаю указывала на некоторую папку в моей домашней директории. Пусть это будет /home/myName/workspace
После установки Apache уже имеется настройка хоста http://localhost, который открывает стандартную страницу "It works!"
Что бы на локалхосте открывалась нужная нам папка выполним в терминале
sudo gedit /etc/apache2/sites-available/000-default.conf
Что бы Apache не ругался при каждом рестарте добавим в начало открывшегося файла:
ServerName localhost
Затем найдем в файле строку "DocumentRoot /var/www/html" и закомментируем ее (добавим в начале строки символ "#"), а ниже добавим строку
DocumentRoot /home/myName/workspace
Теперь самое важное - необходимо разрешить Apache отображать содержимое нашей директории иначе мы получим то самое пресловутое "Forbidden 403". Раньше это делалось с помощью директив "Order Allow, Deny" и "Allow from all" но теперь, начиная с версии Apache 2.4 они заменены одной директивой "Require all granted" подробнее об этом можно прочитать здесь. Поэтому в самый конец файла мы допишем
<Directory /home/myName/workspace/>
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>
Сохраним файл и перезапустим Apache командой
sudo service apache2 restart
Теперь по адресу http://localhost будет открываться директория с нашими проектами.
Пример получившегося файла можно посмотреть здесь.

Инструменты для Web-мастеров: Продвижение, Почта для домена, Мониторинг, Безопасность   Подробнее
 
Google+