ど素人から毛を生やす。<延>

file_get_contents()はhttpでないと持ち帰るものが変わってしまう?

Web > PHP 2019年4月11日(最終更新:4月前)

どもです。
file_get_contents()に関する備忘録。

PDFを生成し、添付したメールを送信。そのためには作成したPDFをいちど取得しなければなりません。
しかし使用しているPDF作成ライブラリの仕様として、header()を変更してechoしてしまいます。
このため、include()でなくfile_get_contents()を使って生成データを「取得」することが求められます。

PDFを作成するソース自体は同ディレクトリにあるので、

$pdf = file_get_contents('./sauce.php')

としてみたところ、$pdfの中身はsauce.phpがそのまま入ってしまいました。
また、クエリストリングをつけるとNo such file or directoryです(これは当然か)。

相対から絶対パスに変えても、結果は同じでした。
が、

$pdf = file_get_contents('http://test.com/sauce.php')

httpから始まるURLにしたところ、$pdfに望み通りのPDFが取得できました。
軽くggっても原因がわからなくて釈然としないままですが、気を付けることにしましょう。
この場合だとクエリストリングもOKなので、そもそもhttp://とパスとで根本的に扱いが違うんだろうな感。


追記

file_get_contents()で生成ファイルを取得しようとすると、httpsの場合にproxyの有無とかallow_url_fopenの許可不許可でhttp://localhostにしないとダメだったりするけど、http://localhostが使えるかどうかもサーバーに依存するぞ~~~???(爆死)

ライブラリの仕様がechoだったからfile_get_contents()にしたわけだけど、ライブラリの方を弄った方が正解だったかもしれね。_(:3」∠)_

この記事は役に立ちましたか?
  • _(:3」∠)_ 面白かった (0)
  • (・∀・) 参考になった (0)
  • (`・ω・´) 役に立った (0)