Tài liệu PHP states rằng chỉ có thể đọc php://input
một lần.Tại sao php: // đầu vào có thể đọc nhiều hơn một lần mặc dù tài liệu nói khác?
Trong ứng dụng của tôi, tôi cần phải đọc nó hai lần, một lần cho mục đích xác thực và một lần để thực sự xử lý nội dung, và cả hai chức năng đều được xử lý bởi các mô-đun độc lập khác nhau. Điều điên rồ là: nó hoạt động.
Tôi có thể dựa vào tính năng này hoạt động ở mọi nơi, hoặc đây có phải là một thông dịch trong phiên bản PHP của tôi (5.2.10) không? Các tài liệu duy nhất tôi có thể tìm thấy về điều này là một trong đó nói rằng nó không nên làm việc, không có giới hạn phiên bản được đề cập.
Tiếp theo linh cảm Dennis', tôi đã làm bài kiểm tra này:
$in = fopen('php://input', 'r');
echo fread($in, 1024) . "\n";
fseek($in, 0);
echo fread($in, 1024) . "\n";
fclose($in);
echo file_get_contents('php://input') . "\n";
Curling:
$ curl http://localhost:8888/tests/test.php -d "This is a test"
This is a test
This is a test
Rõ ràng đó là giới hạn trong một đọc mỗi tay cầm mở.
hơn một ít đào tiết lộ rằng thực sự php://input
chỉ có thể được đọc một lần, bao giờ hết, cho PUT yêu cầu. Ví dụ trên đã sử dụng yêu cầu POST.
... và bây giờ, 4.5 năm sau, PHP 5.6 chính thức [hỗ trợ] (http://docs.php.net/manual/en/migration56.new-features.php) đọc từ đầu vào 'php: // 'nhiều hơn một lần, và thậm chí tìm kiếm hoạt động :) –
Đối với những người trong chúng ta chưa có trên PHP 5.6, gói' file_get_contents ('php: // input') 'trong một hàm lưu trữ kết quả và gọi thay vào đó là một công việc khả thi -xung quanh. – Umbrella