Beginner Hello world php errors [duplicate]

Вы можете использовать jQuery.grep (), поскольку jQuery 1.0:

$.grep(homes, function (h) {
  return h.price <= 1000
    && h.sqft >= 500
    && h.num_of_beds >= 2
    && h.num_of_baths >= 2.5
});
501
задан Taryn 22 March 2017 в 17:12
поделиться

28 ответов

Для синтаксических ошибок вам нужно включить отображение ошибок в php.ini. По умолчанию они отключены, потому что вы не хотите, чтобы «клиент» видел сообщения об ошибках. Проверьте эту страницу в документации PHP для информации по двум директивам: error_reporting и display_errors. display_errors, вероятно, тот, который вы хотите изменить. Если вы не можете изменить php.ini, вы также можете добавить следующие строки в файл .htaccess:

php_flag  display_errors        on
php_value error_reporting       2039

Возможно, вам захочется использовать значение E_ALL (как упоминалось Gumbo) для вашей версии PHP для error_reporting, чтобы получить все ошибки. Дополнительная информация

3 других элемента: (1) Вы можете проверить файл журнала ошибок, поскольку он будет иметь все ошибки (кроме случаев, когда ведение журнала отключено). (2) Добавление следующих двух строк поможет вам отлаживать ошибки, которые не являются синтаксическими ошибками:

error_reporting(-1);
ini_set('display_errors', 'On');

(3) Другой вариант - использовать редактор, который проверяет наличие ошибок при вводе, например PhpEd . PhpEd также поставляется с отладчиком, который может предоставить более подробную информацию. (Отладчик PhpEd очень похож на xdebug и интегрируется непосредственно в редактор, поэтому вы используете 1 программу для выполнения всего.)

Ссылка Cartman также очень хороша: http : //www.ibm.com/developerworks/library/os-debug/

440
ответ дан Sumurai8 20 August 2018 в 13:24
поделиться
  • 1
    Вы прочитали мой весь ответ? Я специально говорю, что это не будет работать для синтаксических ошибок, тогда как вы не упомянули об этом. Ввод вашего кода не имеет значения. – Darryl Hein 10 May 2009 в 11:04
  • 2
    Это верно. Я должен был подумать об этом. – Tomalak 10 May 2009 в 11:10
  • 3
    2039 - значение E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE. См. docs.php.net/manual/en/errorfunc.constants.php – Gumbo 10 May 2009 в 18:59
  • 4
    так почему бы не error_reporting (-1)? – ts. 29 December 2010 в 15:12
  • 5
    Я бы добавил, что ошибки регистрации в файле (и поиск их там) - лучшее решение. Не полагайтесь на отображение ошибок на странице - они могут испортить его, вы можете забыть об ошибке создания отчетов об ошибках на рабочем месте, и это может вызвать проблемы в будущем – Ivan Yarych 26 March 2016 в 21:44
error_reporting(E_ALL | E_STRICT);

И включите ошибки отображения в php.ini

8
ответ дан Ólafur Waage 20 August 2018 в 13:24
поделиться
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
4
ответ дан Abuzer Firdousi 20 August 2018 в 13:24
поделиться

Вы можете включить полную отчетность об ошибках (включая уведомления и строгие сообщения). Некоторые люди считают это слишком многословным, но это стоит попробовать. Установите error_reporting на E_ALL | E_STRICT в вашем php.ini.

error_reporting = E_ALL | E_STRICT

E_STRICT уведомит вас об устаревших функциях и даст вам рекомендации о лучших методах выполнения определенных задач.

Если вы не хотите получать уведомления, но вы найдете другие типы сообщений полезными, попробуйте исключить уведомления:

error_reporting = (E_ALL | E_STRICT) & ~E_NOTICE

Также убедитесь, что display_errors включен в php.ini. Если ваша версия PHP старше 5.2.4, установите ее в On:

display_errors = "On"

Если ваша версия 5.2.4 или новее, используйте:

display_errors = "stderr"
3
ответ дан Ayman Hourieh 20 August 2018 в 13:24
поделиться

Две ключевые строки, необходимые для получения полезных ошибок из PHP:

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

