setCacheDir($favicons_dir); $favicon_url = $favicon_getter->get($website); if ($favicon_url === false) { return @copy($default_favicon, $dest); } $c = curl_init($favicon_url); curl_setopt($c, CURLOPT_HEADER, false); curl_setopt($c, CURLOPT_RETURNTRANSFER, true); curl_setopt($c, CURLOPT_BINARYTRANSFER, true); $img_raw = curl_exec($c); $status_code = curl_getinfo($c, CURLINFO_HTTP_CODE); curl_close($c); if ($status_code === 200) { $file = fopen($dest, 'w'); if ($file !== false) { fwrite($file, $img_raw); fclose($file); return true; } } return false; } function show_default_favicon() { global $default_favicon; header('HTTP/1.1 404 Not Found'); header('Content-Type: image/ico'); readfile($default_favicon); die(); } $id = isset($_SERVER['QUERY_STRING']) ? $_SERVER['QUERY_STRING'] : '0'; if (!ctype_xdigit($id)) { $id = '0'; } $txt = $favicons_dir . $id . '.txt'; $ico = $favicons_dir . $id . '.ico'; $ico_mtime = @filemtime($ico); $txt_mtime = @filemtime($txt); if (($ico_mtime == false) || ($txt_mtime > $ico_mtime)) { if ($txt_mtime == false) { show_default_favicon(); } $url = file_get_contents($txt); if (!download_favicon($url, $ico)) { show_default_favicon(); } } require(LIB_PATH . '/http-conditional.php'); header('Content-Type: image/x-icon'); header('Content-Disposition: inline; filename="' . $id . '.ico"'); if (!httpConditional($ico_mtime, 2592000, 2)) { readfile($ico); }