1

我正在创建一个跟踪像素,并以此答案为起点。但是,在我尝试将数据插入数据库之前,一切正常。那时我得到一个 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);
?>

有任何想法吗?

4

2 回答 2

0

它在 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
于 2017-01-09T01:18:11.317 回答
0

问题(正如@Blag 正确指出的那样)是 $wpdb->query 仅适用于 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();
?>
于 2017-01-09T07:49:47.640 回答