Где и что мне нужно изменить в файле '/etc/php5/apache2/php.ini' для отображения ошибок, предупреждений, исключений? Как мне сохранить внесенные изменения?

у меня есть:

  • Убунту Линукс 12.04 ЛТС
  • Веб-сервер Apache (Apache httpd 2.4.16)
  • PHP 5.5.29

Теперь, когда что-то идет не так в коде, я всегда вижу белый экран в окне браузера без каких-либо выводов. Итак, я погуглил решение и узнал, что мне нужно включить отчет об ошибках, чтобы получить подробные ошибки/исключения/предупреждения/и т. д.

И для этого я узнаю, что мне нужно изменить файл php.ini, который использует веб-сервер Apache.

Я открыл файл '/etc/php5/apache2/php.ini', выбрав его с помощью мыши, щелкните правой кнопкой мыши файл '/etc/php5/apache2/php.ini ', выберите вариант 'Открыть с помощью Sublime Text2' и откройте файл в Редакторе Sublime Text.

Я сделал одно небольшое изменение в строке № 466 файла '/etc/php5/apache2/php.ini' следующим образом:

display_errors = Off //Old code present on line no.466 of php.ini
display_errors = On  //New code changed by me on line no.466 of php.ini

Я не уверен, что это единственное изменение, которое мне нужно внести в файл '/etc/php5/apache2/php.ini', чтобы получить ошибки/предупреждения/исключения/и т.д. Пожалуйста, подробно расскажите мне об изменениях, которые мне нужно внести в файл '/etc/php5/apache2/php.ini', чтобы получить все возможные ошибки/предупреждения/исключения/и т.д.

Теперь, когда я попытался сохранить этот файл, я получил всплывающее окно с сообщением "Невозможно сохранить /etc/php5/apache2/php.ini".

Я владелец своего ноутбука, система моя, я администратор своей системы, но я не могу внести никаких изменений в файл. Это действительно непонятная, бесполезная и странная вещь для меня. Раньше, когда я использовал PHP на своей машине с Windows, таких странных вещей и головной боли никогда не было.

Пожалуйста, кто-нибудь вытащите меня из этого кровавого беспорядка, дав описательный и пошаговый ответ.

Мало кто говорит, что я должен открыть терминал и ввести там команды. Но я не понимаю, что такое терминал? Где это? Как его открыть? Что такое пользователь root и пользователь sudo? Что делает каждый из пользователей? Какая между ними разница? Целью графического текстового редактора является манипулирование файлами, и эта Ubuntu мешает мне это делать.

Здесь все странно с Ubuntu Linux. Какая от этого польза? и т. д.


person PHPFan    schedule 27.11.2015    source источник
comment
отредактируйте файл как root, запустив редактор с помощью sudo   -  person Joe    schedule 27.11.2015
comment
@Joe: я просто щелкнул файл правой кнопкой мыши и выбрал опцию «Открыть с помощью Sublime Text 2», как и в Windows. Теперь я не понимаю, что вы говорите с помощью «редактировать файл как root, запустив редактор с помощью sudo». Как мне запустить редактор Sublime с помощью sudo, когда я щелкаю правой кнопкой мыши, чтобы открыть файл? Скажи мне ясно.   -  person PHPFan    schedule 27.11.2015
comment
@Joe: Я никогда не сталкивался с такими трудоемкими и бесполезными проблемами в ОС Windows.   -  person PHPFan    schedule 27.11.2015
comment
В Windows есть аналогичная функция, которая называется «Контроль учетных записей».   -  person Andrea    schedule 27.11.2015
comment
Вы когда-нибудь читали журнал ошибок вашего веб-сервера Apache?   -  person Ken Cheung    schedule 30.11.2015
comment
@ user2839497: Вы проверили мое решение?   -  person Somnath Muluk    schedule 01.12.2015


Ответы (5)


Что такое терминал?

Терминал — это интерфейс, в котором вы выполняете свои команды. Подробнее здесь. Это как cmd в Windows.

Где это? Как его открыть?

Откройте Dash (черточка похожа на кнопку Start в Windows) введите здесь описание изображения и введите терминал. введите здесь описание изображения

Значок в виде черной доски с >_ — это ваш терминал, нажмите на него. введите здесь описание изображения

