ファイルアップロード

このコミットが含まれているのは:
守矢諏訪子 2022-03-30 19:14:21 +09:00
コミット ec12ccc852
4個のファイルの変更136行の追加1行の削除

ファイルの表示

@ -1,3 +1,106 @@
<?php
function loliupload () {}
require_once('uuid.php');
function fileextension ($fname) {
$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;
}
?>

12
helper/uuid.php ノーマルファイル
ファイルの表示

@ -0,0 +1,12 @@
<?php
function uuid () {
return sprintf(
'%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand(0, 0xffff), mt_rand(0, 0xffff), // 32bitlow
mt_rand(0, 0xffff), // 16bitmid
mt_rand(0, 0x0fff) | 0x4000, // 16bithigh
mt_rand(0, 0x3fff) | 0x8000, // 16bit|8bithigh|low
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff) // 48bitnode
);
}
?>

16
src/upload/index.php ノーマルファイル
ファイルの表示

@ -0,0 +1,16 @@
<?php
$title = 'アップロード';
$sitedesc = 'アップロードです。';
$siteurl .= '/upload';
$childview = '../ui/upload/index.php';
if (isset($_FILES['file'])) {
//dd($_FILES['file']);
//dd(fileextension($_FILES['file']['name'][0]));
//dd(humanreadablesize($_FILES['file']['size'][0]));
//dd(getmimetype('egaokero.png')); // 存在する
//dd(getmimetype('klsdhnjkfjlsdjhnvgf.png')); // 存在しない
//dd(verifyupload());
dd(loliupload($_FILES['file']));
}
?>

4
ui/upload/index.php ノーマルファイル
ファイルの表示

@ -0,0 +1,4 @@
<form method="POST" action="/upload" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" name="submit" value="送信" />
</form>