Как указывали другие участники, они по умолчанию отключены по соображениям безопасности. Как полезный совет - когда вы настраиваете свой сайт, удобно использовать переключатель для разных сред, чтобы эти ошибки были включены по умолчанию в вашей локальной среде и средах разработки. Это может быть достигнуто с помощью следующего кода (в идеале, в вашем файле index.php или config, так что он активен с самого начала):

switch($_SERVER['SERVER_NAME'])
{
    // local
    case 'yourdomain.dev':
    // dev
    case 'dev.yourdomain.com':
        ini_set('display_errors',1);
        error_reporting(E_ALL);
    break;
    //live
    case 'yourdomain.com':
        //...
    break;
}
6
ответ дан Brad Larson 20 August 2018 в 13:24
поделиться

Конфигурация PHP

2 записи в php.ini диктуют вывод ошибок:

  1. display_errors
  2. error_reporting

В процессе производства display_errors обычно устанавливается на Off (что хорошо, потому что отображение ошибок на производственных площадках обычно нежелательно!).

Однако в разработке он должен быть установлен на On, чтобы отображались ошибки. Check!

error_reporting (начиная с PHP 5.3) устанавливается по умолчанию на E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED (что означает, что все отображается за исключением уведомлений, строгих стандартов и уведомлений об отказе). Если вы сомневаетесь, установите его на E_ALL, чтобы отобразить все ошибки. Проверьте!

Whoa whoa! Нет проверки! Я не могу изменить свой php.ini!

Это позор. Обычно общие хосты не позволяют изменять файл php.ini, и поэтому этот параметр, к сожалению, недоступен. Но не бойся! У нас есть другие возможности!

Конфигурация времени выполнения

В желаемом скрипте мы можем изменить записи php.ini во время выполнения! Значит, он будет запускаться при запуске скрипта! Sweet!

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

Эти две строки будут делать тот же эффект, что и изменение записей php.ini, как указано выше!

Я все еще получаю чистую ошибку страницы / 500!

Это означает, что сценарий даже не запускался! Это обычно происходит, когда у вас есть синтаксическая ошибка!

С синтаксическими ошибками скрипт даже не доходит до времени выполнения. Он не работает во время компиляции, то есть он будет использовать значения в php.ini, которые, если вы не изменились, могут не разрешать отображение ошибок.

Журналы ошибок

Кроме того, PHP по умолчанию регистрирует ошибки. На общем хостинге это может быть в выделенной папке или в той же папке, что и скрипт-нарушитель.

Если у вас есть доступ к php.ini, вы можете найти его под error_log .

46
ответ дан Community 20 August 2018 в 13:24
поделиться

Чтобы включить полное сообщение об ошибках, добавьте это в свой скрипт:

error_reporting(E_ALL);

Это приводит к появлению даже минимальных предупреждений. И на всякий случай:

ini_set('display_errors', '1');

заставит отображать ошибки. Это должно быть отключено на рабочих серверах, но не при разработке.

3
ответ дан Daniel S 20 August 2018 в 13:24
поделиться
  • 1
    Как и с ответом Томалака, это не работает для синтаксических ошибок. – Darryl Hein 10 May 2009 в 18:58

Существует действительно полезное расширение, называемое « xdebug », что сделает ваши отчеты намного приятнее.

26
ответ дан gnarf 20 August 2018 в 13:24
поделиться
  • 1
    В самом деле, это полезный инструмент отладки very - делает сообщения об ошибках гораздо более подробными, с полными стеками стека и переменными дампами и всем остальным. – hbw 10 May 2009 в 11:06
  • 2
    Да. И затем используйте что-то вроде плагина VimDebugger, чтобы пройти через свой код и узнать, где он идет не так. – Sander Marechal 10 May 2009 в 11:20
  • 3
  • 4
    NetBeans с xdebug здесь. Это так здорово. Я новичок в PHP (обычно ASP.NET) и ранее выдавал инструкции эха. – Some Canuck 10 May 2009 в 13:10
  • 5
    См. Также «Упс». обработчик ошибок – Jonathan 9 May 2018 в 18:24

Для быстрого практического устранения неполадок, я обычно предлагаю здесь на SO:

error_reporting(~0); ini_set('display_errors', 1);

