a-blog cms PHP API Reference

UploadedFilesNormalizer
in package

$_FILES と POST のアップロードメタを、候補(1 ファイル = 1 候補)の配列へ正規化する。

image 型 / file 型で完全に同じだった前処理を一本化する。 移設前は両ブランチに同一のコードが写経されており(実測で 31 文が完全一致)、 片方だけ直すと不整合になる状態だった。

Table of Contents

Methods

candidates()  : array<int, array{_tmp_name: string, _name: string}>
$_FILES の単一形式 / 配列形式の差を吸収し、候補のリストへ変換する。
sanitizePathOptions()  : array{old: string, filename: string}|null
候補の `old` / `filename` を安全な形へ整え、拒否すべき候補を判定する。

Methods

candidates()

$_FILES の単一形式 / 配列形式の差を吸収し、候補のリストへ変換する。

public candidates(array<string, mixed> $file) : array<int, array{_tmp_name: string, _name: string}>

HTML の name="photo" は単一、name="photo[]" は配列で $_FILES に入る。 呼び出し側は候補数(count)だけを見れば両方を同じループで扱える。

Parameters
$file : array<string, mixed>

$_FILES[$fieldKey]

Return values
array<int, array{_tmp_name: string, _name: string}>

sanitizePathOptions()

候補の `old` / `filename` を安全な形へ整え、拒否すべき候補を判定する。

public sanitizePathOptions(string $old, string $filename, string $uploadName) : array{old: string, filename: string}|null

処理内容(移設前の image / file 両ブランチで同一だったもの):

  • @rawfilename 指定を「年月/元のファイル名」へ展開する(それ以外の @... は空にする)
  • null バイト混入対策として、先頭に空白等が付いた値を拒否する
  • ../ の連続をパスから除去する(ディレクトリトラバーサル対策の半正規化)
  • ファイル名が .htaccess で終わる候補を拒否する

Why not 候補の配列をまるごと受け渡さない: 候補の配列は image / file で持つキーが違う (image は width・largeWidth・tinyWidth・squareWidth 等、file は fileSize・downloadName 等)。 配列形状を引数の型に書くと呼び出し側の推論がその形へ狭まり、他のキーが「存在しない」と 誤検出される。実際に触る 3 つの値だけを受け取る純粋関数にする。

Parameters
$old : string

既存ファイルの相対パス(POST の {fd}@old)

$filename : string

ファイル名オプション(POST の {fd}@filename)

$uploadName : string

アップロードされた実ファイル名($_FILES の name)

Return values
array{old: string, filename: string}|null —

整えた値。拒否すべき場合は null(呼び出し側はこの候補の処理をスキップする)


        
On this page

Search results