shengyayun 10 X 10
shengyayun:~/blog$ source "用php实现curl的data-binary.sh"

shengyayun:~/blog$ printenv
CREATED_DATE = 2017-10-01
UPDATED_DATE = 2017-10-01
TAGS = influxdb : php
CATEGORIES =

shengyayun:~/blog$ grep -lr $TAGS post
2017-09-30 influxdb的部署
2017-10-01 用php实现curl的data-binary
2017-11-12 swoole_http_server中request的全局对象
用php实现curl的data-binary

如果我想往influxdb中插入一条数据,教程告诉我可以这样:

1
curl -i -XPOST 'http://127.0.0.1:8086/write?db=metrics' -u admin:admin --data-binary 'test,host=localhost count=1'

但是现在我需要用php来实现。经过查阅网上资料,有人说可以先将test,host=localhost count=1转为stream,然后php进行curl的时候设置CURLOPT_INFILECURLOPT_INFILESIZECURLOPT_UPLOAD。这样操作下来虽然influxb虽然返回了204,但是数据并没有正确插入。

最后我使用了以下的代码实现了功能:

1
2
3
4
5
6
7
8
$ch = curl_init();//init
curl_setopt($ch, CURLOPT_TIMEOUT, 1); //一秒超时
curl_setopt($ch, CURLOPT_URL, "http://127.0.0.1:8086/write?db=metrics");
curl_setopt($ch, CURLOPT_BINARYTRANSFER, TRUE);//二进制传输
curl_setopt($ch, CURLOPT_USERPWD, '123');//权限认证
curl_setopt($ch, CURLOPT_POSTFIELDS, 'test,host=localhost count=1');//写操作只能用post
curl_exec($ch);
curl_close($ch);