使用CURL发布到文件...不接受变量

时间:2014-03-10 15:16:00

标签: php

使用Curl

发布到文件

我正在尝试在用户进入网站后立即发布文件,假设他们点击了广告。

示例网址= http://myFabSite.com/?tr=213

这是我正在尝试的但它没有捕获tr网址变量或引荐来源:

if($_GET['tr']){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, "http://myFabSite.com/actions/tracksAds.php");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, true);

    $data = array(
        'referrer' => $_SERVER['HTTP_REFERER'],
        'track_code' => $_GET['tr']
    );

    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    $output = curl_exec($ch);
    $info = curl_getinfo($ch);
    curl_close($ch);    
}

trackAds.php:

$mysqli = dbConnect();

$referrer = $mysqli->real_escape_string(urldecode(trim($_REQUEST['referrer'])));
$track_code = $mysqli->real_escape_string($_REQUEST['track_code']);

$query = "insert into ad_tracking ( tracking_code, referrer ) VALUES ( '$track_code', '$referrer' )"; 

$result = $mysqli->query($query);

有什么明显的吗?

更新

这来自print_r($data);

Array
(
[referrer] => none
[track_code] => fb1
)

这是来自trackAds.php的$ query

insert into ad_tracking ( tracking_code, referrer ) VALUES ( '', '' )

因此,数组未完全或正确地传递给trackAds.php

2 个答案:

答案 0 :(得分:0)

您在第一行的$_GET[tr]中缺少引号。将其更改为$_GET['tr']

另外,在$_POST中使用$_REQUEST代替trackAds.php。这里很有可能你无意中获得了cookie值而不是POST值,或者只是在$_REQUEST中有错误的数据。 See this page in the documentation

答案 1 :(得分:0)

实际上找到了一种不同的方法,但仍然不知道为什么其他方法没有。

这假定PHP 5 +

    $url = 'http://myFabSite.com/actions/tracksAds.php';
    $data = array('referrer' => $_SERVER['HTTP_REFERER'], 'track_code' => $_GET['tr']);

    // use key 'http' even if you send the request to https://...
    $options = array(
        'http' => array(
            'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
            'method'  => 'POST',
            'content' => http_build_query($data),
        ),
    );
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);