「ディレクトリ」タグアーカイブ

(PHP)ディレクトリを再帰的に作成

PHPでディレクトリを再帰的に作成するときのメモです。

‘dir1/dir2/dir3’のような深いディレクトリを一度で作成する場合はmkdirに第3引数にtrueをつけて使用します。

$dirName = 'dir1/dir2/dir3';
$defaultUmaskNum = umask();
umask(0);
mkdir($dirName,0755,true);
umask($defaultUmaskNum);

mkdirの第2引数はパーミッションの設定です。数値で指定します。’0755’などのように文字列で指定するとエラーは出なくとも、おかしなパーミッションになることがあります。
また、umaskはデフォルトのパーミッションの設定です。mkdirに第2引数からumaskの値を引いた値が設定されるので今回は便宜的に0にして、処理後に戻しています。
PHP公式ではパーミッションの設定はumaskを変更するのではなく、chmodが推奨されていますが、作成される全てのディレクトリのパーミッションを同時指定することはできません。

異なる階層から、ライブラリを読み込む (PHP)

特定のディレクトリにライブラリ等を保存している場合、異なる階層から、includeしたいときがあります。
例えば、
/home/example/www
以下に
/lib
/a/b
/c
などがあり、/a/bや/cなど階層が異なるディレクトリにあるPHPスクリプトから/lib内のライブラリを読み込みたい場合は、

<?php
$lib = $_SERVER['DOCUMENT_ROOT'] . "/lib";
set_include_path(get_include_path() . PATH_SEPARATOR . $lib);
include( "hoge.php" );
?>

でincludeすることができます。
MobableTypeなど、記事をディレクトリで管理する場合などで、共通に使用できます。