Filesystem
extends Base
in package
implements
Filesystem
Table of Contents
Interfaces
Constants
- MAX_UNIQUE_FILE_PATH_ATTEMPTS = 10000
- uniqueFilePath() が採番を諦めるまでの最大試行回数
Properties
- $directoryMod : int
- $fileMod : int
Methods
- __construct() : mixed
- Base constructor
- archivesDir() : string
- ブログ・年月を考慮したパスを取得
- changeDir() : bool
- カレントディレクトリを変更する
- changeMod() : bool
- ファイルのパーミッションを変更する
- compress() : void
- 圧縮する
- copy() : bool
- ファイルをコピーする
- copyDirectory() : bool
- ディレクトリをコピーする
- exists() : bool
- ファイルの存在確認
- get() : string|false
- ファイルを取得する
- getFileList() : array<string|int, string>
- ディレクトリ内のファイル一覧を取得する
- getFileSize() : int
- ファイルサイズを取得する
- getImageSize() : array{0: int, 1: int, 2: int, 3: string, bits: int, channels: int, mime: string}|false
- 画像サイズを取得する
- getMimeType() : string|null
- ファイルのMIMEタイプを取得
- isDirectory() : bool
- 指定したパスがディレクトリかどうかを判定
- isExecutable() : bool
- 実行可能ファイルかどうか
- isFile() : bool
- 指定したパスがファイルかどうかを判定
- isLink() : bool
- ファイルがシンボリックリンクかどうか
- isReadable() : bool
- 読み込み可能かどうか
- isWritable() : bool
- 書き込み可能かどうか
- lastModified() : int
- ファイルの更新日時を取得する
- makeDirectory() : bool
- ディレクトリを作成する
- mbBasename() : string
- move() : bool
- ファイルを移動する
- put() : int
- ファイルを保存する
- readStream() : resource|false
- ファイルをストリームで読み込む
- remove() : bool
- ファイルを削除する
- removeDirectory() : bool
- ディレクトリを削除する
- removeIllegalCharacters() : string
- ファイル名から不正な文字を削除
- safeRealpath() : string|false
- realpath の安全なラッパー関数
- setDirectoryMod() : void
- setFileMod() : void
- uniqueFilePath() : string
- ユニークなファイルパスを排他的に確保する
- unzip() : void
- 解凍する
- validateDirectoryTraversal() : string
- 指定されたファイル名がディレクトリトラバーサルを含まないか検証し、絶対パスを返します。
- validateDirectoryTraversalPath() : bool
- ディレクトリ・トラバーサル対応のため、パスが公開領域のものか確認する
- withUniqueFilePath() : T
- ユニークなファイルパスを排他的に確保した上でコールバックを実行する
- convertStrToLocal() : string
- createExclusively() : bool
- 指定したパスにファイルが存在しない場合に限り、空ファイルを排他的に作成する
- buildUniqueFilePathCandidate() : string
- uniqueFilePath() の候補パスを組み立てる
Constants
MAX_UNIQUE_FILE_PATH_ATTEMPTS
uniqueFilePath() が採番を諦めるまでの最大試行回数
private
mixed
MAX_UNIQUE_FILE_PATH_ATTEMPTS
= 10000
createExclusively() が「既に存在する(衝突)」以外の理由(保存先ディレクトリが 無い等)で失敗し続けた場合、番号を変えても解決しないため無限ループになりうる。 その保険として上限を設ける。
Properties
$directoryMod
protected
int
$directoryMod
= 0
$fileMod
protected
int
$fileMod
= 0
Methods
__construct()
Base constructor
public
__construct() : mixed
archivesDir()
ブログ・年月を考慮したパスを取得
public
archivesDir() : string
Return values
stringchangeDir()
カレントディレクトリを変更する
public
changeDir(string $path) : bool
Parameters
- $path : string
Return values
boolchangeMod()
ファイルのパーミッションを変更する
public
changeMod(string $path[, int|null $mode = null ]) : bool
Parameters
- $path : string
- $mode : int|null = null
Return values
boolcompress()
圧縮する
public
compress(string $source, string $destination[, string $root = '' ][, array<string|int, mixed> $exclude = [] ]) : void
Parameters
- $source : string
- $destination : string
- $root : string = ''
- $exclude : array<string|int, mixed> = []
copy()
ファイルをコピーする
public
copy(string $from, string $to) : bool
Parameters
- $from : string
- $to : string
Return values
boolcopyDirectory()
ディレクトリをコピーする
public
copyDirectory(string $from, string $to) : bool
Parameters
- $from : string
- $to : string
Return values
boolexists()
ファイルの存在確認
public
exists(string $path) : bool
Parameters
- $path : string
Return values
boolget()
ファイルを取得する
public
get(string $path[, string $publicDir = '' ]) : string|false
Parameters
- $path : string
-
取得したいファイルパス
- $publicDir : string = ''
-
設定されたディレクトリ以下に取得できるファイルを制限(index.phpからの相対パス可)
Tags
Return values
string|falsegetFileList()
ディレクトリ内のファイル一覧を取得する
public
getFileList(string $path) : array<string|int, string>
Parameters
- $path : string
Return values
array<string|int, string>getFileSize()
ファイルサイズを取得する
public
getFileSize(string $path) : int
Parameters
- $path : string
Return values
intgetImageSize()
画像サイズを取得する
public
getImageSize(string $path[, array<string|int, mixed> &$info = [] ]) : array{0: int, 1: int, 2: int, 3: string, bits: int, channels: int, mime: string}|false
Parameters
- $path : string
- $info : array<string|int, mixed> = []
Return values
array{0: int, 1: int, 2: int, 3: string, bits: int, channels: int, mime: string}|falsegetMimeType()
ファイルのMIMEタイプを取得
public
getMimeType(string $path) : string|null
Parameters
- $path : string
Return values
string|nullisDirectory()
指定したパスがディレクトリかどうかを判定
public
isDirectory(string $path) : bool
Parameters
- $path : string
Return values
boolisExecutable()
実行可能ファイルかどうか
public
isExecutable(string $path) : bool
Parameters
- $path : string
Return values
boolisFile()
指定したパスがファイルかどうかを判定
public
isFile(string $path) : bool
Parameters
- $path : string
Return values
boolisLink()
ファイルがシンボリックリンクかどうか
public
isLink(string $path) : bool
Parameters
- $path : string
Return values
boolisReadable()
読み込み可能かどうか
public
isReadable(string $path) : bool
Parameters
- $path : string
Return values
boolisWritable()
書き込み可能かどうか
public
isWritable(string $path) : bool
Parameters
- $path : string
Return values
boollastModified()
ファイルの更新日時を取得する
public
lastModified(string $path) : int
Parameters
- $path : string
Return values
int —Unix time stamp
makeDirectory()
ディレクトリを作成する
public
makeDirectory(string $path) : bool
Parameters
- $path : string
Return values
boolmbBasename()
public
mbBasename(string $path[, null|string $suffix = null ]) : string
Parameters
- $path : string
- $suffix : null|string = null
Return values
stringmove()
ファイルを移動する
public
move(string $from, string $to) : bool
Parameters
- $from : string
- $to : string
Return values
boolput()
ファイルを保存する
public
put(string $path, string $content) : int
Parameters
- $path : string
- $content : string
Return values
intreadStream()
ファイルをストリームで読み込む
public
readStream(string $path) : resource|false
Parameters
- $path : string
Return values
resource|falseremove()
ファイルを削除する
public
remove(string $path) : bool
Parameters
- $path : string
Return values
boolremoveDirectory()
ディレクトリを削除する
public
removeDirectory(string $dir) : bool
Parameters
- $dir : string
Return values
boolremoveIllegalCharacters()
ファイル名から不正な文字を削除
public
removeIllegalCharacters(string $source) : string
Parameters
- $source : string
Return values
stringsafeRealpath()
realpath の安全なラッパー関数
public
safeRealpath(string $path) : string|false
Parameters
- $path : string
Return values
string|falsesetDirectoryMod()
public
setDirectoryMod(int $mod) : void
Parameters
- $mod : int
setFileMod()
public
setFileMod(int $mod) : void
Parameters
- $mod : int
uniqueFilePath()
ユニークなファイルパスを排他的に確保する
public
uniqueFilePath(string $original[, string $prefix = '' ][, int $num = 0 ]) : string
候補パスへの排他的な作成(createExclusively)に成功するまで採番をやり直すため、 複数プロセスが同時に呼び出しても同じパスを取り合うことがない。確保できたパスには 空ファイルが作成されるため、呼び出し側は続けてそのパスへ実際の内容を書き込むこと。
Parameters
- $original : string
- $prefix : string = ''
- $num : int = 0
Tags
Return values
stringunzip()
解凍する
public
unzip(string $source, string $destination) : void
Parameters
- $source : string
- $destination : string
validateDirectoryTraversal()
指定されたファイル名がディレクトリトラバーサルを含まないか検証し、絶対パスを返します。
public
validateDirectoryTraversal(string $baseDir, string $fileName) : string
Parameters
- $baseDir : string
- $fileName : string
Return values
stringvalidateDirectoryTraversalPath()
ディレクトリ・トラバーサル対応のため、パスが公開領域のものか確認する
public
validateDirectoryTraversalPath(string $path[, string $publicDir = '' ][, bool $checkExists = true ]) : bool
Parameters
- $path : string
- $publicDir : string = ''
- $checkExists : bool = true
Return values
boolwithUniqueFilePath()
ユニークなファイルパスを排他的に確保した上でコールバックを実行する
public
withUniqueFilePath(string $original, string $prefix, callable(string $path): T $callback) : T
uniqueFilePath() で確保したパスへの書き込みをコールバックに任せ、コールバックが 例外を投げた場合は確保したパス(空ファイル)を削除してから例外を再送出する。 これにより、呼び出し側で個別に try/catch を書かなくても「予約したが使われなかった 空ファイルが残る」事態を防げる。
Parameters
- $original : string
- $prefix : string
- $callback : callable(string $path): T
Tags
Return values
TconvertStrToLocal()
protected
convertStrToLocal(string $path) : string
Parameters
- $path : string
Return values
stringcreateExclusively()
指定したパスにファイルが存在しない場合に限り、空ファイルを排他的に作成する
protected
createExclusively(string $path) : bool
fopen(..., 'x') が失敗する理由は「既に存在する(衝突)」だけでなく、保存先 ディレクトリが無い・権限が無い等の構造的な問題でも起こりうる。後者は採番を やり直しても解決しないため、区別せず false を返すと uniqueFilePath() が 無限に採番をやり直しメモリを食い潰す(実際に発生した障害)。作成失敗後に 対象パスが実在するかを確認し、実在しなければ構造的な失敗とみなして例外を 投げる。この確認は fopen 自体の結果を検査するだけなので新たな競合は生まない (実在すれば必ず先に何らかのプロセスが排他作成に成功した後であり、 その場合のみ衝突として呼び出し元に採番のやり直しを促す)。
Parameters
- $path : string
Tags
Return values
bool —作成できた場合は true、既に存在する場合(=先に他プロセスが確保した場合)は false
buildUniqueFilePathCandidate()
uniqueFilePath() の候補パスを組み立てる
private
buildUniqueFilePathCandidate(string $original, int $num) : string
Parameters
- $original : string
- $num : int