2016-11-28 14 views
4

私はWordPressでソフトタッチAPIを使用し、curlでAPIにデータを投稿しています。curl_exec()引数最後の2桁の数字を削除します

しかし、私は関数で大きな整数値を送信できません。私はそのデータ型の範囲の問題やカールになっていないよ。私はそれ11449701010101を通過したとして、それはproduct_uidの最後の2桁を削除しcurl_exec()機能にデータを送信する

//create reservation 
$prod_items = array(); 
$single_item = array('product_uid'=>11449701010101); 
$prod_items[] = $single_item; 

$res_params = array(
    'customer_id' => 1111, 
    'payment_type' => '', 
    'invoice_address_id' => 123, 
    'delivery_address_id' => 142, 
    'giftlist_id' => '', 
    'store_id' => '', 
    'items' => $prod_items 
); 
$res_url = $base_url . 'reservations';  
$res_content = json_encode($res_params); 

$res_curl = curl_init(); 
curl_setopt($res_curl, CURLOPT_HTTPHEADER, array('Authorization: ' . $authToken, 'Content-Type: application/json')); 
curl_setopt($res_curl, CURLOPT_POST, true); 
curl_setopt($res_curl, CURLOPT_POSTFIELDS, $res_content); 
curl_setopt($res_curl, CURLOPT_URL, $res_url); 
curl_setopt($res_curl, CURLOPT_RETURNTRANSFER, true); 

$res_response = curl_exec($res_curl); 

if ($res_response === FALSE) 
die(curl_error($res_curl)); 
curl_close($res_curl); 
$res_array = json_decode($res_response); 

ものの、それは114497010101として送信:

以下は私のコードです。

整数範囲の問題やカール関数に問題がありますか?

答えて

0

TL:DRproduct_uidを切り捨てている(CURLの要求を処理するスクリプト内の)他の何かがあるように思われます。 (?)は、32ビットシステム(32ビットとしてコンパイルPHP)にある場合

array('product_uid'=>11449701010101) 

次いで11449701010101 32ビット整数の範囲を超えません。しかし、そのような場合、PHP は暗黙的にの番号をfloatに変換し、この例では何も "失われていません"。

json_encode($res_params); 

PHP関数json_encode()は、文字列respresentation(JSON文字列)に渡された配列を変換します。何も失われません。 11449701010101の値は保持されます。

それは(POST)データが送信される最後の二桁

は通常の文字列であるので、何もこの段階では、個々の特性のために失われることができない削除curl_exec()関数へのデータの送信中。

受信スクリプトが送信されたJSON文字列をデコードし、再度エンコードして送信すると、データはそのまま返されます。 product_uidは整数ではなく(元のデータにあるように)floatです。

具体的には(int)11449701010101などの整数にすると-681801035となり、最後の2桁は単純に切り捨てられません。最後の2桁を切り捨てるには、何らかの種類の文字列操作が行われているようです。

したがって、このデータの処理中に値が切り捨てられている可能性があります(ここには表示されていません)。 (?)

関連する問題