Как может быть file_get_contents failed to open stream: HTTP request failed при успешном запросе?
Здравствуйте.
При добавлении большого файла (более 1,5 ГБ) на исходящий сервер (тоже свой) происходит ошибка file_get_contents failed to open stream: HTTP request failed
Суть работы скрипта:
Файл загружается чанками по 20 мб. Все супер с маленькими файлами.
При загрузке большого файла: тоже все супер, файл грузится без проблем, загружается строка (где происходит наш запрос file_get_contents) отрабатывает запрос -> файловый сервер принимает запрос -> делает все нужные операции. Остается получить ответ, но вылазит file_get_contents failed to open stream: HTTP request failed.
Скрипту нужен успешный ответ, чтобы завершить работу. Работа завершена успешно, но какой ответ написал выше.
Все возможные ограничения в php, ngixn и прочем убраны. Уже какой день вожусь с этой проблемой, буду благодарен за любую подсказку..
Фреймврок laravel, возможно это может быть причиной.
Ну если оба сервера под вашим контролем, и есть все логи ошибок, то не ясно почему вы не видите ошибки.
Например какой HTTP-код приходит в ответ на последний file_get_contents? Так как он явно не 200, а 4хх или 5хх
А если возникает такой код ответа, значит надо смотреть уже причину на отвечающей стороне, там поднимать логи ошибок и тд
nokimaro, failed to open stream: HTTP request failed, на стороне файлового сервера в логах пустота, в логах главного сервера - пусто, только в логах ларавела выскакивает ошибка.
Если смотреть через консоль в браузере, то выдает ошибку 500. И тут странно, вес файла не влияет на конкретно этот запрос, он его не содержит. И он выполняется, успешно. Вот самое странное, что даже учитывая 500 ошибку - он выполняется и в конце должен отдать echo "ok" - а выдает ошибку. По факту, все срабатывает, кроме ответа ОК
Мне не понятно, как такая магия может происходить. Все работает корректно, все обрабатывается в данном запросе - но в ответе ошибка, хоть, опять же - все сработало и выполнилось. Ответ "ок" нужен для завершения загрузки и обновления БД. И происходит только с большими файлами т.е. длинной загрузкой по времени (хотя там чанки по 20 мб)
Дмитрий, загрузка через форму, с domain.com на server1.domain.com
Разные сервера. Именно загрузка работает корректно, во всех случаях, файл загружается всегда.
Только если большой файл, от не отдает ответа об успешной загрузке (финальный запрос отдает ошибку, написал выше какую). Хотя запрос успешен и server1.domain.com несмотря на ошибку запроса полностью его обрабатывает.
Получается, что domain.com посылает финальный запрос через file_get_contents чтобы подтвердить загрузку файла, он успешно обрабатывается на стороне файлового сервера (судя по тому, что все операции для каждого файла выполнены успешно), но ответ точнее ошибка failed to open stream: HTTP request failed получается на стороне domain.com при его отправки (хотя он отправлен и выполнен). Только для длинных запросов (напомню, что чанки по 20 мб, запросов много и они не длинные).
Короче, такие странности. Как хэндлить это - без понятия. Вообще никаких ограничений нет...
Дмитрий, так это она и есть. Этот запрос запускает проверку, склейку, проверку и отдает "Ок". Все выполняется, только вместо ОК ошибка запроса. Я понимаю, что его можно сделать отдельно, но суть в том, почему он появляется только на больших файлах (ошибка) т.е. при длительном времени и кол-ве запросов на загрузку чанков.
Дмитрий, та этот запрос запускается пару команд на склейку и перенос файла, можно попробовать. Но мне кажется, что это настройки сервера. 1 или 2 сервер сразу отрезает этот запрос, точнее 2 или не отвечает или 1 не может увидеть ответ.