MB und MiB sind unterschiedlich! Fallstricke bei Dateigröße-Einheiten
Wenn Sie eine Spezifikation sehen, die besagt 「Die Dateigrößenbeschränkung beträgt 10 MB」, wie interpretieren Sie sie? Tatsächlich sind 「MB」 und 「MiB」 eindeutig unterschiedliche Einheiten, und diese Verwechslung kann zu Ausfällen bei Grenzwerttests und Produktionsstörungen führen. Dieser Artikel erklärt die genaue Definition von Dateigrößeneinheiten und häufige Fallstricke in Entwicklungsumgebungen.
Definition von MB und MiB
Es gibt zwei Arten von Einheiten zur Darstellung der Dateigröße: das SI-Einheitensystem (dezimalbasiert) und das IEC-Einheitensystem (binärbasiert).
| Einheit | Leseanleitung | Anzahl der Bytes | Standard |
|---|---|---|---|
| KB | Kilobyte | 1,000 B | SI (dezimal) |
| KiB | Quibibyte | 1,024 B | IEC (binär) |
| MB | Megabyte | 1,000,000 B | SI (dezimal) |
| MiB | Mebibyte | 1,048,576 B | IEC (binär) |
| GB | Gigabyte | 1,000,000,000 B | SI (dezimal) |
| GiB | Gibibyte | 1,073,741,824 B | IEC (binär) |
Der Unterschied zwischen 1MB und 1MiB beträgt <strong>48.576 Bytes (etwa 4,86%)</strong>. Bei 10MB und 10MiB beträgt der Unterschied etwa 485KB. Wenn sich diese Unterschiede ansammeln, kommt es bei Grenzwert-Tests zu der Situation, dass 「eine Datei, die 10MB oder kleiner sein sollte, abgelehnt wird」.
Unterschiede in der Handhabung bei Entwicklungstools・OS・Cloud
Was das Problem verkompliziert, ist, dass jedes Tool und jedes Betriebssystem diese Einheit mit seiner eigenen Interpretation verwendet.
| Tools / Umgebung | Interpretation von 「10MB」 | Tatsächliche Byte-Anzahl |
|---|---|---|
| PHP(php.ini) | 10MiB | 10,485,760 B |
| Nginx(client_max_body_size) | 10MiB | 10,485,760 B |
| Windows Explorer | MiB-Anzeige (notiert als 「MB」) | 1,048,576 B / MB |
| macOS Finder | MB (Dezimal) | 1,000,000 B / MB |
| AWS S3-Verwaltungskonsole | MiB-Anzeige | 1,048,576 B / MB |
| Gmail (Anhang-Limit) | MB (Dezimal) | 25,000,000 B |
Besonders zu beachten ist, dass Windows 「MB」 anzeigt, aber tatsächlich in 「MiB」 berechnet. Eine Datei, die in Windows als 「9,9 MB」 angezeigt wird, kann tatsächlich <code>9,9 × 1.048.576 = 10.381.301 Bytes</code> sein. Das ist größer als 10MB (10.000.000 Bytes) und verursacht auch bei Gmail (25MB-Limit) keine Probleme, kann aber bei PHP mit <code>upload_max_filesize = 10M</code> (=10MiB = 10.485.760 Bytes) nicht hochgeladen werden.
Praktisches Beispiel in PHP
In der PHP-Konfigurationsdatei werden die Einheiten wie folgt interpretiert.
; php.ini の設定
upload_max_filesize = 10M ; 10 MiB = 10,485,760 バイト
post_max_size = 12M ; 12 MiB = 12,582,912 バイト
Beim Validieren der Größe einer hochgeladenen Datei ist ein Vergleich in Bytes am sichersten.
// バイト単位で比較(安全)
$maxBytes = 10 * 1024 * 1024; // 10 MiB = 10,485,760 バイト
if ($_FILES['file']['size'] > $maxBytes) {
throw new \RuntimeException('ファイルサイズが上限を超えています');
}
// NG: 文字列の "10MB" を解析する場合は単位の解釈に注意
Praktisches Beispiel in JavaScript
// File API では size プロパティがバイト数を返す
const file = event.target.files[0];
const MAX_SIZE_MIB = 10 * 1024 * 1024; // 10 MiB
const MAX_SIZE_MB = 10 * 1000 * 1000; // 10 MB
// サーバー側に合わせて単位を統一する
if (file.size > MAX_SIZE_MIB) {
alert(`ファイルサイズ上限は 10 MiB (${MAX_SIZE_MIB.toLocaleString()} バイト) です`);
}
Auswirkungen auf den Grenzwerttest
Beim Testen eines 「Limits von 10MB」 ist es wichtig, das tatsächliche Limit des Servers zu verstehen, bevor Sie die richtige Testdatei wählen.
- PHP <code>upload_max_filesize = 10M</code> → Limit ist <strong>10.485.760 Bytes (10 MiB)</strong>
- Gmail-Dateigrößenlimit → Das Limit ist <strong>25.000.000 Bytes (25 MB)</strong>
- Discord Kostenplan → Limit ist <strong>25.000.000 Bytes (25 MB)</strong>
Die <a href="/ja/files/threshold/">Grenzwert-Testdateien</a> von DevLab bieten Dateien mit exakten Größen in Bytes. Überprüfen Sie vor dem Test die Serverkonfiguration und wählen Sie die entsprechende Grenzwertdatei aus.
Zusammenfassung
- <strong>MB = 1.000.000 Bytes</strong>(SI-Einheit)、<strong>MiB = 1.048.576 Bytes</strong>(IEC-Einheit)
- PHP und Nginx interpretieren 「M」 als <strong>MiB</strong>
- Windows zeigt 「MB」 an, berechnet aber in <strong>MiB</strong>
- macOS zeigt in <strong>MB</strong> (dezimal) an
- Verwenden Sie präzise Testdateien auf Byte-Ebene und wählen Sie diese nach der Interpretation der Serverkonfiguration aus
→ <a href="/ja/reference/file-size-units/">Konvertiertabelle für Dateigröße-Einheiten hier</a>
Testdatei zur Verwendung in diesem Artikel
- → <a href="/ja/files/threshold/" class="text-primary-600 dark:text-primary-400 hover:underline">Liste von Schwellwert-Testdateien (9.9MB / 10MB / 10.1MB)</a>
Verwandte Artikel
- → <a href="/ja/blog/how-to-test-upload-limit/" class="text-primary-600 dark:text-primary-400 hover:underline">So testen Sie das Datei-Upload-Limit korrekt</a>
- → <a href="/ja/blog/multipart-form-data-overhead/" class="text-primary-600 dark:text-primary-400 hover:underline">Den Overhead von multipart/form-data genau berechnen</a>