В PHP FAQ есть запись о сокращенной записи :
Некоторые директивы PHP могут также принимать сокращенные байтовые значения, в отличие
только целочисленные байтовые значения. Что
все доступные сокращенные байты
опции? И могу ли я использовать их снаружи
php.ini?
Доступны следующие опции: K
(для
Килобайт) , M
(для мегабайт) и G
(для гигабайт; доступно с PHP
5.1.0) , регистр не учитывается. Все остальное предполагает байты. 1M равно
один мегабайт или 1048576 байт . 1K
равен одному килобайту или 1024 байта. Вы
не может использовать эти сокращенные обозначения
за пределами php.ini, вместо этого используйте
целочисленное значение байтов. Увидеть
ini_get()
документация для примера
о том, как преобразовать эти значения.
Итак, в вашем случае 8M не означает 8 000 000 байт, но означает 8 388 608 байт.
(Это не зависит от используемой операционной системы: вычисления выполняются PHP, а memory_limit
также реализуется PHP)