自分は開発環境がIISで、phpプログラムもIISで動かす。
ところが、開発時問題ないと思っていて、レンタルサーバにあげるとうまく動作しないということが起きる。
「FPDF error: Some data has already been output, can’t send PDF file」というのでずいぶん困った。IISでは何も問題ない。そして、新しく作ったプログラムのもとになるプログラムは普通に動いている。何が違うのか。
実は、phpファイルをutf-8で保存するのだけれど、その時に文頭にutfの識別文字0xef 0xbb 0xbfが入っているかどうかだけの違いだった。utf-8(no signature)で保存すると正常に動いた。
同じようなことが何回かある。
例1)
<php?で始まる文頭にスペースや改行があるかどうか。スペースや改行があってもIISでは問題なく動く。ところがapacheでは動かない。
例2)
デバッグのためにecho文を入れていることがある。これでIISで動くのに、Apacheで動かないケースがある。
いずれの場合もpdfだったり、csvだったり、リダイレクトだったり、通常のhtml以外のレスポンスするプログラムだ。本番環境のレンタルサーバでは、pdfやリダイレクトのレスポンスがある前にhtmlのレスポンスがあったものとして、エラーになるのに、IISではエラーにならないのです。
どちらがいいんでしょうね。IISはバッファのレスポンスを返す前に、他のレスポンスを優先するような、何らかの判断が働いていると考えられる。そして、実はこれは案外便利なんだよね。