ОБНОВИТЬ Несмотря на то, что он работает нормально, я написал его так, что если один и тот же сайт просматривался более одного раза, он не был снова добавлен, а скорее увеличен … ха-ха, я не знаю свой собственный код
Я написал этот скрипт здесь, он несколько избыточен, поскольку записывает в две разные таблицы, но единственное отличие состоит в том, что один считает количество просмотров, а другой — новые ips. Я полагаю, я мог бы переделать их.
Проблема в том, что трекер не всегда срабатывает. С чего бы это?
<?php
mysqli_report(MYSQLI_REPORT_OFF);
error_reporting(E_ALL);
error_reporting(-1);
ini_set('display_errors',true);
function track() {
$ip = "my ip";
$client_ip = $_SERVER['REMOTE_ADDR'];
require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR.'dbconnect.php');
$link = new mysqli("$servername", "$username", "$password", "$dbname");
$actual_link = "http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
if($client_ip!=$ip){
$stmt = $link->prepare('SELECT website_url FROM website_views where website_url=?');
$stmt->bind_param('s',$actual_link);
if($stmt->execute())
{
// means it exists
$stmt->bind_result($website_url_from_db);
if($stmt->fetch())
{
$link = new mysqli("$servername", "$username", "$password", "$dbname");
$id = "";
$stmt = mysqli_prepare($link, "UPDATE website_views SET views=views+1 where website_url=?");
$stmt->bind_param('s',$actual_link);
$stmt->execute();
$link = new mysqli("$servername", "$username", "$password", "$dbname");
$stmt = $link->prepare('SELECT client_ip FROM views where client_ip=?');
$stmt->bind_param('s',$client_ip);
if($stmt->execute()){
$link = new mysqli("$servername", "$username", "$password", "$dbname");
$stmt = mysqli_prepare($link, "UPDATE views SET num_times=num_times+1 where client_ip=? and website_url=?");
$stmt->bind_param('ss',$client_ip,$actual_link);
$stmt->execute();
}else{
$num_times = 1;
$link = new mysqli("$servername", "$username", "$password", "$dbname");
$stmt = mysqli_prepare($link, "INSERT INTO views VALUES (?,?,?,?)");
$stmt->bind_param('issi',$id,$actual_link,$client_ip,$num_times);
$stmt->execute();
}
}else{
$link = new mysqli("$servername", "$username", "$password", "$dbname");
$id = "";
$website_url = $actual_link;
$views = 1;
$ip = $client_ip;
$num_times=1;
$stmt = mysqli_prepare($link, "INSERT INTO website_views VALUES (?,?,?)");
$stmt->bind_param('isi',$id,$website_url,$views);
$stmt->execute();
$link = new mysqli("$servername", "$username", "$password", "$dbname");
$stmt = mysqli_prepare($link, "INSERT INTO views VALUES (?,?,?,?)");
$stmt->bind_param('issi',$id,$actual_link,$client_ip,$num_times);
$stmt->execute();
}
}
}
}
track();
?>
пытаться
$ipAddress = $_SERVER['REMOTE_ADDR'];
if (array_key_exists('HTTP_X_FORWARDED_FOR', $_SERVER)) {
$ipAddress = array_pop(explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']));
}
также проверьте print_r ($ _SERVER), чтобы убедиться, что он дает вам то, что вы ожидаете.
Других решений пока нет …