107 行
2.8 KiB
PHP
107 行
2.8 KiB
PHP
<?php
|
||
require_once('uuid.php');
|
||
|
||
function fileextension (string $fname): string {
|
||
$ext = strrpos($fname, '.');
|
||
|
||
return $ext === false ? '' : substr($fname, $ext + 1);
|
||
}
|
||
|
||
// ISOはfalseだったら、kB、MB、GB、TBになります。
|
||
// trueの場合、KiB、MiB、GiB、TiBです。
|
||
function humanreadablesize (int $byte, bool $iso=true): string {
|
||
$bit = $iso ? 1024 : 1000;
|
||
$res = 'B';
|
||
$size = $byte;
|
||
|
||
if ($byte >= ($bit * $bit * $bit * $bit * $bit)) {
|
||
//dd(5);
|
||
$size = $byte / ($bit * $bit * $bit * $bit * $bit);
|
||
$res = $iso ? 'TiB' : 'TB';
|
||
}
|
||
else if ($byte >= ($bit * $bit * $bit * $bit)) {
|
||
//dd(4);
|
||
$size = $byte / ($bit * $bit * $bit * $bit);
|
||
$res = $iso ? 'TiB' : 'TB';
|
||
}
|
||
else if ($byte >= ($bit * $bit * $bit)) {
|
||
//dd(3);
|
||
$size = $byte / ($bit * $bit * $bit);
|
||
$res = $iso ? 'GiB' : 'GB';
|
||
}
|
||
else if ($byte >= ($bit * $bit)) {
|
||
//dd(2);
|
||
$size = $byte / ($bit * $bit);
|
||
$res = $iso ? 'MiB' : 'MB';
|
||
}
|
||
else if ($byte >= $bit) {
|
||
//dd(1);
|
||
$size = $byte / $bit;
|
||
$res = $iso ? 'KiB' : 'kB';
|
||
}
|
||
//dd($size);
|
||
|
||
return number_format($size, 2).' '.$res;
|
||
}
|
||
|
||
function getmimetype (string $fname): string|null {
|
||
$i = 0;
|
||
|
||
foreach ($_FILES as $v) {
|
||
if ($fname == $v['name'][$i]) {
|
||
return $v['type'][$i];
|
||
}
|
||
|
||
$i++;
|
||
}
|
||
|
||
return null;
|
||
}
|
||
|
||
function verifyupload (): array {
|
||
$res = [];
|
||
$i = 0;
|
||
|
||
foreach ($_FILES as $file) {
|
||
if ($file['error'][$i] != 0) {
|
||
$err = '';
|
||
switch ($file['error'][$i]) {
|
||
case 1: $err = 'php.iniでの「upload_max_filesize」値が超えています。ファイルサイズ:'.humanreadablesize($file['size'][$i]); break;
|
||
case 2: $err = 'HTMLフォームの「MAX_FILE_SIZE」値が超えています。ファイルサイズ:'.humanreadablesize($file['size'][$i]); break;
|
||
case 3: $err = 'ファイルの部分の失敗です。'; break;
|
||
case 4: $err = 'ファイルをアップロード出来ません。'; break;
|
||
case 5: $err = '不明'; break;
|
||
case 6: $err = '仮フォルダがありません。'; break;
|
||
case 7: $err = 'uploadフォルダに書き込めません。'; break;
|
||
case 8: $err = '拡張子がありません。'; break;
|
||
}
|
||
|
||
$res[$file['name'][$i]] = $err;
|
||
}
|
||
|
||
$i++;
|
||
}
|
||
|
||
return $res;
|
||
}
|
||
|
||
function loliupload (array $files): bool {
|
||
$dir = __DIR__.'/../public/static/upload/';
|
||
$fname = '';
|
||
|
||
if (!file_exists($dir)) {
|
||
mkdir($dir, 0777);
|
||
}
|
||
|
||
do {
|
||
$fname = uuid().'.'.fileextension($files['name'][0]);
|
||
} while (file_exists($dir.$fname));
|
||
|
||
if (move_uploaded_file($files['tmp_name'][0], $dir.$fname)) {
|
||
return true;
|
||
}
|
||
|
||
return false;
|
||
}
|
||
?>
|