2013-07-01 45 views
5

Tôi đang sử dụng file_get_contents('php://input') để lấy tất cả các thông số POST/giá trị từ một dịch vụ web cụ thể, ví dụ:Parsing từ file_get_contents ('php: // input')

$postText = file_get_contents('php://input'); 

mà kết quả trong một cái gì đó như thế này :

inReplyToId=MG1133&to=61477751386&body=test&from=61477751386&messageId=166594397&rateCode= 

Sau đó, tôi cần nhận từng cặp khóa/giá trị riêng lẻ khi tôi cần đặt chúng vào các trường trong bản ghi cơ sở dữ liệu mới. Ví dụ: tôi muốn kết thúc bằng:

$inReplyToId = MG1133 
$to = 61477751386 
$body = test 

Khi tôi biết giá trị riêng lẻ tôi có thể đặt trường tương ứng trong cơ sở dữ liệu. Tôi thường sử dụng:

if(isset($_POST['inReplyToId']) && $_POST['inReplyToId'] !== '') { 
    $request->setField('_kf_GatewayMessageID', $_POST['inReplyToId']); 
} 

Nhưng điều đó sẽ không hoạt động trong trường hợp này vì nó không phải là mẫu application/x-www-form-urlencoded đang được gửi.

+2

[ 'parse_str()'] (http://ch2.php.net/manual/en/function.parse-str.php) – str

+1

http://www.php.net/manual/ vi/function.parse-str.php – CBroe

+0

tại sao sử dụng 'file_get_contents' và' php: // input'? Sẽ tốt hơn nếu sử dụng [bộ lọc dữ liệu] (http://www.php.net/manual/en/book.filter.php) trên 'INPUT_POST' hoặc' serialize ($ _ POST) 'sự khác biệt là gì? –

Trả lời

5

Bạn có thể sử dụng parse_str chức năng để phân tích chuỗi truy vấn:

$queryString = 'inReplyToId=MG1133&to=61477751386&body=test&from=61477751386&messageId=166594397&rateCode='; 
$data = array(); 
parse_str($queryString, $data); 
var_dump($data); 

Demo

Edit:

Ví dụ tôi muốn kết thúc với:

$inReplyToId = MG1133 
$to = 61477751386 
$body = test 

Để lấy key mảng như biến bạn có thể sử dụng extract:

extract($data); 

Demo

Chỉnh sửa 2: Nếu bạn đã có mã có sử dụng $_POST biến với chỉ số tương ứng, bạn có thể nhập dữ liệu với nó:

Nhưng sửa đổi các biến này i không được khuyến khích.

1

Hãy xem hàm parse_str(), bao gồm một chuỗi được tham số hóa, thành một mảng kết hợp.

0

Bạn có thể sử dụng mã này! thử!

<?php 
$postdata = file_get_contents("php://input"); 
//$postdata = '{"mail": "[email protected]", "number": 6969 }'; 

$obj = json_decode($postdata); 
echo $obj->{'mail'}; // [email protected] 

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