a-blog cms PHP API Reference

Filesystem extends Base
in package
implements Filesystem

Table of Contents

Interfaces

Filesystem

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
string

changeDir()

カレントディレクトリを変更する

public changeDir(string $path) : bool
Parameters
$path : string
Return values
bool

changeMod()

ファイルのパーミッションを変更する

public changeMod(string $path[, int|null $mode = null ]) : bool
Parameters
$path : string
$mode : int|null = null
Return values
bool

compress()

圧縮する

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
bool

copyDirectory()

ディレクトリをコピーする

public copyDirectory(string $from, string $to) : bool
Parameters
$from : string
$to : string
Return values
bool

exists()

ファイルの存在確認

public exists(string $path) : bool
Parameters
$path : string
Return values
bool

get()

ファイルを取得する

public get(string $path[, string $publicDir = '' ]) : string|false
Parameters
$path : string

取得したいファイルパス

$publicDir : string = ''

設定されたディレクトリ以下に取得できるファイルを制限(index.phpからの相対パス可)

Tags
throws
RuntimeException
Return values
string|false

getFileList()

ディレクトリ内のファイル一覧を取得する

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
int

getImageSize()

画像サイズを取得する

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}|false

getMimeType()

ファイルのMIMEタイプを取得

public getMimeType(string $path) : string|null
Parameters
$path : string
Return values
string|null

isDirectory()

指定したパスがディレクトリかどうかを判定

public isDirectory(string $path) : bool
Parameters
$path : string
Return values
bool

isExecutable()

実行可能ファイルかどうか

public isExecutable(string $path) : bool
Parameters
$path : string
Return values
bool

isFile()

指定したパスがファイルかどうかを判定

public isFile(string $path) : bool
Parameters
$path : string
Return values
bool

ファイルがシンボリックリンクかどうか

public isLink(string $path) : bool
Parameters
$path : string
Return values
bool

isReadable()

読み込み可能かどうか

public isReadable(string $path) : bool
Parameters
$path : string
Return values
bool

isWritable()

書き込み可能かどうか

public isWritable(string $path) : bool
Parameters
$path : string
Return values
bool

lastModified()

ファイルの更新日時を取得する

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
bool

mbBasename()

public mbBasename(string $path[, null|string $suffix = null ]) : string
Parameters
$path : string
$suffix : null|string = null
Return values
string

move()

ファイルを移動する

public move(string $from, string $to) : bool
Parameters
$from : string
$to : string
Return values
bool

put()

ファイルを保存する

public put(string $path, string $content) : int
Parameters
$path : string
$content : string
Return values
int

readStream()

ファイルをストリームで読み込む

public readStream(string $path) : resource|false
Parameters
$path : string
Return values
resource|false

remove()

ファイルを削除する

public remove(string $path) : bool
Parameters
$path : string
Return values
bool

removeDirectory()

ディレクトリを削除する

public removeDirectory(string $dir) : bool
Parameters
$dir : string
Return values
bool

removeIllegalCharacters()

ファイル名から不正な文字を削除

public removeIllegalCharacters(string $source) : string
Parameters
$source : string
Return values
string

safeRealpath()

realpath の安全なラッパー関数

public safeRealpath(string $path) : string|false
Parameters
$path : string
Return values
string|false

setDirectoryMod()

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
throws
RuntimeException

試行回数の上限に達した場合

Return values
string

unzip()

解凍する

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
string

validateDirectoryTraversalPath()

ディレクトリ・トラバーサル対応のため、パスが公開領域のものか確認する

public validateDirectoryTraversalPath(string $path[, string $publicDir = '' ][, bool $checkExists = true ]) : bool
Parameters
$path : string
$publicDir : string = ''
$checkExists : bool = true
Return values
bool

withUniqueFilePath()

ユニークなファイルパスを排他的に確保した上でコールバックを実行する

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
template
Return values
T

convertStrToLocal()

protected convertStrToLocal(string $path) : string
Parameters
$path : string
Return values
string

createExclusively()

指定したパスにファイルが存在しない場合に限り、空ファイルを排他的に作成する

protected createExclusively(string $path) : bool

fopen(..., 'x') が失敗する理由は「既に存在する(衝突)」だけでなく、保存先 ディレクトリが無い・権限が無い等の構造的な問題でも起こりうる。後者は採番を やり直しても解決しないため、区別せず false を返すと uniqueFilePath() が 無限に採番をやり直しメモリを食い潰す(実際に発生した障害)。作成失敗後に 対象パスが実在するかを確認し、実在しなければ構造的な失敗とみなして例外を 投げる。この確認は fopen 自体の結果を検査するだけなので新たな競合は生まない (実在すれば必ず先に何らかのプロセスが排他作成に成功した後であり、 その場合のみ衝突として呼び出し元に採番のやり直しを促す)。

Parameters
$path : string
Tags
throws
RuntimeException

存在しないにもかかわらず作成に失敗した場合(保存先ディレクトリが無い等)

Return values
bool

作成できた場合は true、既に存在する場合(=先に他プロセスが確保した場合)は false

buildUniqueFilePathCandidate()

uniqueFilePath() の候補パスを組み立てる

private buildUniqueFilePathCandidate(string $original, int $num) : string
Parameters
$original : string
$num : int
Return values
string

        
On this page

Search results