¡MB y MiB son diferentes! Trampas de las unidades de tamaño de archivo
Cuando ve una especificación que dice 「El límite de tamaño de archivo es 10MB」, ¿cómo lo interpreta? De hecho, 「MB」 y 「MiB」 son unidades claramente diferentes, y la confusión entre ellas puede causar fallos en pruebas de valores límite e incidentes de producción. Este artículo explica las definiciones precisas de las unidades de tamaño de archivo y las trampas comunes en el desarrollo.
Definición de MB y MiB
Hay dos tipos de unidades para expresar el tamaño de archivo: unidades SI (basadas en decimales) e unidades IEC (basadas en binarias).
| Unidad | Cómo leer | Número de bytes | Estándar |
|---|---|---|---|
| KB | Kilobyte | 1,000 B | SI (decimal) |
| KiB | Kibibyte | 1,024 B | IEC (Binario) |
| MB | Megabyte | 1,000,000 B | SI (decimal) |
| MiB | Mebibyte | 1,048,576 B | IEC (Binario) |
| GB | Gigabyte | 1,000,000,000 B | SI (decimal) |
| GiB | Gibibyte | 1,073,741,824 B | IEC (Binario) |
La diferencia entre 1MB y 1MiB es <strong>48,576 bytes (aproximadamente 4,86%)</strong>. Para 10MB frente a 10MiB, la brecha alcanza aproximadamente 485KB. Cuando estas diferencias se acumulan, en las pruebas de valores límite pueden ocurrir situaciones donde archivos que deberían ser menores de 10MB son rechazados.
Diferencias en el manejo entre herramientas de desarrollo, SO y plataformas en la nube
Lo que complica el asunto es que cada herramienta y sistema operativo interpreta esta unidad de manera diferente.
| Herramientas / Entorno | Interpretación de 「10MB」 | Recuento de bytes real |
|---|---|---|
| PHP(php.ini) | 10MiB | 10,485,760 B |
| Nginx(client_max_body_size) | 10MiB | 10,485,760 B |
| Explorador de Windows | Notación MiB (escrito como "MB") | 1,048,576 B / MB |
| macOS Finder | MB (Decimal) | 1,000,000 B / MB |
| Consola de administración de AWS S3 | Pantalla de MiB | 1,048,576 B / MB |
| Gmail (Límite de adjuntos) | MB (Decimal) | 25,000,000 B |
Es particularmente importante notar que Windows muestra "MB" pero en realidad calcula en "MiB". Un archivo mostrado como "9.9 MB" en Windows puede ser en realidad <code>9.9 × 1,048,576 = 10,381,301 bytes</code>. Esto es mayor que 10MB (10,000,000 bytes) y no causará problemas con Gmail (límite de 25MB), pero fallará al pasar <code>upload_max_filesize = 10M</code> de PHP (<code>=10MiB = 10,485,760 bytes</code>).
Ejemplo práctico en PHP
En los archivos de configuración de PHP, las unidades se interpretan de la siguiente manera.
; php.ini の設定
upload_max_filesize = 10M ; 10 MiB = 10,485,760 バイト
post_max_size = 12M ; 12 MiB = 12,582,912 バイト
Al validar el tamaño de archivos cargados, es más fiable comparar valores en bytes.
// バイト単位で比較(安全)
$maxBytes = 10 * 1024 * 1024; // 10 MiB = 10,485,760 バイト
if ($_FILES['file']['size'] > $maxBytes) {
throw new \RuntimeException('ファイルサイズが上限を超えています');
}
// NG: 文字列の "10MB" を解析する場合は単位の解釈に注意
Ejemplo Práctico en 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()} バイト) です`);
}
Impacto en la prueba de valores límite
Al probar un 「límite de 10MB」, es importante comprender el límite real del servidor antes de seleccionar un archivo de prueba apropiado.
- PHP <code>upload_max_filesize = 10M</code> → el límite es <strong>10,485,760 bytes (10 MiB)</strong>
- Límite de adjuntos de Gmail → El límite es <strong>25,000,000 bytes (25 MB)</strong>
- Plan gratuito de Discord → el límite es <strong>25,000,000 bytes (25 MB)</strong>
Los <a href="/ja/files/threshold/">archivos de prueba de umbral</a> en DevLab proporcionan archivos con tamaños precisos en bytes. Verifique la configuración de su servidor antes de realizar pruebas y seleccione el archivo de umbral correspondiente.
Resumen
- <strong>MB = 1.000.000 bytes</strong> (unidades SI), <strong>MiB = 1.048.576 bytes</strong> (unidades IEC)
- PHP y Nginx interpretan "M" como <strong>MiB</strong>.
- Windows muestra "MB" pero calcula en <strong>MiB</strong>
- macOS muestra <strong>MB</strong> (decimal)
- Use archivos de prueba precisos medidos en bytes y selecciónelos según cómo se interpreten los ajustes del servidor
→ <a href="/ja/reference/file-size-units/">La tabla de conversión de unidades de tamaño de archivo está aquí</a>
Archivos de prueba para este artículo
- → <a href="/ja/files/threshold/" class="text-primary-600 dark:text-primary-400 hover:underline">Lista de archivos de prueba de umbral (9.9MB / 10MB / 10.1MB)</a>
Artículos relacionados
- → <a href="/ja/blog/how-to-test-upload-limit/" class="text-primary-600 dark:text-primary-400 hover:underline">Cómo Probar Correctamente los Límites de Carga de Archivos</a>
- → <a href="/ja/blog/multipart-form-data-overhead/" class="text-primary-600 dark:text-primary-400 hover:underline">Calcular con Precisión el Overhead de multipart/form-data</a>