LoliPHP/helper/upload.php

107 行
2.8 KiB
PHP
Raw パーマリンク 通常表示 履歴

2022-03-27 02:41:32 +09:00
<?php
2022-10-25 18:09:58 +09:00
require_once("uuid.php");
2022-03-30 19:14:21 +09:00
2022-03-30 19:18:20 +09:00
function fileextension (string $fname): string {
2022-10-25 18:09:58 +09:00
$ext = strrpos($fname, ".");
2022-03-30 19:14:21 +09:00
2022-10-25 18:09:58 +09:00
return $ext === false ? "" : substr($fname, $ext + 1);
2022-03-30 19:14:21 +09:00
}
// ISOはfalseだったら、kB、MB、GB、TBになります。
// trueの場合、KiB、MiB、GiB、TiBです。
function humanreadablesize (int $byte, bool $iso=true): string {
$bit = $iso ? 1024 : 1000;
2022-10-25 18:09:58 +09:00
$res = "B";
2022-03-30 19:14:21 +09:00
$size = $byte;
if ($byte >= ($bit * $bit * $bit * $bit * $bit)) {
//dd(5);
$size = $byte / ($bit * $bit * $bit * $bit * $bit);
2022-10-25 18:09:58 +09:00
$res = $iso ? "TiB" : "TB";
2022-03-30 19:14:21 +09:00
}
else if ($byte >= ($bit * $bit * $bit * $bit)) {
//dd(4);
$size = $byte / ($bit * $bit * $bit * $bit);
2022-10-25 18:09:58 +09:00
$res = $iso ? "TiB" : "TB";
2022-03-30 19:14:21 +09:00
}
else if ($byte >= ($bit * $bit * $bit)) {
//dd(3);
$size = $byte / ($bit * $bit * $bit);
2022-10-25 18:09:58 +09:00
$res = $iso ? "GiB" : "GB";
2022-03-30 19:14:21 +09:00
}
else if ($byte >= ($bit * $bit)) {
//dd(2);
$size = $byte / ($bit * $bit);
2022-10-25 18:09:58 +09:00
$res = $iso ? "MiB" : "MB";
2022-03-30 19:14:21 +09:00
}
else if ($byte >= $bit) {
//dd(1);
$size = $byte / $bit;
2022-10-25 18:09:58 +09:00
$res = $iso ? "KiB" : "kB";
2022-03-30 19:14:21 +09:00
}
//dd($size);
2022-10-25 18:09:58 +09:00
return number_format($size, 2)." ".$res;
2022-03-30 19:14:21 +09:00
}
function getmimetype (string $fname): string|null {
$i = 0;
foreach ($_FILES as $v) {
2022-10-25 18:09:58 +09:00
if ($fname == $v["name"][$i]) {
return $v["type"][$i];
2022-03-30 19:14:21 +09:00
}
$i++;
}
return null;
}
function verifyupload (): array {
$res = [];
$i = 0;
foreach ($_FILES as $file) {
2022-10-25 18:09:58 +09:00
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;
2022-03-30 19:14:21 +09:00
}
2022-10-25 18:09:58 +09:00
$res[$file["name"][$i]] = $err;
2022-03-30 19:14:21 +09:00
}
$i++;
}
return $res;
}
function loliupload (array $files): bool {
2022-10-25 18:09:58 +09:00
$dir = __DIR__."/../public/static/upload/";
$fname = "";
2022-03-30 19:14:21 +09:00
if (!file_exists($dir)) {
mkdir($dir, 0777);
}
do {
2022-10-25 18:09:58 +09:00
$fname = uuid().".".fileextension($files["name"][0]);
2022-03-30 19:14:21 +09:00
} while (file_exists($dir.$fname));
2022-10-25 18:09:58 +09:00
if (move_uploaded_file($files["tmp_name"][0], $dir.$fname)) {
2022-03-30 19:14:21 +09:00
return true;
}
return false;
}
2022-03-27 02:41:32 +09:00
?>