2012-08-30 60 views
6

Tôi đang cố hiểu ý nghĩa của dữ liệu bài đăng thô. Trang hướng dẫn sử dụng PHP cho $HTTP_RAW_POST_DATA chỉ nêu rõ rằng biến này có chứa Raw POST data.Dữ liệu bài đăng thô là gì

Khi biến này sẽ được đặt và ý nghĩa của dữ liệu bài đăng thô là gì?

Tôi hiểu $_POST nhưng hoàn toàn nhầm lẫn với $HTTP_RAW_POST_DATA

+2

Bạn đã thử xem có gì không? 'var_dump ($ HTTP_RAW_POST_DATA);' hoặc thậm chí tốt hơn 'var_dump (file_get_contents (" php: // input "));' – zerkms

+0

@zerkms: Có, Nó là 'NULL'. Tôi đã thử cả hai và đầu ra là 'NULL',' chuỗi (0) "" 'tương ứng – Daric

+1

http://stackoverflow.com/questions/3173547/whats-the-difference-between-post-and-raw-post-in- php-at-all –

Trả lời

9

Một yêu cầu HTTP bao gồm hai phần. Một tập hợp các tiêu đề và một cơ thể.

Tiêu đề bao gồm những thứ như URL được yêu cầu và người trợ giúp kiểm soát bộ nhớ đệm (chẳng hạn như "Tôi có phiên bản này từ hôm qua, chỉ cung cấp cho tôi một phiên bản mới nếu có thay đổi, OK?").

Cơ thể có thể hoặc có thể không xuất hiện tùy thuộc vào loại yêu cầu. Yêu cầu POST có nội dung.

Cơ thể có thể ở bất kỳ định dạng nào mà khách hàng thích. Một trong các tiêu đề sẽ cho máy chủ biết định dạng là gì.

Có một vài định dạng được sử dụng bởi biểu mẫu HTML và PHP biết cách phân tích cú pháp này và đưa dữ liệu vào $_POST.

Nếu dữ liệu ở định dạng khác, chẳng hạn như JSON hoặc nếu dữ liệu không tuân theo các điều khoản của PHP (chẳng hạn như quy tắc để có [] ở cuối khóa có cùng tên) thì bạn có thể muốn truy cập dữ liệu trực tiếp để bạn có thể phân tích cú pháp đó.

Đó là dữ liệu POST thô.

+0

Giải thích gọn gàng! – Daric

1

HTTP là một giao thức dựa trên văn bản, vì vậy tất cả các dữ liệu được truyền như một chuỗi. Khi bạn làm việc với $_POST - bạn đã có dữ liệu đã qua xử lý để bạn ở dạng mảng. Điều này được thực hiện bởi php tự động ngay trước khi điều khiển được truyền cho kịch bản của bạn.

Vì vậy, trong dữ liệu bài thô có dữ liệu khi dữ liệu được truyền qua mạng.

Có khả năng bạn sẽ thấy a=1&b=2 dữ liệu, như bạn nhìn thấy nó trong các url

+0

Cảm ơn @zerkms. – Daric

1

Một trong những điều bạn có thể làm với giao thức http là làm một yêu cầu POST mà sẽ gửi một số văn bản lại cho máy chủ.

$HTTP_RAW_POST_DATA sẽ chứa văn bản đó, bất kể nội dung gì.

Hầu hết thời gian khi chúng tôi thực hiện yêu cầu POST, chúng tôi sẽ thêm "loại nội dung" vào văn bản được gửi. Điều này cho máy chủ biết đó là loại nội dung gì. Hầu hết thời gian trên web, chúng tôi đang gửi loại nội dung dưới dạng 'application/x-www-form-urlencoded'.

Khi một máy chủ nhận được một yêu cầu POST với nội dung này loại marker, máy chủ sẽ biết phải cố gắng để biến dữ liệu vào một mảng $_POST để "test = hello" trở thành:

$_POST['test']='hello' 
4

$_POST có thể nói như và kết quả sau khi tách $HTTP_RAW_POST_DATA, php chia tách bưu dữ liệu thô và các định dạng trong cách chúng ta nhìn thấy nó trong $_POST Ví dụ:

$HTTP_RAW_POST_DATA trông giống như

này
key1=value1&key2=value2 

sau đó $_POST sẽ trông như thế này:

$_POST = array(
    "key1" => "value1", 
    "key2" => "value2",); 
0

$HTTP_RAW_POST_DATA chứa các dữ liệu POST liệu như sau:

  • văn bản
  • json
  • xml
  • html

Nói chung, php://input nên được sử dụng thay vì $HTTP_RAW_POST_DATA. vì tính năng này đã được DEPRECATED kể từ PHP 5.6.0. Dựa vào tính năng này là rất nản lòng.

Nguồn: php.net - $HTTP_RAW_POST_DATA

Các vấn đề liên quan