/etc/pihole/setupVars.conf"); } // Set landing page location, found within /var/www/html/ $landPage = "../landing.php"; // Set empty array for hostnames to be accepted as self address for splash page $authorizedHosts = []; // Append FQDN to $authorizedHosts if (!empty($svFQDN)) array_push($authorizedHosts, $svFQDN); // Append virtual hostname to $authorizedHosts if (!empty($_SERVER["VIRTUAL_HOST"])) { array_push($authorizedHosts, $_SERVER["VIRTUAL_HOST"]); } // Set which extension types render as Block Page (Including "" for index.wxyz) $validExtTypes = array("asp", "htm", "html", "php", "rss", "xml", ""); // Get extension of current URL $currentUrlExt = pathinfo($_SERVER["REQUEST_URI"], PATHINFO_EXTENSION); // Check if this is served over HTTP or HTTPS if(isset($_SERVER['HTTPS'])) { if ($_SERVER['HTTPS'] == "on") { $proto = "https"; } else { $proto = "http"; } } // Set mobile friendly viewport $viewPort = ''; // Set response header function setHeader($type = "x") { header("X-Pi-hole: A black hole for Internet advertisements."); if (isset($type) && $type === "js") header("Content-Type: application/javascript"); } // Determine block page redirect type if ($serverName === "pi.hole") { exit(header("Location: /admin")); } elseif (filter_var($serverName, FILTER_VALIDATE_IP) || in_array($serverName, $authorizedHosts)) { // Set Splash Page output $splashPage = " $viewPort
Pi-hole: Your black hole for Internet advertisements "; // Render splash page or landing page when directly browsing via IP or auth'd hostname $renderPage = is_file(getcwd()."/$landPage") ? include $landPage : "$splashPage"; unset($serverName, $svFQDN, $svPasswd, $svEmail, $authorizedHosts, $validExtTypes, $currentUrlExt, $viewPort); exit($renderPage); } elseif ($currentUrlExt === "js") { // Serve dummy Javascript for blocked domains exit(setHeader("js").'var x = "Pi-hole: A black hole for Internet advertisements."'); } elseif (strpos($_SERVER["REQUEST_URI"], "?") !== FALSE && isset($_SERVER["HTTP_REFERER"])) { // Serve blank image upon receiving REQUEST_URI w/ query string & HTTP_REFERRER (e.g: an iframe of a blocked domain) exit(setHeader().' '); } elseif (!in_array($currentUrlExt, $validExtTypes) || substr_count($_SERVER["REQUEST_URI"], "?")) { // Serve SVG upon receiving non $validExtTypes URL extension or query string (e.g: not an iframe of a blocked domain) $blockImg = 'Blocked by Pi-hole'; exit(setHeader()." $viewPort $blockImg "); } /* Start processing Block Page from here */ // Determine placeholder text based off $svPasswd presence $wlPlaceHolder = empty($svPasswd) ? "No admin password set" : "Javascript disabled"; // Define admin email address text $bpAskAdmin = !empty($svEmail) ? '' : ""; // Determine if at least one block list has been generated if (empty(glob("/etc/pihole/list.0.*.domains"))) die("[ERROR] There are no domain lists generated lists within /etc/pihole/! Please update gravity by running pihole -g, or repair Pi-hole using pihole -r."); // Set location of adlists file if (is_file("/etc/pihole/adlists.list")) { $adLists = "/etc/pihole/adlists.list"; } elseif (is_file("/etc/pihole/adlists.default")) { $adLists = "/etc/pihole/adlists.default"; } else { die("[ERROR] File not found: /etc/pihole/adlists.list"); } // Get all URLs starting with "http" or "www" from adlists and re-index array numerically $adlistsUrls = array_values(preg_grep("/(^http)|(^www)/i", file($adLists, FILE_IGNORE_NEW_LINES))); if (empty($adlistsUrls)) die("[ERROR]: There are no adlist URL's found within $adLists"); // Get total number of blocklists (Including Whitelist, Blacklist & Wildcard lists) $adlistsCount = count($adlistsUrls) + 3; // Get results of queryads.php exact search ini_set("default_socket_timeout", 3); function queryAds($serverName) { // Determine the time it takes while querying adlists $preQueryTime = microtime(true)-$_SERVER["REQUEST_TIME_FLOAT"]; $queryAds = file("http://127.0.0.1/admin/scripts/pi-hole/php/queryads.php?domain=$serverName&bp", FILE_IGNORE_NEW_LINES); $queryAds = array_values(array_filter(preg_replace("/data:\s+/", "", $queryAds))); $queryTime = sprintf("%.0f", (microtime(true)-$_SERVER["REQUEST_TIME_FLOAT"]) - $preQueryTime); // Exception Handling try { if ($queryTime >= ini_get("default_socket_timeout")) { throw new Exception ("Connection timeout (".ini_get("default_socket_timeout")."s)"); } elseif (!strpos($queryAds[0], ".") !== false) { if (strpos($queryAds[0], "No exact results") !== FALSE) return array("0" => "none"); throw new Exception ("Unhandled error message ($queryAds[0])"); } return $queryAds; } catch (Exception $e) { return array("0" => "error", "1" => $e->getMessage()); } } $queryAds = queryAds($serverName); if ($queryAds[0] === "error") { die("[ERROR]: Unable to parse results from queryads.php: ".$queryAds[1].""); } else { $featuredTotal = count($queryAds); // Place results into key => value array $queryResults = null; foreach ($queryAds as $str) { $value = explode(" ", $str); @$queryResults[$value[0]] .= "$value[1]"; } } // Determine if domain has been blacklisted, whitelisted, wildcarded or CNAME blocked if (strpos($queryAds[0], "blacklist") !== FALSE) { $notableFlagClass = "blacklist"; $adlistsUrls = array("π" => substr($queryAds[0], 2)); } elseif (strpos($queryAds[0], "whitelist") !== FALSE) { $notableFlagClass = "noblock"; $adlistsUrls = array("π" => substr($queryAds[0], 2)); $wlInfo = "recentwl"; } elseif (strpos($queryAds[0], "wildcard") !== FALSE) { $notableFlagClass = "wildcard"; $adlistsUrls = array("π" => substr($queryAds[0], 2)); } elseif ($queryAds[0] === "none") { $featuredTotal = "0"; $notableFlagClass = "noblock"; // Determine appropriate info message if CNAME exists $dnsRecord = dns_get_record("$serverName")[0]; if (array_key_exists("target", $dnsRecord)) { $wlInfo = $dnsRecord['target']; } else { $wlInfo = "unknown"; } } // Set #bpOutput notification $wlOutputClass = (isset($wlInfo) && $wlInfo === "recentwl") ? $wlInfo : "hidden"; $wlOutput = (isset($wlInfo) && $wlInfo !== "recentwl") ? "$wlInfo" : ""; // Get Pi-hole Core version $phVersion = exec("cd /etc/.pihole/ && git describe --long --tags"); // Print $execTime on development branches // Marginally faster than "git rev-parse --abbrev-ref HEAD" if (explode("-", $phVersion)[1] != "0") $execTime = microtime(true)-$_SERVER["REQUEST_TIME_FLOAT"]; ?> ● <?=$serverName ?>

Open Source Ad Blocker Designed for Raspberry Pi

0) echo ''; ?>
 0) foreach ($queryResults as $num => $value) { echo "[$num]:$adlistsUrls[$num]\n"; } ?>
. Pi-hole ()