Так выглядит терминал.

Что такое пользователь root и пользователь sudo? Что делает каждый из пользователей? Какая между ними разница?

Цитата из документации Ubuntu

В Linux (и вообще в Unix) есть суперпользователь с именем root. Эквивалентом root в Windows является группа администраторов. Суперпользователь может делать что угодно и что угодно, поэтому выполнение повседневной работы в качестве суперпользователя может быть опасным. Вы можете ввести команду неправильно и вывести систему из строя. В идеале вы работаете от имени пользователя, у которого есть только те привилегии, которые необходимы для текущей задачи. В некоторых случаях это обязательно root, но чаще всего это обычный пользователь.

По умолчанию пароль учетной записи root заблокирован в Ubuntu. Это означает, что вы не можете войти как root напрямую или использовать команду su, чтобы стать пользователем root. Однако, поскольку учетная запись root физически существует, все еще можно запускать программы с привилегиями root. Вот тут-то и появляется sudo — он позволяет авторизованным пользователям запускать определенные программы от имени root, не зная пароля root.

Редактирование файла php.ini:

Теперь, когда вы знаете, что такое терминал, откройте терминал и введите:

sudo vi /etc/php5/apache2/php.ini

Примечание. Существуют и другие редакторы, например nano, gedit и т. д.

Вам будет предложено ввести пароль:

[sudo] password for user:

Просто введите пароль и нажмите Enter. Вы увидите содержимое php.ini в терминале. Теперь прокрутите и найдите строку Display_errors =off. Вам нужно будет изменить это на Display_errors =on, чтобы сделать это изменение, нажмите i, внесите изменения, нажмите esc, нажмите shift+q, введите wq! и нажмите Enter. Теперь вам нужно будет перезапустить apache, чтобы изменения вступили в силу. Итак, введите:

sudo service apache2 restart

и нажмите Enter. Вот и все. Надеюсь, это дало вам представление :)

person Criesto    schedule 02.12.2015

Относительно php.ini

Вы можете внести изменения во время выполнения во всех настройках вашего php.ini или путем редактирования php.ini.

Вы должны оставить error_reporting ложным по умолчанию. А в разработке можно сделать отчетность по времени выполнения.

error_reporting(E_ALL);
ini_set("display_errors", 1);

Делайте это только в том случае, если вы находитесь в режиме разработки, чтобы увидеть все фатальные ошибки/ошибки синтаксического анализа, или установите для error_log нужный файл, чтобы регистрировать ошибки вместо display_errors в рабочей среде (для этого необходимо включить log_errors).

По поводу изменений в файлах

php.ini должен быть отредактирован пользователем root.

Таким образом, вы можете редактировать с помощью терминала:

  1. Открытый терминал
  2. Переключить пользователя как root
  3. Отредактируйте php.ini с помощью редактора vi и внесите изменения .
  4. Перезапустите сервер апача

Или если вы все еще хотите редактировать с помощью возвышенного

  1. Откройте php.ini с помощью sublime. с корневым доступом
  2. Вам нужно внести необходимые изменения в php.ini
  3. Перезапустите сервер апача
person Somnath Muluk    schedule 30.11.2015

Терминал

Терминал — это интерфейс, в котором вы можете вводить и выполнять текстовые команды.
Думайте об этом как cmd в Windows.

Как его запустить:
Откройте Dash (клавиша Super/Window) или Приложения и введите terminal или используйте сочетание клавиш, нажав Ctrl+Alt+T.

Поскольку это слишком широко, и вам на самом деле не нужен терминал для вашей проблемы; подробное объяснение терминала см. в разделе Что такое терминал и как его открыть и использовать?.

Показать настройки ошибок в php.ini

Есть 2 настройки, которые вы должны изменить:

  • error_reporting = E_ALL
    Убедитесь, что оно имеет только значение E_ALL.
    E_ALL = Показать все ошибки, предупреждения и уведомления, включая стандарты кодирования.
    E_NOTICE = Показать уведомления
    E_STRICT = Показать стандартные предупреждения кодирования
    , если вы поставить ~ перед ним, это означает, кроме.
  • display_errors = On

Права доступа к файлам Unix-подобных ОС

