Поскольку redirect
использует заголовки для выполнения своей задачи , ничего не может быть выведено до его вызова. Я не вижу ничего, что могло бы вызвать вывод, кроме:
if (!has_permission('invoices', '', 'create')) {
access_denied('invoices'); // exits?
}
if (!$id) {
die('No estimate found');
}
Однако оба, похоже, выходят, поэтому этап redirect
не должен быть достигнут.
Я бы предложил временно удалить перенаправления, запустить скрипт и посмотреть, что выводится. Затем вы можете удалить / отключить эти оскорбительные части кода и восстановить перенаправления. Это может быть так же просто, как вывод ошибки.