umask

関数の概要

PHPのumask関数は、ファイルやディレクトリを新規作成する際のデフォルトのパーミッション(アクセス権限)マスクを設定または取得するために使用されます。
この関数を使うことで、新しく作成するファイルやディレクトリの権限に対して、どのビットを無効化(マスク)するかを制御できます。ファイル操作を行うプログラムで安全かつ意図したパーミッションを設定したい場合に便利です。

パラメータの説明

  • mask(省略可能): 整数値で、設定したいマスク値を指定します。8進数で指定するのが一般的です。
    このマスクは、新しいファイルやディレクトリのパーミッションビットからこの値のビットを除外します。指定しない場合は現在のマスク値が返されます。

戻り値

umask関数は、現在設定されているマスク値を返します。
パラメータを省略した場合は現在のマスクがそのまま返されます。
新たにマスクを設定した場合は、設定前のマスク値が返される仕様になっています。

使用例

基本的な使い方

<?php
// 現在のumaskを取得する
$currentMask = umask();
printf("現在のumask: %04on", $currentMask);
?>

この例では、現在のumask値を取得し、8進数表記で表示しています。

umaskを設定して新規ファイルを作成する例

<?php
// umaskを新たに設定する(例:0022)
$oldMask = umask(0022);

// 新規ファイルを作成(ファイルのパーミッションは0666からumaskを差し引いた値になる)
file_put_contents('example.txt', "ファイルの中身");

// umaskを元に戻す
umask($oldMask);
?>

このコードでは、umask(0022)を設定してファイルを作成しています。
新規ファイルは通常モード0666からumaskの0022が除かれ、最終的に0644のパーミッションとなります。

umask設定でディレクトリ作成のデフォルト権限をコントロールする例

<?php
// umask設定(例: 0077)によりファイル・ディレクトリの権限を制限
umask(0077);

// パーミッション0777でディレクトリ作成
mkdir('private_dir', 0777);

// 作成したディレクトリの実際のパーミッションは0700になる
?>

設定されたumask(0077)により、ユーザー以外のアクセスが全て制限されます。
mkdirのモード指定は0777ですが、umaskが適用されて結果は0700となります。

umask値を変更せずに取得する応用例

<?php
// umaskを取得するために値を一時的に変更し、すぐ戻すテクニック
$mask = umask(0);
umask($mask);
printf("現在のumaskは %04o ですn", $mask);
?>

umask関数は設定時に古い値を返すので、一時的に値を0にして古い値を取得し、すぐに元に戻すことで安全にumaskを知ることができます。

関連する関数

  • chmod(): 既存のファイルやディレクトリのパーミッションを変更する
  • mkdir(): 新規ディレクトリ作成(第二引数でモード指定可能)
  • fileperms(): ファイルやディレクトリのパーミッションを取得する
  • touch(): 新規ファイルの作成や更新日時の変更

まとめ

umask関数はPHPでファイルやディレクトリを作成するときのデフォルト権限を設定・取得するための重要な関数です。
適切に設定することで、ファイル作成時のアクセス制御を細かく管理でき、セキュリティや実務での運用性を向上させることができます。
特にサーバー環境で複数ユーザーがファイル共有する場合や、Webアプリケーションで安全なファイル運用を行いたい場合に便利です。
また、ファイル操作の基本となるchmodmkdirと組み合わせて使うと効果的です。
今回紹介した複数の使用例を参考に、実際の開発でumaskを適切に設定してみてください。