0
0

PHPでmkdir時に4桁のパーミッションを文字列型の変数の値より指定するには

Last updated at Posted at 2020-02-27

PHPのmkdir関数でディレクトリを作成する際に8進数4桁のパーミッションを指定する場合、mkdir関数の第2引数へ

mkdir('/var/dat/hogefuga', 0755, true);

のような形で指定することで、0755(rwxr-xr-x)というパーミッションのディレクトリが作成されます。
変数でセットする場合も、

$perm = 0755;
mkdir('/var/dat/hogefuga', 0755, true);

とすることで、上記と同様のパーミッションでディレクトリを作成することができます。
しかし、変数が文字列型である場合、例えば

$perm = '0755';
mkdir('/var/dat/hogefuga', 0755, true);

である場合、0755(rwxr-xr-x)とならず(例えば、-wxr---tのようになり)、意図したパーミッションとならない場合があります。
変数が文字列型であるケースとしては、Webシステムから送信された値や、DBやAPI、ファイル等から取得した値を使用するケースが挙げられます。

原因

文字列型の値は、10進数の数値として扱われます。つまり、0755(8進数)ではなく、755(10進数)として扱われます。
これにより、意図したパーミッションでディレクトリを作成することが出来ません。

対応

octdec関数で文字列型を8進数の整数へ変換することで、この問題を解消することができます。

<?php
$perm = '0755';
$mydir = '/var/dat/hogefuga';
mkdir($mydir, octdec($perm), true);

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0