I have been googling for this but no one appears to have the answer.
This post describes the problem well:
http://www.mail-archive.com/php-general@lists.php.net/
It should be as given by R. Bemrose; that's the usual example code. I guess there is something not-quite-right about your PHP execution environment.
Another method you can try is the CGI standard way of passing back a status line:
header('Status: 301 Moved permanently');
header('Location: http://www.example.com/');