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

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

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

2019年4月11日に作成されたページです。
情報が古かったり、僕が今以上のど素人だった頃の記事だったりする可能性があります。

どもです。
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)