, который должен быть вставлен в начале сценария, который находится под устранением неполадок. Это не идеально, идеальным вариантом является то, что вы также включаете это в php.ini и регистрируете ошибки в PHP, чтобы уловить синтаксис и ошибки при запуске.

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

Следующие действия:

  • Установите Xdebug и включите удаленную отладку с помощью IDE.

См. Также:

22
ответ дан hakre 20 August 2018 в 13:24
поделиться

«ОШИБКИ» являются наиболее полезными для разработчиков, чтобы знать их ошибки и разрешать их, чтобы система работала идеально.

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

Лучшие способы записи следующих двух строк в верхней части скрипта для получения всех сообщений об ошибках:

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

Другой способ использования инструментов отладчика, таких как xdebug в вашей среде IDE.

417
ответ дан janykste 20 August 2018 в 13:24
поделиться
  • 1
    Лучше всего сделать эти изменения на уровне файла .ini. Включение отчетов об ошибках из сценария бесполезно, так как это не поможет с синтаксическими ошибками или другими фатальными ошибками, которые убивают фазу компиляции. Сценарий убивается задолго до того, как он начнет выполнение и достигнет переопределения отчетов. – Marc B 4 July 2011 в 20:49
  • 2
    Запустите phpinfo (), чтобы найти правильный файл php.ini. Найдите строку Загруженный файл конфигурации . – borrible 5 July 2011 в 09:01
  • 3
    Я прихожу сюда хотя бы раз в день, копируя это. Я должен, вероятно, просто запомнить его. – Subie 22 January 2014 в 21:01
  • 4
    Если вы ищете ошибки, возникающие на этапе компиляции, проверьте, что ваши журналы Apache часто находятся в /var/log/apache2/error.log – csi 22 February 2014 в 00:08
  • 5
    Этот ответ завершится неудачно на php7, когда включена строгая типизация, потому что второй параметр ini_set является строкой. – PeeHaa 4 September 2015 в 18:16
  • 6
  • 7
    Это не отвечает на вопрос ... – cybermonkey 17 June 2016 в 19:34
  • 8
    – Jan Drábek 5 July 2016 в 12:25

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

[Sun Apr 19 19:09:11 2009] [error] [client 127.0.0.1] PHP Parse error:  syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in D:\\webroot\\test\\test.php on line 9
3
ответ дан jmucchiello 20 August 2018 в 13:24
поделиться

В верхней части страницы выберите параметр

error_reporting(E_ERROR | E_WARNING | E_PARSE);
14
ответ дан Kld 20 August 2018 в 13:24
поделиться

Включение отчета об ошибках является правильным решением, однако оно, похоже, не вступает в силу в программе, которая включает его, но только в последующих программах.

Таким образом, я всегда создаю файл / (который я обычно называю «genwrap.php»), который имеет по существу тот же самый код, что и популярное решение здесь (т. е. включить отчет об ошибках), а также включает в себя страницу, которую я действительно хочу вызвать.

Есть два шага для реализации этой отладки:

One - создать genwrap.php и поместить в него этот код:

<?php
error_reporting(-1);
ini_set('display_errors', 'On');

include($_REQUEST['page']);
?>

Two - изменить ссылку на программу / страницу вы хотите отлаживать переход через genwrap.php,

Например: change:

