2016-11-07 188 views
1

我想上传一个.csv文件到谷歌分析通过PHP。不幸的是,谷歌分析API没有提供保存文件名的方法,所以我试图用cURL上传文件。我被卡住了,主要是因为我不知道如何正确地将cURL命令转换为php代码。谷歌分析上传文件与cURL

这是卷曲的命令,成功上传文件,这意味着它不正是我想要的东西,发现here

curl -X POST -F "[email protected];type=application/octet-stream" "https://www.googleapis.com/upload/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-1/customDataSources/CUSTOMDATASOURCEID/uploads?access_token=ya29.REPLACEWIHTYOURVALIDTOKEN" -v 

我试图通过以下方式翻译上面的命令到PHP代码,但我做错了什么,因为一个无效的文件正在上传(可能是一个空文件?)。

尝试1:

$parameters = [ 
     'upload' => '@/local/path/to/my/file/test2.csv;type=application/octet-stream', 
    ]; 
    $url = 'https://www.googleapis.com/upload/analytics/v3/management/accounts/' . 
     $account->code . 
     '/webproperties/' . 
     $property->code . 
     '/customDataSources/' . 
     $datasource->code . 
     '/uploads?access_token=' . 
     $this->client->getAccessToken()['access_token'] 
    ; 
    $process = curl_init($url); 
    curl_setopt($process, CURLOPT_HTTPHEADER, array('Accept: application/json')); 
    curl_setopt($process, CURLOPT_HEADER, false); 
    curl_setopt($process, CURLOPT_CUSTOMREQUEST, 'POST'); 
    curl_setopt($process, CURLOPT_TIMEOUT, 30); 
    curl_setopt($process, CURLOPT_UPLOAD, true); 
    curl_setopt($process, CURLOPT_POSTFIELDS, $parameters); 
    curl_setopt($process, CURLOPT_RETURNTRANSFER, true); 
    $return = curl_exec($process); 
    $httpcode = curl_getinfo($process, CURLINFO_HTTP_CODE); 
    curl_close($process); 
    // Runs, but the upload is invalid. 

尝试2

// Same as above, except the $parameters set like this 
$parameters = [ 
    'upload' => '@/local/path/to/my/file/test2.csv', 
    'type' => 'application/octet-stream', 
]; 

尝试3

// Same as above, except the $parameters set like this 
$cfile = new \CURLFile('/local/path/to/my/file/test2.csv','application/octet-stream','upload'); 
$parameters = [ 
    'upload' => $cfile, 
    'type' => 'application/octet-stream', 
]; 

我做,我不能甚至现在还记得很多其他的尝试。我不敢相信,当我已经有了可行的命令,并且我需要将它转换为代码时,它很难实现它。希望有人能帮助我,这要多谢!

编辑

总之,我需要做的是翻译下面的curl命令到PHP代码:

curl -X POST -F "[email protected];type=application/octet-stream" "https://www.googleapis.com/upload/analytics/v3/management/accounts/XXXXXX/webproperties/UA-XXXXXX-1/customDataSources/CUSTOMDATASOURCEID/uploads?access_token=ya29.REPLACEWIHTYOURVALIDTOKEN" 

回答

0

好,2个星期后,我仍然无法找到一个解决方案,所以我最终使用了exec。是的,我知道我知道,不好的练习等,但我坚持下去,直到我找到一个方法来做到这一点。

不管怎样,万一有人是一个解决方案,我为绝望了,这是我结束了

$result = exec('curl -X POST -F "[email protected]' . $fullPathToFile . ';type=application/octet-stream" "' . $url . '"', $output, $return_var);