Следующая статья: Excel на PHP
@ - атавизм.
Для отладки действительно лучше использовать error_reporting и перехватывать стандартный обработчик ошибок php.
Пример - кусок из моей бибилотеки.
if (DEBUG_MODE)
{ // All messages printed into browser window
// error_reporting(E_ALL & ~E_NOTICE);
error_reporting(E_ALL);
}
else
{ error_reporting(0);
require_once('classes/bavlog.php');
set_error_handler(bavErrorHandler);
// override PHP's main error handler function this should NOT be called directly
function nmErrorHandler($errno,$errmsg,$errfile,$errline,$vars)
{ …
… some analizer of error
}
}
А собственный вывод сообщений об ошибках и отладочной информации сделать не echo, print() а через trigger_error().
Подробности об использовании собственного обработчика есть в документации.
А подавить сообщения об ошибках можно, указывая @ перед функцией блокирует вывод сообщения об ошибке
Если track_errors включен то последнее сообщение об ошибке сохраняется в глобальной переменной $php_errormsg