Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
4 / 4 / 2
Регистрация: 27.03.2012
Сообщений: 142

Получение части файла http

04.08.2013, 21:18. Показов 1987. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возможно ли на php получить часть файла?
Есть функция
string file_get_contents ( string $filename [, bool $use_include_path = false [, resource $context [, int $offset = -1 [, int $maxlen ]]]] )
но там смещение в пределе int только, а необходимо очень большое смешение в районе 2^100

можно задавать Range в запросе, тут нашёл доку: http://www.freesoft.org/CIE/RFC/2068/178.htm но почему-то скачивается весь файл, а не часть

вообще средствами php это осуществимо?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.08.2013, 21:18
Ответы с готовыми решениями:

Получение токена из заголовка HTTP
Добрый день! Как можно получить токен из заголовка запроса? Header("Authorization: Bearer " . $token)

Получение сообщения от сервера для клиентской части AJAX
Всем доброго времени суток. Сделал с помощью AJAX регистрацию на сайте, все работает правильно, данные идут на сервер оттуда идет ответ....

Деление файла на части и получение их хешей
Не смотрите особо на название, я не знаю как назвать то, что хочу сделать =) Но смысл сейчас постараюсь объяснить... Я считываю файл...

13
 Аватар для Dealiss
296 / 284 / 84
Регистрация: 10.05.2013
Сообщений: 920
04.08.2013, 21:33
Ну можно ещё вырезать:
PHP
1
substr()
0
4 / 4 / 2
Регистрация: 27.03.2012
Сообщений: 142
04.08.2013, 21:35  [ТС]
Цитата Сообщение от Dealiss Посмотреть сообщение
Ну можно ещё вырезать:
PHP
1
substr()
Вырезать нельзя, файл слишком большой, чтобы его получить полностью
т.е. изначально надо запросить часть
0
 Аватар для Dealiss
296 / 284 / 84
Регистрация: 10.05.2013
Сообщений: 920
04.08.2013, 21:38
В цикле прочесть, части в массив вставить - не пытались?
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
04.08.2013, 21:40
сервер-то поддерживает заголовок range? php тут ни при чем

Добавлено через 1 минуту
rfc2616 более актуален, насколько мне известно. впрочем, там скорее всего примерно то же самое
0
4 / 4 / 2
Регистрация: 27.03.2012
Сообщений: 142
04.08.2013, 21:48  [ТС]
Цитата Сообщение от Dealiss Посмотреть сообщение
В цикле прочесть, части в массив вставить - не пытались?
подойдёт, проблема лишь в том, как начать читать с ооочень большой позиции?

Цитата Сообщение от NEbO Посмотреть сообщение
сервер-то поддерживает заголовок range?
А как это проверить?

Добавлено через 5 минут
Цитата Сообщение от NEbO Посмотреть сообщение
rfc2616 более актуален, насколько мне известно. впрочем, там скорее всего примерно то же самое
чуть иначе, вот нашёл, спс: http://tools.ietf.org/html/rfc2616#section-14.16
хотя вроде так же
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
04.08.2013, 21:55
В код только подставьте нужные вам хосты:
PHP
1
2
3
4
5
6
7
8
$f = fsockopen('www.empherino.net', 80);
$req = "GET /media/css/root.css HTTP/1.1\r\nHost:aurora.empherino.net\r\nConnection:close\r\nRange: bytes=70000-\r\n\r\n";
fwrite($f, $req);
while (true) {
    $data = fread($f, 8192);
    echo $data;
    if (feof($f)) break;
}
Добавлено через 1 минуту
Если вернет 206 код и укажет что-то вроде (в моем случае)
Code
1
Content-Range: bytes 70000-88136/88137
то значит поддерживает
1
 Аватар для Dealiss
296 / 284 / 84
Регистрация: 10.05.2013
Сообщений: 920
04.08.2013, 21:57
Как понять "ооочень большой позиции" ?)
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
04.08.2013, 21:59

Не по теме:

пс. надеюсь, вы уже догадались, что вам нужно сделать, чтобы считать файл так, как вы хотите:) ну, разуимеется, если сам сервер не откажет вам в Range. В curl, если что, этот же заголовок можно установить через CURLOPT_RANGE: http://php.net/manual/en/function.curl-setopt.php



Добавлено через 53 секунды

Не по теме:

Цитата Сообщение от Dealiss Посмотреть сообщение
Как понять "ооочень большой позиции" ?)
вы просто не в теме.не заморачивайтесь:D

0
 Аватар для Dealiss
