У меня есть одно «хакерское» решение, которое работает хорошо.
Посмотрите пожалуйста ЭТА функция как я это делаю, и вам также нужно включить этот класс , чтобы функция моглаработает хорошо или изменить по вашей необходимости.
пример:
include_once 'class.os.php';
include_once 'function.filesize.32bit.php';
// Must be real path to file
$file = "/home/username/some-folder/yourfile.zip";
echo get_filesize($file);
Эта функция не является идеальным решением, но вот как она работает:
- Сначала проверьте, включен ли
shell_exec
в PHP.Если он включен, он проверяет с помощью команды оболочки реальный размер файла. - Если произойдет сбой оболочки и ОС станет 64-битной, вернет нормальную
filesize()
информацию - Если 32-битная, перейдет в метод "разбивки" ирассчитывать размер файла при чтении байтов.
ПРИМЕЧАНИЕ!
После чтения сохраняйте результаты в строковом формате, чтобы их можно было легко вычислить, потому что PHP может вычислять строки, но если вы преобразуете результаты через2 ГБ в целое число, у вас будет та же проблема, что и раньше.
ПРЕДУПРЕЖДЕНИЕ!
Чанкинг очень медленный, и если вы захотите зациклить его, у вас будет утечка памяти или сценарийможет занять несколько минут, чтобы закончить чтение всех файлов.Если вы используете эту функцию на сервере, где вы включили shell_exec
, у вас будет супер быстрое чтение.
PS
Если у вас есть какая-то идея об изменениях здесь и улучшатели не стесняются коммитить.