PHP - Загрузите файл и запишите загрузку как событие Google Analytics

0

У меня есть код PHP, который позволяет клиенту загрузить файл (в частности, надстройку Excel) с моего сервера, щелкнув ссылку в электронном письме. Однако, прежде чем начать загрузку, я хочу записать загрузку в качестве события в Google Analytics, для чего требуется POST для google-analytics.com. Вот выдержка:

<?
//log download in Google Analytics
$url = 'http://www.google-analytics.com/collect';
$fields = array(
                                'v' => 1,
                                'tid' => 'UA-12345-1',
                                'cid' => '555',
                                't' => 'event',
                                'ec' => 'email',
                                'ea' => 'foo'
                                );

//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);

//execute post
$result = curl_exec($ch);

//close connection
curl_close($ch);

//initiate download
$filename = '/path/to/some/file.xlam';
header('Cache-Control: public');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header("Content-Type: application/octet-stream");       
header('Content-Disposition: attachment; filename="'.basename($filename).'"');
readfile($f);
exit;
?>

Хотя file.xlam, похоже, правильно загружается с этим кодом, во время этого процесса он как-то поврежден. Показания, что файл поврежден, это то, что

  1. Excel говорит так
  2. когда я щелкнул правой кнопкой мыши файл и выберите "Свойства", а затем вкладку "Детали", нет никаких деталей.

Если я удалю код curl_close() до curl_close()) и просто curl_close() часть, все будет хорошо. Я подозреваю, что это имеет какое-то отношение к "уже отправленным заголовкам", но не уверен. Есть ли обходной путь здесь?

Теги:
curl
post
google-analytics
download

1 ответ

0

Я обнаружил, что добавление CURLOPT_HEADER в 0 помогло.

то есть. добавьте следующую строку перед вашей линией CURLOPT_URL

curl_setopt($ch, CURLOPT_HEADER, 0);  // DO NOT RETURN HTTP HEADERS

Это останавливает заголовки, возвращаемые оператором CURL.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню