В соответствии с documentation, php://input
не всегда содержит тело запроса HTTP.Возможно ли узнать, содержит ли php: // данные, прежде чем начать читать?
У меня есть некоторый код, который всегда открывает поток при запуске сценария, чтобы сделать его доступным для пользовательского приложения:
$stream = fopen('php://input', 'rb');
Если приложение пользователя пытается прочитать из пустого потока, когда Content-Length > 0
я хочу, чтобы моя библиотека выбрала исключение:
Тело запроса недоступно.
Моя проблема заключается в том, что:
- Если поток пуст,
feof()
возвращаетсяfalse
в то время какfread()
не был вызван; - Я не могу
fread()
1 байт, тоfseek()
, так как этот поток не поддерживает поиск; - Я не могу открыть еще один
php://input
и попытаться прочитать его заранее, так как мы не можем полагаться на этот поток, который будет доступен не один раз; - Я не хочу вслепую копировать
php://input
вphp://temp
, прежде чем давать руку пользователю, по соображениям производительности.
Следовательно, это можно сказать php://input
, содержит ли право данных после fopen()
, но перед любым fread()
?