我知道http post表单数据作为字符串值发送到服务器端,我必须将它们转换为布尔值或整数等。
但我的问题是:在保存值类型的同时,是否可以使用curl发布数据?
如:
下面的php代码位准备php数据数组,其中“age”是一个int,“optin”是一个布尔值,然后使用curl通过post方法将此数据发送到测试脚本。
$url = 'http://www.sometestserver.com/test/receive.php';
$data = array (
'name' => "Firstname SecondName",
'age' => 25,
'optin' => true
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Accept: application/xml'));
$response = curl_exec($ch);
我在测试脚本上有下面的代码,上面的代码将数据发布到该脚本。该脚本只读取传入的内容,而var_会将所有内容转储到文本文件中。
ob_start();
var_dump($_POST);
$data = ob_get_clean();
file_put_contents(time() . ".txt", $data);
其输出如下:
array(22) {
["name"]=>
string(21) "Firstname SecondName"
["age"]=>
string(2) "25"
["optin"]=>
string(1) "1"
}
如您所见,所有值都转换为字符串类型,布尔值true转换为字符串“1”。
在另一个测试中,布尔值false作为空字符串“”发送。
有什么方法可以保存数据类型吗?
也许通过设置一个特殊的卷曲选项?
或者这根本不可能?
如果curl总是将布尔值转换为字符串,那么在另一端需要什么值有什么硬性和快速的规则吗?也就是说,bool true总是字符串“1”,false总是空字符串吗?
谢谢你的帮助。
最佳答案
答案是php将原语类型转换为字符串的方式。它唯一可能通过http和curl以字符串形式发送数据,因此php使用php的类型转换系统将非字符串值转换为字符串。
请看一下PHP documentation for how PHP cast non-string values using it's type juggling system