В Unix-подобных ОС файлы и каталоги принадлежат пользователю, и отдельные разрешения (чтение, запись, запуск) применяются к владельцу.

Это очень упрощенное объяснение:
Файл '/etc/php5/apache2/php.ini' принадлежит root и имеет разрешение на запись только для root, поэтому вы не можете редактировать его, если вы не являетесь пользователем root.

Но есть способ редактировать файлы, принадлежащие другому пользователю, и это с помощью команды: sudo (superuser do ...), или gksu/gksudo для программного обеспечения с графическими интерфейсами.

Вы можете подумать, что ваше имя пользователя — это другой администратор/суперпользователь, так почему бы вам просто не отредактировать и не сохранить файл? Ну, на самом деле ты не такой. Ваш пользователь — обычный пользователь, но с разрешением на выполнение задачи суперпользователя. Другими словами, вы просто пользователь sudo (sudoers).


Таким образом, единственный способ сохранить сделанные вами изменения — запустить Sublime Text с привилегией root.

Этого можно добиться из терминала, выполнив команду: sudo sublime или gksu sublime.

Или без терминала:
с помощью тире (нажмите клавишу super/window), просто введите gksu sublime и нажмите клавишу ввода (вас попросят ввести пароль).

Это заставляет вас запускать возвышенный текстовый редактор как пользователь root, так что теперь вы можете открыть файл '/etc/php5/apache2/php.ini', отредактировать его и сохранить.

(Если у вас нет gksu, установите его через Ubuntu Software Installer.)

person cwps    schedule 03.12.2015

Я использую gksudo и gedit для выполнения этой работы. gksudo позволяет открыть графический интерфейс. Gedit — это текстовый редактор по умолчанию для GNOME. Если у вас есть KDE, вы будете использовать kedit.

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

  phpinfo();

Вот и все. У меня всегда есть файл info.php в корневом каталоге apache (в Ubuntu /var/www. Затем я вызываю этот файл с помощью:

http://localhost/info.php

и документ, содержащий много информации, будет возвращен. В нем у вас есть значение конфигурации: Загруженный файл конфигурации

Значение в этой строке — это файл php, который используется сервером apache. Вы должны отредактировать этот файл, чтобы увидеть отображаемые ошибки. Назовем это значение %phpini-file%.

Затем я открываю терминал (см. https://help.ubuntu.com/community/UsingTheTerminal) и введите

gksudo gedit %phpini-file%

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

error_reporting = E_ALL

Документация в файле дает вам хорошие предложения.

Под этой переменной у вас есть переменные display_errors, display_startup_errors и log_errors. Я всегда присваиваю этим переменным значения On на моей машине разработки.

Несколькими строками ниже у вас есть переменная track_errors. Я включил его.

После внесения этих изменений вам придется перезапустить apache. Как я это делаю:

sudo /etc/init.d/apache2 restart

Это эквивалентно

sudo service apache2 restart

но это то, как я это запомнил.

Вместо терминала вы можете нажать ALT + F2, и вы увидите, что посреди экрана появится командная строка. Затем вы вводите свою команду, и действие будет выполнено.

Root — это пользователь, который имеет все привилегии в системе на основе Unix. Sudo — это сокращение от super user do, которое позволяет выполнять команды так, как если бы кто-то был root. Вся корневая концепция гарантирует, что ни один пользователь не сможет ничего сделать в системе. Вы должны быть root или иным образом получить привилегии sudo, чтобы вносить изменения в систему.

person Loek Bergman    schedule 02.12.2015

Вам просто нужно нажать

Ctrl+Альт+Т

и вы увидите появившееся окно, которое представляет собой не что иное, как Терминал.

Там вам просто нужно ввести:

sudo gedit /etc/php5/apache2/php.ini

[Gedit — это не что иное, как редактор Linux по умолчанию.] После этого вам будет предложено ввести пароль, где вам нужно ввести пароль вашей системы.

Файл откроется в редакторе, просто найдите Display_Errors на этой странице и замените off with on, так будет:

Display_Errors=включено

После внесения изменений сохраните и закройте этот файл.

И просто перезапустите Apache, снова набрав эту команду в ТЕРМИНАЛЕ:

sudo /etc/init.d/apache2 restart
person Nehal    schedule 04.12.2015