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

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

04.08.2013, 21:18. Показов 1956. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru