سلام؛
همون طور که حمید جان گفتن header باید قبل از هر درخواستی به مرورگر فرستاده بشه تا درست کار کنه یعنی قبل از هر گونه خروجی! برای همین اگر بخوایید این کار رو یعنی فرستادن کاربر به صفحهی دیگهای رو در وسط کار یا وسط یک صفحهی php انجام بدید باید از جاوا اسکریپت استفاده کنید، البته من چند وقت پیش یه تابع دیدم که میومد تمامی درخواستهایی رو که به header فرستاده میشد (http) رو تعیین میکردش تا خطایی داده نشه البته منبعش رسمی و معتبر نبود.
بخشی از توضیح این تابع از سایت php.net
Remember that header() must be called before any actual output is sent, either by normal HTML tags, blank lines in a file, or from PHP. It is a very common error to read code with include(), or require(), functions, or another file access function, and have spaces or empty lines that are output before header() is called. The same problem exists when using a single PHP/HTML file.
البته به جز استفاده از جاوا اسکریپت راه حل دیگهای هم هستش و اون استفاده از بافرینگ در php هستش ولی به خاطر اینکه معمولا احتمال اینکه جاوا اسکریپت روی مرورگر کاربر غیر فعال باشه خیلی کمه و کم دردسر تر هم هستش از جاوا اسکریپت استفاده میشه.