I think the problem is at client-side rather than server-side - changing the headers won't always work.
What I do as a quick'n'dirty workaround for situations like this is add a timestamp to a GET parameter. For example, if I have an image that needs to be constantly refreshed, I display it as:
IMG src="img.gif?id=20030317143025"
So wherever you reference your php page, just name it like so:
< a href="page.php?pid=< ?php print date() ? >" >
Does that work for you?