|
Зависает один из запросов file_get_contents
|
|||
---|---|---|---|
#18+
Здравствуйте уважаемые форумчане! Столкнулся с проблемой, в скрипте несколько запросов через file_get_contents. На одном запросе скрипт зависает, хотя ответ в сниффере я вижу мгновенно. Пробовал перенести ответ один-в-один в свой скрипт - отрабатывает нормально в этом случае. Может быть проблема с ssl? В хедерах ответа сервера есть такие строки авторContent-Security-Policy: default-src data: 'self' 'unsafe-inline' 'unsafe-eval' ... Content-Security-Policy-Report-Only: default-src data: blob: about: 'self' 'unsafe-inline' 'unsafe-eval' https: wss:; report-uri /csp/report?always; Cache-Control: no-cache Cache-Control: no-store Pragma: no-cache Content-Type: text/event-stream;charset=UTF-8 Transfer-Encoding: chunked Может что-то из этого влияет на разбор ответа запроса. В среднем зависание скрипта на 50-60 секунд, потом контент запроса отдается в переменную как и должно быть. Пробовал на курл, то же самое. Перенес скрипт с локалки на сервак, без результата ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2017, 13:35 |
|
Зависает один из запросов file_get_contents
|
|||
---|---|---|---|
#18+
Евгений1000, зависает именно на file_get_contents ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2017, 13:36 |
|
Зависает один из запросов file_get_contents
|
|||
---|---|---|---|
#18+
Решил, сделав на сокетах. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2017, 14:50 |
|
Зависает один из запросов file_get_contents
|
|||
---|---|---|---|
#18+
Евгений1000ответ в сниффере я вижу мгновенноЕвгений1000зависает именно на file_get_contents Если всё действительно так, то могу только предположить, что удалённый сервер никак не обозначает ни окончание передачи контента, ни его длину. По крайней мере, в приведённых заголовках длина не указана. В таком случае клиенту только на собственный таймаут можно рассчитывать. У curl есть опции для настройки таймаутов. Не пробовали выставить небольшие значения? ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2017, 15:02 |
|
Зависает один из запросов file_get_contents
|
|||
---|---|---|---|
#18+
vkle, Transfer-Encoding: chunked как бы предполагает, что длина не указана. в context на file_get_contents можно тоже таймаут выставить, но он не помогает и в курле тоже. Предполагаю, что он не срабатывает по причине того, что таймаут на период передачи данных не срабатывает, проблема в расшифровке данных. Читал, что до версии пхп<5.3.0 chunked вообще не расшифровывался через file_get_contents. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2017, 15:16 |
|
Зависает один из запросов file_get_contents
|
|||
---|---|---|---|
#18+
vkle, да, видимо эта проблема решаема только через сокеты. И то я сделал Код: php 1.
мне больше и не нужно, но думаю если зациклить и пытаться дочитать до конца файла, то будет приблизительно тоже самое, если вообще не уйдет в вечный цикл ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2017, 15:23 |
|
Зависает один из запросов file_get_contents
|
|||
---|---|---|---|
#18+
Блин, все просто! В хедер нужно было добавить Connection: close ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2017, 17:47 |
|
Зависает один из запросов file_get_contents
|
|||
---|---|---|---|
#18+
Евгений1000В хедер нужно было добавить Connection: closeНу да, это вариант окончания передачи данных. А что, удалённый сервер подконтролен, чтобы его настраивать? Ну а в общем, на сокетах гораздо больше гибкости в таких ситуациях. Хотя, на мой взгляд, ситуация, скорее, частная. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.01.2017, 23:51 |
|
Зависает один из запросов file_get_contents
|
|||
---|---|---|---|
#18+
Если это HTTP, что почему бы CURL не взять? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.01.2017, 08:27 |
|
|
start [/forum/topic.php?fid=23&msg=39384865&tid=1460741]: |
0ms |
get settings: |
11ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
49ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 148ms |
0 / 0 |