gpt4 book ai didi

php - Measurement Protocol 位置错误

转载 作者:行者123 更新时间:2023-12-03 15:46:45 29 4
gpt4 key购买 nike

我编写了以下类来通过 GoogleAnalytics 测量我的服务器端流量测量协议(protocol)。

问题是所有活跃的访问者都来自我的服务器当前所在的意大利 - 我假设问题原因来自 fsockopen请求 IP 那么有没有办法发送用户真实 IP 地址呢?

<?php
class GoogleAnalytics {

public function sendHit($method = null, $info = null) {
if ($method && $info) {
// Standard params
$v = 1;
$tid = "UA-xxxxxx-xx";
$cid = $this->gaParseCookie();
// Register a PAGEVIEW
if ($method === 'pageview') {
// Send PageView hit
$data = array(
'v' => $v,
'tid' => $tid,
'cid' => $cid,
't' => 'pageview',
'dh' => 'xyz.com',
'dt' => $info['title'],
'dp' => $info['path']
);
// Send the data
$this->gaFireHit($data);
}
}
}

// Handle the parsing of the _ga cookie or setting it to a unique identifier
private function gaParseCookie() {
if (isset($_COOKIE['_ga'])) {
list($version, $domainDepth, $cid1, $cid2) = split('[\.]', $_COOKIE["_ga"], 4);

$contents = array(
'version' => $version,
'domainDepth' => $domainDepth,
'cid' => $cid1 . '.' . $cid2
);

$cid = $contents['cid'];
} else {
$cid = $this->gaGenUUID();
}

return $cid;
}

// Generate UUID v4 function - needed to generate a CID when one isn't available
private function gaGenUUID() {
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
// 32 bits for "time_low"
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
// 16 bits for "time_mid"
mt_rand(0, 0xffff),
// 16 bits for "time_hi_and_version",
// four most significant bits holds version number 4
mt_rand(0, 0x0fff) | 0x4000,
// 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1
mt_rand(0, 0x3fff) | 0x8000,
// 48 bits for "node"
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
}

// See https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide
private function gaFireHit($data = null) {
if ($data)
return $this->socketPost('http://www.google-analytics.com/collect', $data);

return false;
}

private function socketPost($url, $params = array(), $ua = null) {
// create POST string
$post_params = array();

foreach ($params as $key => &$val) {
$post_params[] = $key . '=' . urlencode($val);
}

$post_string = implode('&', $post_params);

// get URL segments
$parts = parse_url($url);

// workout port and open socket
$port = isset($parts['port']) ? $parts['port'] : 80;
$success = $fp = @fsockopen($parts['host'], $port, $errno, $errstr, 30);

if ($fp) {
// create output string
$output = "POST " . $parts['path'] . " HTTP/1.1\r\n";
if (is_string($ua))
$output .= "User-Agent: " . $ua . "\r\n";
$output .= "Host: " . $parts['host'] . "\r\n";
$output .= "Content-Type: application/x-www-form-urlencoded\r\n";
$output .= "Content-Length: " . strlen($post_string) . "\r\n";
$output .= "Connection: Close\r\n\r\n";
$output .= isset($post_string) ? $post_string : '';
// send output to $url handle
$success = fwrite($fp, $output);

fclose($fp);
}

return $success ? true : false;
}
}
?>

任何建议将不胜感激...

最佳答案

最后谷歌将此功能添加到测量协议(protocol)中,也可以覆盖用户代理。

IP Override
parameter: &uip
Should be a valid IP address. This will always be anonymized just as though &aip (anonymize IP) had been used.
example: &uip=1.2.3.4

User Agent Override
parameter: &ua
Should be a User Agent reported by the browser (don't forget to URL encode the value!). Note: We have libraries to identify real user agents. Hand crafting your own agent could break at any time.
example: &ua=Opera%2F9.80%20(Windows%20NT%206.0)%20Presto%2F2.12.388%20Version%2F12.14

Source

关于php - Measurement Protocol 位置错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21739611/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com