Normalmente, no se pueden detectar avisos con el bloque try-catch. ¡Pero puede convertir avisos en excepciones! Use esta forma:
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)!
}
Además, puede utilizar esta función para detectar advertencias. Simplemente cambie el nombre de la función por get_warning y cambie "<b>Notice</b>:"
por "<b>Warning</b>:"
.
Nota: La función cogerá una salida inocente que contiene:
<b> Aviso </b >:
Pero para escapar de este problema, simplemente, cambiar a:
<b> Aviso: </b >
Esto no funcionará si tiene desactivada la generación de informes de errores, como probablemente lo haría en producción. –