Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с большими файлами! readfile(), filesize(). 
V
    Опции темы
Хрипа
Дата 20.2.2008, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 11.12.2006

Репутация: -6
Всего: нет



Как читать файлы большого размера ну примерно больше чем 4-5 гигабайт ?
Определять их точный размер и читать их очень точно.
Спасибо!
--------------------
<Вырезана, как не соответствующая правилам форума >
PM MAIL   Вверх
solenko
Дата 20.2.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



читать блоками. По поводу размера... Даже не знаю, возможно выполнение консольной команды займет меньше времени?


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Хрипа
Дата 20.2.2008, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 11.12.2006

Репутация: -6
Всего: нет



solenko, каким образом можно читать блоками ?
через Fopen ?

Добавлено через 2 минуты и 30 секунд
solenko, Пример скрипта можно ?
Того что я не представляю каким образом можно подорвать в память переменую размером 5 гб ((
--------------------
<Вырезана, как не соответствующая правилам форума >
PM MAIL   Вверх
solenko
Дата 20.2.2008, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



Впихнуть в память 5Г можно точно так же как и 5Б, вопрос нужно ли?
просто содержимое файла обрабатывать построчно, например:
Код

$fh = fope($filename, "r");
while (!feof($fh)) {
  $str = fgets($fh);
  //делаем со строкой то что нам нужно
}
fclose($fh);


Для какой задачи вам нужно читать эти файлы?


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
Хрипа
Дата 21.2.2008, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 11.12.2006

Репутация: -6
Всего: нет



solenko, что бы отдовать пользывателю контент!
Типа скачка файлов через скрипт. 
--------------------
<Вырезана, как не соответствующая правилам форума >
PM MAIL   Вверх
solenko
Дата 21.2.2008, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 34
Всего: 67



ну вот вставь вместо 
//делаем со строкой то что нам нужно
echo $str;
и получиш отдачу файла пользователю.

Добавлено через 7 минут и 6 секунд
посмотрите линк -- http://2people.ru/?p=32 возможно как раз то, что вам нужно


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
SelenIT
Дата 21.2.2008, 00:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Цитата(Хрипа @  21.2.2008,  00:10 Найти цитируемый пост)
скачка файлов через скрипт

Чем классический readfile для этой цели не устраивает?

Добавлено через 2 минуты и 51 секунду
...хотя решение через mod_rewrite и вправду симпатичное smile


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
FractalizeR
Дата 21.2.2008, 00:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 27.12.2007
Где: Россия/Москва

Репутация: 2
Всего: 4



Цитата(solenko @ 20.2.2008,  22:16)
читать блоками. По поводу размера... Даже не знаю, возможно выполнение консольной команды займет меньше времени?

Если файл больше 4Гб получать размер лучше так:

Код
$a = fopen($filename, 'r');
fseek($a, 0, SEEK_END);
$filesize = ftell($a);
fclose($a);




--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
Хрипа
Дата 21.2.2008, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 11.12.2006

Репутация: -6
Всего: нет



SelenIT, Проблема в том что readfile и filesize не верно читают файлы больше 3 гигабайта
что бы отдать пользывателю:
      
Код

 $get_name = "$rows[file_name].$ext";
              $f_size=filesize($true_name);
                 header("Content-type: $type");
               header("Content-Disposition: attachment; filename=".$get_name.";");
               header("Accept-Ranges: bytes");
               header("Content-Length: ".$f_size); // И тут надо указать что бы браузер знал сколько получать данные!
               readfile($true_name); // ТУТ НЕ ЧИТАЕТ! больше 3 гига


Добавлено через 3 минуты и 54 секунды
FractalizeR, 0 возврашает.

Это сообщение отредактировал(а) Хрипа - 21.2.2008, 00:56
--------------------
<Вырезана, как не соответствующая правилам форума >
PM MAIL   Вверх
SelenIT
Дата 21.2.2008, 01:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Хрипа, а этот вариант определения размера пробовали? Похоже, readfile отрабатывает нормально, проблема именно в filesize (точнее - ограничении диапазона Int32)...

Это сообщение отредактировал(а) SelenIT - 21.2.2008, 01:40


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Хрипа
Дата 21.2.2008, 01:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 11.12.2006

Репутация: -6
Всего: нет



Вернуло: 110502293
а файл весит: 4 302 217 кб
Не верно вроде! в чём вернуло размер ? байты ?
--------------------
<Вырезана, как не соответствующая правилам форума >
PM MAIL   Вверх
SelenIT
Дата 21.2.2008, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



Чуть поковырялся - там в ф-ции две ошибки(. Вот так должно работать:
Код

function getSize($file) {
    if (!(strtoupper(substr(PHP_OS, 0, 3)) == 'WIN'))
        $size = trim(`stat -c%s $file`);
    else{
        $fsobj = new COM("Scripting.FileSystemObject");
        $f = $fsobj->GetFile($file);
        $size = $f->Size;
    }
    return $size;
}



--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
Хрипа
Дата 21.2.2008, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 11.12.2006

Репутация: -6
Всего: нет



SelenIT, Большое спасибо )) Действительно вернуло правельный размер 4405469589
--------------------
<Вырезана, как не соответствующая правилам форума >
PM MAIL   Вверх
FractalizeR
Дата 21.2.2008, 01:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 273
Регистрация: 27.12.2007
Где: Россия/Москва

Репутация: 2
Всего: 4



Хрипа, 
Вы случайно не под Vista сидите? smile И пытаетесь получить размер файла в корневом каталоге диска? smile У меня только что тоже не работало smile fseek не срабатывает. Видимо, прав не хватает. В другом каталоге все ок.


--------------------
Чтобы поблагодарить или наоборот поругать участника форума лучше пользоваться значками "+" и "-", изменяющими репутацию. Они находятся слева от поста под именем пользователя.
PM MAIL   Вверх
sTa1kEr
Дата 21.2.2008, 01:57 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 56
Всего: 146



SelenIT, красивое решение. Единственное, это то что не работает под FreeBSD. Можно доработать так, хотя это все равно не универсальное решение будет.
Код

function getSize($file) {
    if (!(strtoupper(substr(PHP_OS, 0, 3)) == 'WIN')) {
        if (PHP_OS == "FreeBSD")
        {
            $flag = "-f%z";
        }
        else
        {
            $flag = "-c%s";
        }
        $size = trim(`stat $flag $file`);
    }
    else {
        $fsobj = new COM("Scripting.FileSystemObject");
        $f = $fsobj->GetFile($file);
        $size = $f->Size;
    }
    return $size;
}


Это сообщение отредактировал(а) sTa1kEr - 21.2.2008, 02:12
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1085 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.