ディレクトリ生成とパーミション(php:mkdir)


windowsでの開発では特に気にしなくてもエラーにならないディレクトリなどのパーミション、十分考慮しないとunix系サーバへのアップロードでエラーがでまくる。特にcron(クーロン)などで自動実行している場合は注意が必要です。

現象

phpでパーミション「777」設定してディレクトリ作成しても「755」になってしまう。

mkdir("/path/dir", 0777); ⇒  755

調査

phpのオンラインマニュアルで「mkdir」関数について詳しく調べてました。
注意事項について書かれていましたので引用します。

Windows では mode  は無視されます。
ードは、現在設定されている umask の影響も受けます。umask を変更するには umask() を使用します。

Windowsがパーミション設定が無視するのはわかるとして、他に「umask」の影響も受けるようです。

umask とは

ITpro」さんから引用します。

UNIXにおいて,ファイルを新規に作成する際のファイルのアクセス権限(モード)を決めるためのコマンド。ファイルを作成する際,コマンドやアプリケーションがファイルに通常設定するモードとは異なるモードにしたい場合に使う。このコマンドを使って,許可しないパーミッションを設定する

unixでの「umask」のデフォルト値は「022」らしいです。ですので「777」で設定しても許可しないパーミション「022」が引かれて「755」になります。

対策

phpオンラインマニュアルでも書かれているとおり、umask を変更するには umask() を利用します。

umask(0);

これで 「777 - 0  =  777」になってパーミション777でディレクトリ作成できました。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です