Как поймать эту ошибку: "обратите внимание: не определено смещение: 0"
Я хочу поймать эту ошибку:
$a[1] = 'jfksjfks';
try {
$b = $a[0];
} catch (Exception $e) {
echo "jsdlkjflsjfkjl";
}
Edit: на самом деле, я получил эту ошибку на следующей строке:
$parse = $xml->children[0]->children[0]->toArray();
6 ответов:
вам нужно определить свой пользовательский обработчик ошибок, например:
<?php set_error_handler('exceptions_error_handler'); function exceptions_error_handler($severity, $message, $filename, $lineno) { if (error_reporting() == 0) { return; } if (error_reporting() & $severity) { throw new ErrorException($message, 0, $severity, $filename, $lineno); } } $a[1] = 'jfksjfks'; try { $b = $a[0]; } catch (Exception $e) { echo "jsdlkjflsjfkjl"; }
вы не можете использовать блок try/catch, так как это ошибка, а не исключение.
всегда пытается смещения перед их использованием:
if( isset( $a[ 0 ] ) { $b = $a[ 0 ]; }
$a[1] = 'jfksjfks'; try { $offset = 0; if(isset($a[$offset])) $b = $a[$offset]; else throw new Exception("Notice: Undefined offset: ".$offset); } catch (Exception $e) { echo $e->getMessage(); }
или, без неэффективности создания очень временного исключения:
$a[1] = 'jfksjfks'; $offset = 0; if(isset($a[$offset])) $b = $a[$offset]; else echo "Notice: Undefined offset: ".$offset;
Я знаю, что это 2016, но в случае если кто-то доберется до этого поста.
вы могли бы использовать
array_key_exists($index, $array)
метод во избежание возникновения исключения.$index = 99999; $array = [1,2,3,4,5,6]; if(!array_key_exists($index, $array)) { //Throw myCustomException; }
обычно вы не можете поймать уведомления с помощью блока try-catch. Но вы можете конвертировать уведомления в исключения! Используйте этот способ:
function get_notice($output) { if (($noticeStartPoint = strpos($output, "<b>Notice</b>:")) !== false) { $position = $noticeStartPoint; for ($i = 0; $i < 3; $i++) $position = strpos($output, "</b>", $position) + 1; $noticeEndPoint = $position; $noticeLength = $noticeEndPoint + 3 - $noticeStartPoint; $noticeMessage = substr($output, $noticeStartPoint, $noticeLength); throw new \Exception($noticeMessage); } else echo $output; } try { ob_start(); // Codes here $codeOutput = ob_get_clean(); get_notice($codeOutput); } catch (\Exception $exception) { // Catch (notice also)! }
кроме того, вы можете использовать эту функцию, чтобы поймать предупреждения. Просто измените имя функции на get_warning и измените
"<b>Notice</b>:"
to"<b>Warning</b>:"
.Примечание: функция будет ловить невинный вывод, который содержит:
обратите внимание:
но чтобы уйти от этой проблемы, просто измените ее к:
обратите внимание:
Я уверен, почему ошибка бросить, но я исправить некоторые..
в html2pdf.класс.php
на линии 2132:
//FIX: $ctop=$corr[$y][$x][2]<=count($sw)?$corr[$y][$x][2]:count($sw); $s = 0; for ($i=0; $i<$ctop; $i++) {$s+= array_key_exists($x+$i, $sw)? $sw[$x+$i]:0;}
то же самое на линии 2138:
//FIX: $ctop=$corr[$y][$x][2]<=count($sw)?$corr[$y][$x][2]:count($sw); for ($i=0; $i<$ctop; $i++) {
проблема массив $sw не имеет ключа $corr[$y] [$x] [2] поэтому я исправляю цикл для максимального количества($sw) для исправления .. Я не знаю, если это создать еще одну последовательность, но я решаю свою проблему y не имеют больше ошибок..
Так что я надеюсь, работает для вас ..!!! Бьет Общем