$.ajax('dir/pgm.php?param=val').done(function(data) { /* ... */

to

$.ajax('dir/genwrap.php?page=pgm.php&param=val').done(function(data) { /* ... */
0
ответ дан kris 20 August 2018 в 13:24
поделиться

Моя обычная проблема - это «маленькие, глупые» ошибки парсера, которые, к сожалению, не отображаются.

Однако, когда .PHP-файл содержит файл с ошибками парсера, они отображаются! Поэтому у меня возникла идея написать небольшой «сценарий-исполнитель», который запускается с именем файла с ошибкой в ​​качестве аргумента, т. Е. example.com/sx.php?sc=buggy.php

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

sx.php
$sc = $_GET["sc"];
if ((!isset($_GET["sc"]) && empty($_GET["sc"]))) {
    echo "Please select file to execute using ?sc= (you may omit the .PHP-extension)";
} else {
    $sc = $_GET["sc"];
    if (false==stripos('.php',$sc)) $sc.='.php';  // adjust this if your preferred extension is php5!
    require($sc);
}
?>
-1
ответ дан MBaas 20 August 2018 в 13:24
поделиться
  • 1
    Ненавижу быть тем парнем, но это плохой пример. Включение локального файла – Darren 27 June 2014 в 08:57
  • 2
    Вы правы - этот механизм не должен использоваться для производства, это просто инструмент, чтобы поймать эти вещи при разработке / отладке / тестировании. – MBaas 2 July 2014 в 08:36

http://todell.com/debug также может быть полезен. Вы можете увидеть ваши значения объектов или сбросить ошибки отладки позади сцены даже в режиме производства.

0
ответ дан PHPCoder 20 August 2018 в 13:24
поделиться

FirePHP также может быть полезен.

15
ответ дан Rich Bradshaw 20 August 2018 в 13:24
поделиться
  • 1
    Это то, что я ищу! :), Почему никто не отдал это обратно? Отладка веб-сайта нужна только вебмастеру, а не клиенту. Поэтому запустить его на локальном уровне лучше всего для обеспечения безопасности. – Michael Antonio 26 January 2014 в 03:05
  • 2
    Если вы проводите различие между локальной и производственной средой, вы должны просто включать или отключать ошибки глобально (в вашем php.ini), а не в коде, который также может быть производственным кодом. Если вам нужно отладить производственный сайт в своей производственной среде и только хотите, чтобы вы могли просматривать ошибки, используйте $_SERVER['REMOTE_HOST'], чтобы проверить, является ли клиент, ну, вы. – Jaap Haagmans 23 June 2014 в 12:50

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

6
ответ дан Rodney McIntosh 20 August 2018 в 13:24
поделиться

Использовать Kint. Это комбинация команд отладки на стероидах. https://kint-php.github.io/kint/ Он очень похож на Nette Tracy

0
ответ дан siniradam 20 August 2018 в 13:24
поделиться

Чтобы сохранить это и сделать его confortale, вы можете отредактировать файл php.ini. Обычно он хранится в /etc/php.ini или /etc/php/php.ini, но более локальные php.ini могут перезаписать его, в зависимости от рекомендаций по настройке вашего хостинг-провайдера. Проверьте файл phpinfo() для Loaded Configuration File вверху, чтобы убедиться, что последний загружается последним.

Искать display_errors в этом файле. Должно быть только 3 экземпляра, из которых 2 комментируются.

Измените строку без комментирования на:

display_errors = stdout
12
ответ дан sjas 20 August 2018 в 13:24
поделиться

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

function dump_error_to_file($errno, $errstr) {
    file_put_contents('/tmp/php-errors', date('Y-m-d H:i:s - ') . $errstr, FILE_APPEND);
}
set_error_handler('dump_error_to_file');
7
ответ дан soulmerge 20 August 2018 в 13:24
поделиться
  • 1
    Это не работает для синтаксических ошибок, о которых упоминал Кандидас. – Darryl Hein 10 May 2009 в 10:58
  • 2
    Да, но это уже охвачено всеми другими ответами. – soulmerge 10 May 2009 в 10:59

Вы можете включить следующие строки в файл, который вы хотите отлаживать:

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

Это переопределяет настройки по умолчанию в php.ini, которые просто заставляют PHP сообщать об ошибках в журнал.

52
ответ дан Tomalak 20 August 2018 в 13:24
поделиться
  • 1
    Это не работает для синтаксических ошибок, о которых упоминал Кандидас. – Darryl Hein 10 May 2009 в 10:56
  • 2
    Это правда. В этом случае значения должны быть установлены в ini напрямую - для чистой среды разработки это может быть предпочтительным в любом случае. – Tomalak 10 May 2009 в 11:00
  • 3
    работал для хоста ipage. благодаря – shady sherif 17 April 2018 в 15:38

, если вы пользователь ubuntu, затем перейдите к своему терминалу и запустите эту команду

sudo tail -50f /var/log/apache2/error.log

, где будут отображаться последние 50 ошибок. Существует файл ошибки error.log для apache2, который регистрирует все ошибки.

5
ответ дан Unihedron 20 August 2018 в 13:24
поделиться

Вы также можете попробовать PHPStorm в качестве редактора кода. Он найдет много PHP и других синтаксических ошибок, как вы набираете в редакторе.

5
ответ дан user1681048 20 August 2018 в 13:24
поделиться

В дополнение к очень многим превосходным ответам выше вы также можете реализовать следующие две функции в своих проектах. Они будут улавливать каждую несинтаксическую ошибку до выхода приложения / скрипта. Внутри функций вы можете делать обратную трассировку и регистрировать или отображать сообщение «Сайт под техническим обслуживанием».

Неустранимые ошибки:

register_shutdown_function

http: //php.net/manual/en/function.register-shutdown-function.php

Ошибки:

set_error_handler

http: // php .net / manual / en / function.set-error-handler.php

Backtracing:

debug_backtrace

http://php.net/ ручной / EN / function.debug-backtrace.php

0
ответ дан Vladimir Ramik 20 August 2018 в 13:24
поделиться

Я рекомендую Nette Tracy для лучшей визуализации ошибок и исключений в PHP:

Nette Tracy screenshot [/g1]

417
ответ дан janykste 20 August 2018 в 14:09
поделиться
  • 1
    Лучше всего сделать эти изменения на уровне файла .ini. Включение отчетов об ошибках из сценария бесполезно, так как это не поможет с синтаксическими ошибками или другими фатальными ошибками, которые убивают фазу компиляции. Сценарий убивается задолго до того, как он начнет выполнение и достигнет переопределения отчетов. – Marc B 4 July 2011 в 20:49
  • 2
    Запустите phpinfo (), чтобы найти правильный файл php.ini. Найдите строку Загруженный файл конфигурации . – borrible 5 July 2011 в 09:01
  • 3
    Я прихожу сюда хотя бы раз в день, копируя это. Я должен, вероятно, просто запомнить его. – Subie 22 January 2014 в 21:01
  • 4
    Если вы ищете ошибки, возникающие на этапе компиляции, проверьте, что ваши журналы Apache часто находятся в /var/log/apache2/error.log – csi 22 February 2014 в 00:08
  • 5
    Этот ответ завершится неудачно на php7, когда включена строгая типизация, потому что второй параметр ini_set является строкой. – PeeHaa 4 September 2015 в 18:16
  • 6
    Xdebug можно включить с php.ini – jewelhuq 5 January 2016 в 13:32
  • 7
    Это не отвечает на вопрос ... – cybermonkey 17 June 2016 в 19:34
  • 8
    Трейси заботится о правильной настройке всех ошибок отображения и параметров отчетов об ошибках для обеспечения вывода в таких ситуациях, как описано в исходном сообщении ... Так что этот инструмент особенно полезен для обращения к апеллятору «Может ли кто-нибудь рекомендовать хорошие советы, инструменты и методы отладки PHP ? & Quot ;. – Jan Drábek 5 July 2016 в 12:25

Если вы супер крутой, вы можете попробовать:

$test_server = $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "localhost" || substr($_SERVER['SERVER_NAME'],0,3) == "192";

ini_set('display_errors',$test_server);
error_reporting(E_ALL|E_STRICT);

Это будет отображаться только при локальном запуске. Он также дает вам переменную test_server для использования в других местах, где это необходимо.

Любые ошибки, которые происходят до запуска скриптов, не будут обнаружены, но для 99% ошибок, которые я делаю, это не проблема .

15
ответ дан Rich Bradshaw 20 August 2018 в 14:09
поделиться
  • 1
    Это то, что я ищу! :), Почему никто не отдал это обратно? Отладка веб-сайта нужна только вебмастеру, а не клиенту. Поэтому запустить его на локальном уровне лучше всего для обеспечения безопасности. – Michael Antonio 26 January 2014 в 03:05
  • 2
    Если вы проводите различие между локальной и производственной средой, вы должны просто включать или отключать ошибки глобально (в вашем php.ini), а не в коде, который также может быть производственным кодом. Если вам нужно отладить производственный сайт в своей производственной среде и только хотите, чтобы вы могли просматривать ошибки, используйте $_SERVER['REMOTE_HOST'], чтобы проверить, является ли клиент, ну, вы. – Jaap Haagmans 23 June 2014 в 12:50
422
ответ дан janykste 31 October 2018 в 10:43
поделиться
0
ответ дан Phil 31 October 2018 в 10:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: