PHPでPDFを返す実装をしていた。
いろいろとハマりポイントがあった。
PDFを返して、PDFビューアが出ると「読み込みに失敗しました」とだけ出てエラーがわからない。
ファイルパスとか怪しいと思ったので、readdir
とか使って成功するかだけを返すようにした。
まず第一に、PHPにはopen_basedir
というオプションがあって、ここに登録されていないパスにはアクセスできないと知った。
ここに追加してもアクセス権ではじかれたので、ディレクトリ自体のアクセス権を疑った。
案の定、PHPの実行されているときのユーザーに対するアクセス権が付与されていなかったので付与した。
これでも解決せず、いろいろ試した結果、A/B/C
のB
以下に再帰的にアクセス権を振ったが、A
にもアクセス権を設定が必要だったようだ。
いままでLinux触ってこんなことに遭遇したことなかったので、初めて知った。
テキストファイルを簡易DBとして、ファイル名一覧を登録した。
これの最初の行のファイル名だけがなぜかopen出来ずに困った。
ファイル名を画面にプリントしても何も問題ないように見えた。
が、HTMLソースをみたらゴミが入ってると分かった。
ごみの正体はBOMだった。
BOMを取り除くことで問題なくファイルopen出来た。
権限とか、BOMとか良く聞くトラブルだが、自分が遭遇するのは、改めて考えると初めてだった。
これで次ハマっても早く抜け出せるだろう。