Я создаю пиксель отслеживания и использовал этот ответ в качестве отправной точки. Тем не менее, все работает нормально, пока я не попытаюсь вставить данные в базу данных. В этот момент я получаю 500 (Внутренняя ошибка сервера).
Это мой код:
<?php
$im=imagecreate(1,1);
$white=imagecolorallocate($im,255,255,255);
imagesetpixel($im,1,1,$white);
header("content-type:image/jpg");
imagejpeg($im);
imagedestroy($im);
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];
function getUserIP() {
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];
if(filter_var($client, FILTER_VALIDATE_IP)) {
$ip = $client;
} else if (filter_var($forward, FILTER_VALIDATE_IP)) {
$ip = $forward;
} else {
$ip = $remote;
}
return $ip;
}
$user_ip = getUserIP();
$ip_integer = ip2long($user_ip);
$web_url = 'myurl.com';
$sqlWebLeads = "INSERT INTO ip_details (ip_address, web_url)
VALUES ('$ip_integer','$web_url')";
$wpdb->query($sqlWebLeads);
?>
Есть идеи?
Он работает на WordPress сайте, так
$wpdb->query
является глобальной функцией и обычно не требует определения.
Это не волшебство, поэтому, если вы создадите отдельный php-файл, он не будет иметь глобально определенный объект WordPress, как ваш $wpdb
Ссылка на БД.
Вы должны установить этот объект на своей странице, чтобы использовать его, посмотрите на Используете WPDB в автономном скрипте?
$path = $_SERVER['DOCUMENT_ROOT']; include_once $path . '/wp-config.php'; include_once $path . '/wp-load.php'; include_once $path . '/wp-includes/wp-db.php'; include_once $path . '/wp-includes/pluggable.php'; // $wpdb is available, do stuff
Проблема (как правильно указал @Blag) заключалась в том, что запрос $ wpdb-> работает только в рамках WordPress, то есть, если загружены все файлы WordPress. Таким образом, мое решение, которое сейчас работает, было создать новое автономное соединение с базой данных, используя функцию MySQLi. Я разместил свой код ниже для всех, кто сталкивался с той же проблемой, а также как рабочий код для создания пикселя отслеживания в WordPress.
Спасибо @Blag за помощь в получении этого ответа.
<?php
$im=imagecreate(1,1);
$white=imagecolorallocate($im,255,255,255);
$transparent = imagecolortransparent($im,$white);
imagesetpixel($im,1,1,$white);
header("content-type:image/png");
imagepng($im);
imagedestroy($im);
function getUserIP()
{
$client = @$_SERVER['HTTP_CLIENT_IP'];
$forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
$remote = $_SERVER['REMOTE_ADDR'];
if(filter_var($client, FILTER_VALIDATE_IP))
{ $ip = $client; }
elseif(filter_var($forward, FILTER_VALIDATE_IP))
{ $ip = $forward; }
else
{ $ip = $remote; }
return $ip;
}
$user_ip = getUserIP();
$ip_integer = ip2long($user_ip);
$web_url = 'myurl.com';
$servername = "XXXXXX";
$username = "XXXXXX";
$password = "XXXXXX";
$dbname = "XXXXXX";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); }
$sql = "INSERT INTO ip_details (ip_address, web_url) VALUES ('$ip_integer','$web_url')";
if ($conn->query($sql) === TRUE) { echo "New record created successfully";}
else { echo "Error: " . $sql . "<br>" . $conn->error;}
$conn->close();
?>