linux — альтернатива fseek () в PHP для файлов размером более 2-4 ГБ в 32-битной системе

Мне нужно искать в больших файлах от 30 ГБ до 500 ГБ. К сожалению, мне нужно сделать это в 32-битной системе.

Я только что врезался в ограничение 2GB PHP с fseek()В некотором смысле я не видел документально в Интернете.

$ php -r 'var_dump(fseek(fopen("/dev/sda", "r"), 0, SEEK_END));'
int(-1)

Итак, системный вызов возвращается -1, Интересно, почему:

$ strace php -r 'var_dump(fseek(fopen("/dev/sda", "r"), 0, SEEK_END));'
...
lstat64("/dev/sda", {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
lstat64("/dev", {st_mode=S_IFDIR|0755, st_size=5460, ...}) = 0
open("/dev/sda", O_RDONLY)              = 3
fstat64(3, {st_mode=S_IFBLK|0660, st_rdev=makedev(8, 0), ...}) = 0
lseek(3, 0, SEEK_CUR)                   = 0
lseek(3, 0, SEEK_END)                   = -1 EOVERFLOW (Value too large for defined data type)

Это происходит с файлом размером всего 60 ГБ.

Так что я даже не могу стремиться к концу — lseek() по-видимому, не в состоянии представить указатель файла обратно в PHP.

 

В отдельном примечании, многократный поиск вперед с SEEK_CUR, кажется, застрял в 4 ГБ — я не могу переместить указатель файла за эту точку. Мне нужно искать до конца 500ГБ файлов.

Каковы мои альтернативы? Мои текущие планы использовать dd (это на Linux), и инструмент, который я пишу, может быть сценарием оболочки на этом этапе …

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]