Laravel 5.6 Настройка вызывает смертельную ошибку с исключениями [дубликат]

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

string FormatTimeSpan(TimeSpan timeSpan) =>
    $"{Math.Floor(timeSpan.TotalHours)}h {timeSpan.Minutes}m {timeSpan.Seconds}s";

Строковая интерполяция, введенная в C # 6, делает это намного яснее, чем в противном случае.

30
задан Community 23 May 2017 в 12:26
поделиться

10 ответов

17
ответ дан Andy 16 August 2018 в 02:47
поделиться

У меня была полная ошибка. Очень пространственный случай: если вы подключите крюк неназванной функции (замыкания) к точке крюка объекта объекта. После этого вы попытаетесь сериализовать этот объект.

0
ответ дан Akos 16 August 2018 в 02:47
поделиться

У меня была такая же ошибка: появилась версия сервера с centos 5 до centos 6 и понижение PHP с 5.4 до 5.3. Фактической проблемой был PHP apc, не настроенный должным образом. Проверьте свою APC. Я использовал Symfony2, поэтому вы можете найти некоторую помощь в Symfony Невозможно выделить память для пула

4
ответ дан Community 16 August 2018 в 02:47
поделиться
  • 1
    Это хороший совет, спасибо ... Мы не используем никаких пользовательских обработчиков сеансов, хотя для этого приложения :( – groovenectar 7 May 2012 в 17:38

Для нас эта ошибка произошла из-за непреднамеренного сериализации объектов SimpleXML.

Если вы используете объекты SimpleXML с 5.3.3, убедитесь, что вы забрасываете значения узлов во все, что вам нужно (например, string), если вы сериализуете значения в сеансе.

До:

  $token = $response->Token->Value;
  /* token saved in session, results in line 0 error */

После:

$token = (string) $response->Token->Value;
  /* token saved in session, no error */
2
ответ дан David 16 August 2018 в 02:47
поделиться
  • 1
    Это было какое-то время, но я думаю, что так было и здесь – groovenectar 28 May 2014 в 17:40

один простой способ произвести эту ошибку - старый сервер с register_globals = On. то вам понадобятся только две строки кода:

<?php
    $_SESSION["my_var"] = "string";
    $my_var = new MyClass(); //could be any class, i guess
?>

, как только вы перезагрузите эту страницу один раз, вы получите ошибку Exception thrown without a stack frame in Unknown on line 0. похоже, что существует конфликт между экземпляром класса и переменной (session). по крайней мере, так я получил эту досадную ошибку, которую так сложно отлаживать.

0
ответ дан low_rents 16 August 2018 в 02:47
поделиться

Я понимаю, что на этот вопрос уже был дан ответ, но я добавлю это, поскольку он может кому-то помочь:

Мне удалось (непреднамеренно) создать ошибки без фрейма стека из функции, которая использовала свои собственные обработчик ошибок, чтобы поддерживать управление выполнением при вызове потенциально «опасной» функции, например:

// Assume the function my_error_handler() has been defined to convert any
// PHP Errors, Warnings, or Notices into Exceptions.

function foo() {
    // maintain control if danger() crashes outright:
    set_error_handler('my_error_handler');

    try {
        // Do some stuff.

        $r = danger();
    } catch (Exception $e) {
        $r = 'Bad Stuff, Man!';
    }

    restore error_handler();
    return $r;
}

В конце выполнения программы произошел «непрослеживаемый сбой» если логика в «Do some stuff» возвращается из foo () напрямую, минуя вызов функции restore_error_handler (). То, что я убрал из опыта, следующее:

  1. PHP поддерживает стек обработчиков ошибок, который становится все глубже / выше с каждым вызовом set_error_handler ().
  2. Плохие вещи могут произойти, если вы нажимаете обработчики ошибок на стек и не очищаетесь после себя, прежде чем программа выйдет «нормально».

Это была сложная ошибка для изоляции - Я в основном сузил проблему до указанной выше функции, а затем смотрел на нее, пока мои глаза не кровоточили.

Итак, как бы я отследил это, зная, что я знаю сейчас? Поскольку я не знаю, как можно напрямую проверять «стек» обработчика ошибок PHP, я думаю, что имеет смысл использовать объект Singleton для инкапсуляции всех операций set / restore для обработчиков ошибок PHP. По крайней мере, тогда можно было бы проверить состояние Singleton перед выходом из программы в обычном режиме, и если обнаружены «оборванные» обработчики ошибок, чтобы генерировать разумное сообщение об ошибке / предупреждении до того, как PHP выйдет из игры.

2
ответ дан Peter 16 August 2018 в 02:47
поделиться

Вместо того, чтобы обертывать код в блоке try / catch, что происходит, когда вы регистрируете обработчик исключений? Очевидно, что ваш блок try / catch не перехватывает исключение, что приводит к ошибкам, зарегистрированным в Apache. Регистрируя обработчик, вы можете быть уверены, что любое неперехваченное исключение обрабатывается.

Кроме того, если вы используете пространства имен в своем приложении, убедитесь, что вы записываете \ Exception в свой блок catch (или включаете класс Exception через инструкцию использования).

3
ответ дан Peter Kruithof 16 August 2018 в 02:47
поделиться
  • 1
    Хорошая идея! Я дам вам попробовать как можно скорее и сообщить ... – groovenectar 20 May 2012 в 22:53
  • 2
    Штопать! Я помещал это в начало скрипта инициализации: function my_exception_handler($e) { error_log(get_class($e)." thrown. Message: ". $e->getMessage(). " in " . $e->getFile() . " on line ". $e->getLine()); error_log('Exception trace stack: ' . print_r($e->getTrace(), 1)); } set_exception_handler('my_exception_handler'); Проверено, что оно действительно перехватывает исключения, и всего несколько минут назад появился другой! [Mon May 21 09:48:39 2012] [error] [client x.x.x.x] PHP Fatal error: Exception thrown without a stack frame in Unknown on line 0 Я тоже возлагал большие надежды на это. – groovenectar 21 May 2012 в 14:54

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

Именно по этой причине работает чистая установка. Чистая установка просто чиста.

mysqlcheck должен работать, но если он не отображается и проблема все еще делает выше.

0
ответ дан Roland Booth 16 August 2018 в 02:47
поделиться

Это может быть немного поздно, но одна проблема, которую я обнаружил при перемещении сайта с локального на удаленный сервер. Я использовал Concrete5 cms, разработал мой сайт локально (Windows 8 в xampp), а затем загружен на удаленный сервер, на котором запущен Cent 0S

. Windows mysql по умолчанию нечувствителен к регистру и создает базу данных в нижнем регистре. После того, как это было загружено на удаленный сервер, я получил «Исключение, которое было выбрано без фрейма стека в Unknown в строке 0?»

Затем я исправил случай таблиц базы данных, и мой сайт снова начал работать.

2
ответ дан Sean 16 August 2018 в 02:47
поделиться
  • 1
    Argggh! Я действительно ненавижу этот случай, нечувствительный / чувствительный вопрос :( – twilson 29 November 2013 в 16:25

Эта проблема возникла для меня, когда я сменил пространство имен на нескольких пакетах Symfony. Удаление файлов в каталоге кеша symfony устранило проблему.

0
ответ дан ssjcory 16 August 2018 в 02:47
поделиться
Другие вопросы по тегам:

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