Столкнулся с такой небольшой проблемой, в HTTP на странице сайта не правильно отображается размер файла больше 4 гигабай.
То есть к примеру, не 4.37Gb, а показывает что-то типа 300 или 500 мегабайт.
Apache 2.2.3-4 + PHP 5.2.0-8 на Debian Etch. В репозитории это самый последний из доступных пакетов.
Можно это как-то пофиксить?
P.S. По пьяне написал в другой раздел, дико извеняюсь, перенесите пож в Debian.
Цитата: 51469bg от 12 Сентября 2010, 23:18Столкнулся с такой небольшой проблемой, в HTTP на странице сайта не правильно отображается размер файла больше 4 гигабай.
То есть к примеру, не 4.37Gb, а показывает что-то типа 300 или 500 мегабайт.
Apache 2.2.3-4 на Debian Etch. В репозитории это самый последний из доступных пакетов.
Можно это как-то пофиксить?
P.S. По пьяне написал в другой раздел, дико извеняюсь, перенесите пож в Debian.
Вы хоть скриншот приложите или ссылку где смотреть...
А то не совсем понятно
Цитата: Vicpo от 12 Сентября 2010, 23:46Вы хоть скриншот приложите или ссылку где смотреть...
А то не совсем понятно
Проблема похоже вот в этом.
ЦитироватьLFS в linux: работаем с файлами больше 2Гб
На днях столкнулся с проблемой: код, который читает директорию, работал каким-то странным образом. Перебирались несколько файлов, находящихся внутри директории, но в какой-то момент чтение прекращалось, даже не возвращая никакой ошибки. Надо сказать, что вообще там было использование библиотеки APR для чтения, так что я не мог быстро заглянуть "внутрь" нее, чтобы понять: что не так. Проблема оказалась проста - в директории был файл размером 2.5 Гб. Мне показалось странным, что файловая система спокойно создает и работает с более крупными файлами, а я - нет .
Таким образом я узнал о Large File Support в linux. В 32-битных ОС размер файла ограничен 32 битами... а так как размер сделали знаковым, то он стал ограничен 31 битом или 2 Гб. Этот "барьер" можно обойти. В 32-битных ОС есть специальный "64 битный интерфейс" для работы с файловой системой. Он позволяет производить все те же операции над файловой системой, только без ограничения размера файла (реальный максимальный размер файла при 64-битном интерфейсе определяется файловой системой и ОС). Чтобы на него переключиться необходимо скомпилировать весь свой код (конечно который использует I/O операции) с указанием определенных макросов. Эти макросы так же зависят от платформы. Чтобы их получить надо вызвать:
$getconf LFS_CFLAGS
Обычно эти флаги такие:
Linux
-D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
В общем пересобрал PHP 5.2.14, вот так:
wget http://www.php.net/g....php.net/mirror (http://www.php.net/get/php-5.2.14.tar.gz/from/ru.php.net/mirror)
tar -xvzf php-5.2.14.tar.gz
apt-get install libxml2-dev
./configure
в фаиле Makefile, нашел
CC = gcc
Заменил на:
CC = gcc -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64
make
make install
Не помогло, если выводить просмотр файлов через PHP скрипт RapidGet размер не правельный
(http://pics.kz/s5/f1/02/1e/f1021ec0234c201058413aae9d74d54c.png)
если просто поставить вывести листинг директори, или просматривать на ftp - размер правельно определяется и показывает.