BcFileUploader
in package
uses
BcContainerTrait
Class BcFileUploader
Table of Contents
Properties
- $deniedExts : array<string|int, mixed>
- サーバ上で実行され得る拡張子の禁止リスト
- $existsCheckDirs : array<string|int, mixed>
- 保存時にファイルの重複確認を行うディレクトリ
- $imgExts : array<string|int, mixed>
- 画像拡張子
- $savePath : array<string|int, string>
- 保存ディレクトリ
- $Session : Session
- Session
- $settings : array<string|int, mixed>
- 設定
- $table : Table
- Table
- $tmpId : string
- 一時ID
- $uploaded : array<string|int, mixed>
- アップロードしたかどうか
- $bcUploadId : int
- 同一テーブルのデータを複数扱う場合の競合対策のための固有ID
- $uploadingFiles : array<string|int, mixed>
- uploadingFiles
Methods
- copyImage() : bool
- 画像をコピーする
- copyImages() : void
- 画像をコピーする
- deleteExistingFile() : mixed
- アップロード中のフィールドにおいて既に存在する画像を削除する
- deleteExistingFiles() : void
- アップロード中のフィールドにおいて既に存在する画像を全て削除する
- deleteFile() : bool
- ファイルを削除する
- deleteFiles() : mixed
- 削除対象かチェックしながらファイル群を削除する
- deleteFileWhileChecking() : mixed
- 削除対象かチェックしながらファイルを削除する
- getBasename() : string
- ファイル名からベースファイル名を取得する
- getExtFromUpload() : string|false
- アップロードされたファイルの拡張子を取得する
- getFieldBasename() : mixed
- フィールドベースのファイル名を取得する
- getFileName() : string
- ベースファイル名からプレフィックス付のファイル名を取得する
- getImageSize() : mixed
- 画像のサイズを取得
- getSaveDir() : string|bool
- 保存先のフォルダを設定し、取得する
- getSaveFileName() : string
- 保存用ファイル名を取得する
- getSaveTmpFileName() : string
- 保存用ファイル名を取得する
- getService() : array<string|int, mixed>|mixed|object
- Get Service
- getSettings() : array<string|int, mixed>
- configの初期設定を取得する
- getUniqueFileName() : string
- 一意のファイル名を取得する
- getUploadingFiles() : array<string|int, mixed>
- 実際にアップロードされた情報を取得する
- hasService() : bool
- Has Service
- initialize() : void
- Initialize
- isDeniedFile() : bool
- 実行され得る拒否拡張子を含むファイル名か判定する
- isFileExists() : bool
- ファイルが重複しているかをチェックする
- isUploadable() : bool
- アップロード可能か判定
- isUploaded() : false|mixed
- アップロードされているかどうか
- isValidFileName() : bool
- 保存済みファイル名として妥当な文字列か判定する
- moveFileSessionToTmp() : bool
- セッションに保存されたファイルデータをファイルとして保存する
- putDenyExecutionHtaccess() : void
- アップロードディレクトリにスクリプト実行を禁止する .htaccess を設置する
- renameToBasenameField() : bool|mixed
- ファイル名をフィールド値ベースのファイル名に変更する
- renameToBasenameFields() : void
- 全フィールドのファイル名をフィールド値ベースのファイル名に変更する
- resetUploaded() : mixed
- アップロード状態をリセット
- resizeImage() : bool
- 画像ファイルをコピーする リサイズ可能
- rollbackFile() : mixed
- ファイルアップロード対象のデータを元に戻す
- rotateImage() : bool
- 画像をExif情報を元に正しい確度に回転する
- saveFile() : string|false
- ファイルを保存する
- saveFiles() : mixed
- ファイル群を保存する
- saveFileWhileChecking() : array<string|int, mixed>|false
- 保存対象かチェックしながらファイルを保存する
- saveTmpFile() : string|false
- ファイルを保存する
- saveTmpFiles() : false|EntityInterface
- 一時ファイルとして保存する
- setUploadingFiles() : void
- 実際にアップロードされた情報を保持する
- setupRequestData() : mixed
- リクエストされたデータを処理しやすいようにセットアップする $data は参照渡し
- setupTmpData() : mixed
- リクエストされたデータを処理しやすいようにセットアップする $data は参照渡し
- getCoreFrontThemeSaveDir() : string|false
- コアフロントテーマの files 保存ディレクトリを取得する
- getExistsCheckDirs() : array<string|int, mixed>
- 保存時にファイルの重複確認を行うディレクトリのリストを取得する
Properties
$deniedExts
サーバ上で実行され得る拡張子の禁止リスト
public
array<string|int, mixed>
$deniedExts
= ['php', 'php3', 'php4', 'php5', 'php7', 'php8', 'phtml', 'phps', 'pht', 'phar', 'cgi', 'pl', 'py', 'rb', 'sh', 'bash', 'asp', 'aspx', 'jsp', 'jspx', 'exe', 'bat', 'cmd', 'com', 'msi', 'htaccess', 'htpasswd']
各機能側の許可リスト設定(カスタムフィールドの拡張子設定や allowedAdmin 等)に関わらず、 基盤側で無条件にブロックし、webroot への Web シェル設置(RCE)を防ぐ。
$existsCheckDirs
保存時にファイルの重複確認を行うディレクトリ
public
array<string|int, mixed>
$existsCheckDirs
= []
$imgExts
画像拡張子
public
array<string|int, mixed>
$imgExts
= ['gif', 'jpg', 'jpeg', 'jpe', 'jfif', 'png']
$savePath
保存ディレクトリ
public
array<string|int, string>
$savePath
= ''
$Session
Session
public
Session
$Session
= null
$settings
設定
public
array<string|int, mixed>
$settings
= null
$table
Table
public
Table
$table
= null
$tmpId
一時ID
public
string
$tmpId
= null
$uploaded
アップロードしたかどうか
public
array<string|int, mixed>
$uploaded
= false
afterSave のリネーム判定に利用 モデルごとに設定する
$bcUploadId
同一テーブルのデータを複数扱う場合の競合対策のための固有ID
private
int
$bcUploadId
= 1
$uploadingFiles
uploadingFiles
private
array<string|int, mixed>
$uploadingFiles
= []
Methods
copyImage()
画像をコピーする
public
copyImage(array<string|int, mixed> $setting, mixed $file) : bool
Parameters
- $setting : array<string|int, mixed>
-
画像保存対象フィールドの設定
- $file : mixed
Tags
Return values
boolcopyImages()
画像をコピーする
public
copyImages(array<string|int, mixed> $setting, array<string|int, mixed> $file) : void
Parameters
- $setting : array<string|int, mixed>
- $file : array<string|int, mixed>
Tags
deleteExistingFile()
アップロード中のフィールドにおいて既に存在する画像を削除する
public
deleteExistingFile(string $name, array<string|int, mixed> $file, EntityInterface $entity[, bool $force = false ]) : mixed
Parameters
- $name : string
- $file : array<string|int, mixed>
- $entity : EntityInterface
- $force : bool = false
Tags
deleteExistingFiles()
アップロード中のフィールドにおいて既に存在する画像を全て削除する
public
deleteExistingFiles(EntityInterface $oldEntity[, bool $force = false ]) : void
Parameters
- $oldEntity : EntityInterface
- $force : bool = false
Tags
deleteFile()
ファイルを削除する
public
deleteFile(array<string|int, mixed> $setting, string $file[, bool $delImagecopy = true ]) : bool
Parameters
- $setting : array<string|int, mixed>
-
保存対象フィールドの設定
- prefix : 対象のファイルの接頭辞
- suffix : 対象のファイルの接尾辞
- $file : string
- $delImagecopy : bool = true
Tags
Return values
booldeleteFiles()
削除対象かチェックしながらファイル群を削除する
public
deleteFiles(mixed $oldEntity, EntityInterface $newEntity[, bool $force = false ]) : mixed
Parameters
- $oldEntity : mixed
- $newEntity : EntityInterface
- $force : bool = false
Tags
deleteFileWhileChecking()
削除対象かチェックしながらファイルを削除する
public
deleteFileWhileChecking(array<string|int, mixed> $setting, array<string|int, mixed> $file, EntityInterface $newEntity, EntityInterface $oldEntity[, mixed $force = false ]) : mixed
Parameters
- $setting : array<string|int, mixed>
- $file : array<string|int, mixed>
- $newEntity : EntityInterface
- $oldEntity : EntityInterface
- $force : mixed = false
Tags
getBasename()
ファイル名からベースファイル名を取得する
public
getBasename(array<string|int, mixed> $setting, string $filename) : string
Parameters
- $setting : array<string|int, mixed>
- $filename : string
Tags
Return values
stringgetExtFromUpload()
アップロードされたファイルの拡張子を取得する
public
static getExtFromUpload(string|null $type, string|null $fileName) : string|false
ファイル名に拡張子が含まれる場合はそれを正とし(小文字に統一)、 拡張子が無い場合のみクライアントが申告した Content-Type から導出する。 Content-Type を優先すると、拡張子と異なる種類のファイルとして扱われてしまう
Parameters
- $type : string|null
-
Content-Type
- $fileName : string|null
-
ファイル名
Tags
Return values
string|falsegetFieldBasename()
フィールドベースのファイル名を取得する
public
getFieldBasename(array<string|int, mixed> $setting, array<string|int, mixed> $file, EntityInterface $entity) : mixed
Parameters
- $setting : array<string|int, mixed>
-
- namefield 対象となるファイルのベースの名前が格納されたフィールド名
- nameformat ファイル名のフォーマット
- name ファイル名の後に追加する名前
- nameadd nameを追加しないか
- $file : array<string|int, mixed>
-
ファイルの拡張子
- $entity : EntityInterface
Tags
Return values
mixed —false / string
getFileName()
ベースファイル名からプレフィックス付のファイル名を取得する
public
getFileName(array<string|int, mixed> $setting, string $filename) : string
Parameters
- $setting : array<string|int, mixed>
- $filename : string
Tags
Return values
stringgetImageSize()
画像のサイズを取得
public
getImageSize(string $path) : mixed
指定したパスにある画像のサイズを配列(高さ、横幅)で返す
Parameters
- $path : string
-
画像のパス
Tags
Return values
mixed —array / false
getSaveDir()
保存先のフォルダを設定し、取得する
public
getSaveDir([bool $isTheme = false ][, bool $limited = false ]) : string|bool
Parameters
- $isTheme : bool = false
- $limited : bool = false
Tags
Return values
string|boolgetSaveFileName()
保存用ファイル名を取得する
public
getSaveFileName(array<string|int, mixed> $setting, array<string|int, mixed> $file) : string
Parameters
- $setting : array<string|int, mixed>
- $file : array<string|int, mixed>
Tags
Return values
stringgetSaveTmpFileName()
保存用ファイル名を取得する
public
getSaveTmpFileName(mixed $setting, mixed $file, EntityInterface $entity) : string
Parameters
- $setting : mixed
- $file : mixed
- $entity : EntityInterface
Tags
Return values
stringgetService()
Get Service
public
getService(mixed $service) : array<string|int, mixed>|mixed|object
Parameters
- $service : mixed
Tags
Return values
array<string|int, mixed>|mixed|objectgetSettings()
configの初期設定を取得する
public
getSettings([array<string|int, mixed> $config = [] ]) : array<string|int, mixed>
Parameters
- $config : array<string|int, mixed> = []
Tags
Return values
array<string|int, mixed>getUniqueFileName()
一意のファイル名を取得する
public
getUniqueFileName(array<string|int, mixed> $setting, array<string|int, mixed> $file, EntityInterface $entity) : string
Parameters
- $setting : array<string|int, mixed>
-
一意の名前を取得する元となるフィールド名
- $file : array<string|int, mixed>
-
対象のファイル
- $entity : EntityInterface
Tags
Return values
stringgetUploadingFiles()
実際にアップロードされた情報を取得する
public
getUploadingFiles(mixed $bcUploadId) : array<string|int, mixed>
Parameters
- $bcUploadId : mixed
Tags
Return values
array<string|int, mixed>hasService()
Has Service
public
hasService(mixed $service) : bool
Parameters
- $service : mixed
Tags
Return values
boolinitialize()
Initialize
public
initialize(array<string|int, mixed> $config, Table $table) : void
Parameters
- $config : array<string|int, mixed>
- $table : Table
Tags
isDeniedFile()
実行され得る拒否拡張子を含むファイル名か判定する
public
isDeniedFile(string $fileName) : bool
多重拡張子(例: shell.php.jpg)でも検出できるよう、ファイル名のドット区切り全要素を検査する。
Parameters
- $fileName : string
Tags
Return values
boolisFileExists()
ファイルが重複しているかをチェックする
public
isFileExists(string $fileName) : bool
Parameters
- $fileName : string
Tags
Return values
boolisUploadable()
アップロード可能か判定
public
isUploadable(array<string|int, mixed>|string $fileType, string $contentType, mixed $file) : bool
Parameters
- $fileType : array<string|int, mixed>|string
- $contentType : string
- $file : mixed
Tags
Return values
boolisUploaded()
アップロードされているかどうか
public
isUploaded() : false|mixed
Tags
Return values
false|mixedisValidFileName()
保存済みファイル名として妥当な文字列か判定する
public
static isValidFileName(string $fileName) : bool
ディレクトリ区切り(/ \)、引用符、山括弧、制御文字、.. を含む値は不正とみなす。
Parameters
- $fileName : string
Tags
Return values
boolmoveFileSessionToTmp()
セッションに保存されたファイルデータをファイルとして保存する
public
moveFileSessionToTmp(ArrayObject $data, string $fieldName) : bool
Parameters
- $data : ArrayObject
- $fieldName : string
Tags
Return values
boolputDenyExecutionHtaccess()
アップロードディレクトリにスクリプト実行を禁止する .htaccess を設置する
public
putDenyExecutionHtaccess(string $dir) : void
webroot/files 配下は .gitignore 対象でリポジトリに同梱できないため、 ディレクトリ作成時にフレームクワークが生成する。Apache でのみ有効(nginx 等では無視され実害なし)。 PHP 側の拡張子ハードブロックと併用する多層防御。
Parameters
- $dir : string
Tags
renameToBasenameField()
ファイル名をフィールド値ベースのファイル名に変更する
public
renameToBasenameField(array<string|int, mixed> $setting, array<string|int, mixed> $file, EntityInterface $entity[, bool $copy = false ]) : bool|mixed
Parameters
- $setting : array<string|int, mixed>
- $file : array<string|int, mixed>
- $entity : EntityInterface
- $copy : bool = false
Tags
Return values
bool|mixedrenameToBasenameFields()
全フィールドのファイル名をフィールド値ベースのファイル名に変更する
public
renameToBasenameFields(EntityInterface $entity[, bool $copy = false ]) : void
Parameters
- $entity : EntityInterface
- $copy : bool = false
Tags
resetUploaded()
アップロード状態をリセット
public
resetUploaded() : mixed
Tags
resizeImage()
画像ファイルをコピーする リサイズ可能
public
resizeImage(string $source, string $distination[, int $width = 0 ][, int $height = 0 ][, bool $thumb = false ]) : bool
Parameters
- $source : string
-
コピー元のパス
- $distination : string
-
コピー先のパス
- $width : int = 0
-
横幅
- $height : int = 0
-
高さ
- $thumb : bool = false
-
サムネイルとしてコピーするか
Tags
Return values
boolrollbackFile()
ファイルアップロード対象のデータを元に戻す
public
rollbackFile(EntityInterface $entity[, bool $force = false ]) : mixed
Parameters
- $entity : EntityInterface
- $force : bool = false
-
エラーがなくても強制実行する場合に true を指定
Tags
rotateImage()
画像をExif情報を元に正しい確度に回転する
public
rotateImage(mixed $file) : bool
Parameters
- $file : mixed
Tags
Return values
boolsaveFile()
ファイルを保存する
public
saveFile(array<string|int, mixed> $setting, array<string|int, mixed> $file) : string|false
Parameters
- $setting : array<string|int, mixed>
-
画像保存対象フィールドの設定
- $file : array<string|int, mixed>
Tags
Return values
string|false —ファイル名
saveFiles()
ファイル群を保存する
public
saveFiles(EntityInterface $entity) : mixed
Parameters
- $entity : EntityInterface
Tags
saveFileWhileChecking()
保存対象かチェックしながらファイルを保存する
public
saveFileWhileChecking(array<string|int, mixed> $setting, array<string|int, mixed> $file, mixed $entity[, array<string|int, mixed> $options = [] ]) : array<string|int, mixed>|false
Parameters
- $setting : array<string|int, mixed>
- $file : array<string|int, mixed>
- $entity : mixed
- $options : array<string|int, mixed> = []
-
- deleteTmpFiles : 一時ファイルを削除するかどうか
Tags
Return values
array<string|int, mixed>|false —$file
saveTmpFile()
ファイルを保存する
public
saveTmpFile(array<string|int, mixed> $setting, array<string|int, mixed> $file, EntityInterface $entity) : string|false
Parameters
- $setting : array<string|int, mixed>
-
画像保存対象フィールドの設定
- $file : array<string|int, mixed>
- $entity : EntityInterface
Tags
Return values
string|false —ファイル名
saveTmpFiles()
一時ファイルとして保存する
public
saveTmpFiles(array<string|int, mixed> $data, string $tmpId) : false|EntityInterface
Parameters
- $data : array<string|int, mixed>
- $tmpId : string
Tags
Return values
false|EntityInterfacesetUploadingFiles()
実際にアップロードされた情報を保持する
public
setUploadingFiles(array<string|int, mixed> $files, mixed $bcUploadId) : void
Parameters
- $files : array<string|int, mixed>
- $bcUploadId : mixed
Tags
setupRequestData()
リクエストされたデータを処理しやすいようにセットアップする $data は参照渡し
public
setupRequestData(array<string|int, mixed>|ArrayObject $data) : mixed
Parameters
- $data : array<string|int, mixed>|ArrayObject
Tags
setupTmpData()
リクエストされたデータを処理しやすいようにセットアップする $data は参照渡し
public
setupTmpData(ArrayObject|array<string|int, mixed> $data) : mixed
Parameters
- $data : ArrayObject|array<string|int, mixed>
Tags
getCoreFrontThemeSaveDir()
コアフロントテーマの files 保存ディレクトリを取得する
private
getCoreFrontThemeSaveDir() : string|false
管理画面からファイルを操作する場合など getSaveDir(true) が正しいテーマを 参照できないケースのフォールバックとして使用する (初期データのアイキャッチはコアフロントテーマ側に保存されているため)
Return values
string|falsegetExistsCheckDirs()
保存時にファイルの重複確認を行うディレクトリのリストを取得する
private
getExistsCheckDirs() : array<string|int, mixed>