296 / 284 / 84
Регистрация: 10.05.2013
Сообщений: 920
04.08.2013, 22:01
NEbO, тут вы совершенно правы. Но, я хочу знать о чем идёт речь, по этому и спрашиваю.
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
04.08.2013, 22:15
если Range не поддерживается, то подобным образом считать не получится. Действительно тогда единственный вариант -- это читать откуда-то сначала, при этом буфер можно очищать до определенной позиции... все бы ничего, да ждать придется, конечно, долго. И если соединение сбросится, то все начинать заново (хотя, надеюсь вы не диалапе). хотя 2^100 это мда... слишком большой канал нужен. А вообще, знаете, что я вам скажу: я не представляю, что это должен быть за сервер, который такие файлы может хранить. не уверен, конечно, но на всех серверах гугля наврядли столько найдется

Добавлено через 2 минуты
Цитата Сообщение от Dealiss Посмотреть сообщение
о чем идёт речь
это протокол http. Заголовки Range. Раньше часто сидя на диалапе я наблюдал за тем, как reget deluxe посылает красивенькие разноцветные заголовки и читает файл в несколько потоков.
Дело в том, что если сервер поддерживает такой заголовок, можно читать файл не с самого начала, а задать смещение. А размер файла можно вычислить, с помощью например, посылки простого запроса GET и сразу закрыть соединение, после получения заголовков

Добавлено через 3 минуты
при этом размер будет в ответе сервера, в заголовке Content-Length

Добавлено через 2 минуты
или не будет, если он пошлет заголовок Transfer-Encoding: chuncked. Это допустимо, для разгрузки сервера

Добавлено через 3 минуты
Тогда размер файла просто так узнать нельзя, это уже своего рода динамически формируемый поток. Но Range тогда уже уж слишком маловероятно, если будет поддерживаться. Поучится, что у сервера должен быть буфер, который должен будет заполниться, а потом отдаваться клиенту. Но тогда отпадает смысл в chunked transfer-encoding. и наврядли это разрешается по стандарту. хотя тут я на 100% не уверен.
предпочитаю делать сервера, а не клиенты, с последними мороки больше, в общем случае
0
4 / 4 / 2
Регистрация: 27.03.2012
Сообщений: 142
04.08.2013, 23:15  [ТС]
NEbO, вот что возвращает
HTTP/1.1 416 Requested Range Not Satisfiable Date: Sun, 04 Aug 2013 19:07:52 GMT Server: Apache X-Error-Reason: Invalid format of byte-range request Connection: close Vary: Accept-Encoding Transfer-Encoding: chunked Content-Type: text/html 4d2
Not Found

Invalid format of byte-range request
0

Добавлено через 5 минут
Цитата Сообщение от NEbO Посмотреть сообщение
А вообще, знаете, что я вам скажу: я не представляю, что это должен быть за сервер, который такие файлы может хранить. не уверен, конечно, но на всех серверах гугля наврядли столько найдется
он возможно не реальный, вот ссылка ссылка
это задание, может запросы обрабатывает просто скрипт
но сам файл не раз банился майкрософтом за не реально большую длину, о чём там в ответе можете прочитать. Они устали с ними воевать по этому поводу ))

Цитата Сообщение от NEbO Посмотреть сообщение
это уже своего рода динамически формируемый поток.
или так да
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
04.08.2013, 23:21
а, вот как. ну если не реальный, то да. Попробуйте по rfc тогда пробежаться, как точно можно задавать range по-другому. Помните, что это -- строка, т.е. длину никто не ограничит. врочем, она может быть ограничена стандартом... Вероятно, там можно указывать не только bytes. тем более, если это задание такое.
Единственное что меня смущает, это Transfer-Encoding: chunked...
пс. сам я щас тут немного занят, посмотрю, но позже

Добавлено через 1 минуту
Цитата Сообщение от NEbO Посмотреть сообщение
Помните, что это -- строка
и помните, что с длинными числами нельзя работать через обычный плюс, минус: он тупо сконвертирует их в тип double и представит в виде 1e500, например. и сервер такое не поймет.
Если нужна арифметика, посмотрите в сторону расширения gmp
0
4 / 4 / 2
Регистрация: 27.03.2012
Сообщений: 142
04.08.2013, 23:25  [ТС]
NEbO да, работает спс)
самый первый приведённый скрипт ваш
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.08.2013, 23:25
Помогаю со студенческими работами здесь

Получение http в qt
добрый день ,есть такая задача использовать qt как backend. c веб морды прилетает форма post`ом, как и чем можно это дело разобрать, очень...

Получение данных по HTTP
Не знаком с получением данных по HTTP из procedure. Расскажите вкрации или дайте ссылку где почитать, что нужно ставить и как это в...

Получение данных времени с http://time100.ru
Здравствуйте Нужна помощь в получении времени с разных городов имеется код <span class="timenow">точное...

Отправка http запроса и получение ответа
я понимаю что есть дофига тем про это, я честно гуглила и искала, но находила в основном код без пояснений с непонятными мне функциями,...

Получение кода состояния HTTP через urllib
Можно ли получить код состояния http через urllib, но при этом не скачивая саму страничку ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru