nmtysh.log

Tech系のネタや日々の独り言などを書いています。

rename後にはchmodが必要だった

意図したパーミッションにならない

対象Ver: 5.5.x

ファイルシステムにファイルを吐き出すCakePHPのコードを書いたのですが、作成したファイルが意図したパーミッションになりませでした。

ファイルを作成した流れ

  1. 一時ファイル作成(パーミッションは0644を指定)
  2. 一時ファイルにコンテンツを出力
  3. 出力完了後に目的の出力先にファイルを置くためrename()を実行
  4. 出力先のファイルのパーミッションが0600になっている

一時ファイルを作成しているのはファイルへ出力途中に対象のファイルを参照されても問題ないようにするためです。
どうやらrenameしているためパーミッションが変わるようです。
rename()後にchmod()を実行すると意図するパーミッションになりました。

まとめ

renameしたあとは目的のパーミッションになるようにchmodをする必要がある

おまけ

8進数での指定は引っかかりやすいところですね。
「"」でくくったら文字列扱いされて自動型変換で10進数としてみなされました。