Codice PHP:
<?php
ob_start();
?>
<html>
<head>
<title>Log in</title>
</head>
<body><center>
Welcome to login area, please login with your username and pasword.
</center>
<form method=post action=<?php print("$PHP_SELF");?>>
<div align="center">[b]Username[/b]:
<input type="text" size=15 name="user">
[b]Pass[/b]:
<input type="password" size="15" name="pass">
<input type="SUBMIT" name="send" value="invia">
</div>
</FORM>
<?php
if ($_POST['user']=="user"&&$_POST['pass']=="pass")//change these to what ever you want them to be.
{
header("Location: [url]http://www.convertini.com[/url]");
}
else
{
if ($_POST['user'] == NULL)
{
}
else
print("Spiacente, [b][i]$user[/i][/b] non è un nome corretto.");//this is the error message, you can change it if you want.
}
?>
<center>
<?php
print ("Immanuel_Kant: the unprofessional choice");
?>
</body>
</html>
quello che hai trovato era impreciso... semplicemente non deve partire il flusso dati dal server al client prima dell'header... l'html E' un flusso dati.. 
Nel tuo caso per semplicità ho spostato in cima la bufferiozzazione dell''output.. così che questo parta dopo che l'intera pagina è stata elaborata... e quindi l'header può essere inviato prima dell'output 