我向opencellid.org网站提供数据。他们有几个API选项来提交数据,但唯一的批量方法需要上传HTTP POST文件,并将API密钥作为POST字段。可接受的格式是CSV,JSON和CLF3。我将数据存储在SQL数据库中供内部使用,并定期将数据提交给opencellid。
目前,我用来向opencellid提交数据的脚本向SQL DB查询最近的测量结果,然后将其作为CSV文件保存在服务器上,然后立即通过HTTP POST上传。在我看来,这是不优雅的。
所以我的问题是,您是否可以直接从阵列上传CSV文件,而无需先在服务器上创建CSV文件?
这是我们目前使用的代码段。
//Create and save CSV
$output = fopen("opencellid.csv","w") or die();
fputcsv($output, array_keys($celldata[0]));
foreach($celldata as $cell) {
fputcsv($output, $cell);
}
fclose($output) or die();
//Upload CSV
$target_url = 'http://opencellid.org/measure/uploadCsv';
$file_name_with_full_path = realpath('./opencellid.csv');
$post = array('key' => 'opencellidapikey',
'datafile'=>'@'.$file_name_with_full_path.";type=text/plain");
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$target_url);
curl_setopt($ch, CURLOPT_POST,1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
$postresult = curl_exec ($ch);
有人可以建议一种直接从阵列上传CSV的方法吗?
答案 0 :(得分:1)
任意问题。我唯一能想到的是你用一个帖子的标题回显“csv数据”,它是一个csv文件。这不应该在服务器上创建一个文件。不确定如何处理它,但如果您运行set apache标头或您正在使用的任何服务器系统。试一试,让我知道它是否有效。