ytf 4 Posted September 23, 2019 Report Share Posted September 23, 2019 Для обновления браузера firefox и flash плагина я написал php скрипт, который состоит из директории 777 ( всем пользователям даны права на запись в эту директорию), файла nget.php и файла obnov.php, все файлы можно разместить на одном из локальных сайтов. Содержимое файла nget.php <?php define("KURL_LOGIROVANIE", false); // true - если нужно сохранять ответы на http запросы в текстовый файл, иначе - false define("FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV", __DIR__.'/777/curl_zaprosy.txt'); // путь к текстовому файлу, в который будут записываться URL адреса страниц, ошибки, результаты запросов define("FILE_DLYA_ZAPISI_KUKIS", __DIR__.'/777/curl_kuki.txt'); // путь к текстовому файлу, в который будут записываться кукис define("KURL_PAUZA", 50); // на какое число микросекунд скрипт засыпает перед следующим http запросом $last_curl_url = array(); // последний открытый сетевой адрес // сетевой запрос /* Параметры массива add: * yupi - строка логин:пароль для http авторизации * xml - добавляет заголовок ajax запроса * json - согласие получить в ответ json * post - массив данных, отправляемых формой * multi - массив данных, отправляемых формой в виде multipart-formdata * move - ограничить число допустимых редиректов, по умолчанию 5 * top - включать заголовок в ответ функции, по умолчанию да * save - сохранить ответ в файл с именем * proxy - прокси * ref - ссылка, с которой мы перешли * req - request запрос * nobody - получение только заголовков header */ function nget($url="",$add=array()) { file_put_contents(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV, $url."\n", 8); if (!function_exists("curl_init")) return fget($url,$add); if (!($curl = curl_init())) return NULL; curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_COOKIEJAR, FILE_DLYA_ZAPISI_KUKIS); curl_setopt($curl, CURLOPT_COOKIEFILE, FILE_DLYA_ZAPISI_KUKIS); curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (X11; Linux x86_64; rv:69.0) Gecko/20100101 Firefox/69.0'); if (isset($add['yupi'])) curl_setopt($curl, CURLOPT_USERPWD, $add['yupi']); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false); $headers = array(); if (isset($add['xml'])) { // ajax запрос $headers[] = 'X-Requested-With: XMLHttpRequest'; }; if (isset($add['nobody'])) { // header запрос curl_setopt($curl, CURLOPT_NOBODY, 1); $add['move'] = 0; $add['top'] = 1; }; if (isset($add['json'])) { // json запрос $headers[] = 'Accept: application/json'; }; if (isset($add['post'])) { // post запрос curl_setopt($curl,CURLOPT_POST, TRUE); curl_setopt($curl,CURLOPT_POSTFIELDS, http_build_query($add['post'])); }; if (isset($add['multi'])) { // post multi/part запрос curl_setopt($curl,CURLOPT_POST, TRUE); curl_setopt($curl,CURLOPT_POSTFIELDS, $add['multi']); }; if (isset($add['req'])) { // request запрос curl_setopt($curl,CURLOPT_CUSTOMREQUEST, "POST"); curl_setopt($curl,CURLOPT_POSTFIELDS, $add['req']); $headers[] = 'Content-Type: application/json'; }; if (!isset($add['move'])) $add['move'] = 5; if ($add['move']>0) { // разрешены редиректы $add['top'] = true; // включать header в ответ } if (!isset($add['top']) OR isset($add['save'])) $add['top']=false; curl_setopt($curl, CURLOPT_HEADER, $add['top']); if (isset($add['proxy'])) curl_setopt($curl, CURLOPT_PROXY, $add['proxy']); if (isset($add['ref'])) curl_setopt($curl, CURLOPT_REFERER, $add['ref']); curl_setopt($curl, CURLOPT_RETURNTRANSFER, (isset($add['save'])?false:true)); if (isset($add['save'])) { // сохранить файл в if (FALSE===($out = fopen($add['save'],"w+"))) { file_put_contents(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV,"failed opening of file ".$add['save']."\n",8); exit; } curl_setopt($curl, CURLOPT_FILE, $out); } curl_setopt($curl, CURLOPT_FORBID_REUSE, false); curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, isset($add['time'])?$add['time']:120); curl_setopt($curl, CURLOPT_TIMEOUT, isset($add['time'])?$add['time']:120); $no_header_params = array('xml','json','post','move','top','save','yupi','ref','proxy','multi','req','time','nobody'); if (!empty($add)) foreach ($add as $k=>$h) if (!in_array($k,$no_header_params)) $headers[] = $h; if (!empty($headers)) curl_setopt($curl, CURLOPT_HTTPHEADER, $headers); global $last_curl_url; $last_curl_url[] = $url; while (1) { usleep(KURL_PAUZA); $data = curl_exec($curl); if (KURL_LOGIROVANIE==true) file_put_contents(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV, $data, 8); $curl_errno = curl_errno($curl); if ($curl_errno > 0 AND $curl_errno!=28) { file_put_contents(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV,'cURL Error ('.$curl_errno.'): '.curl_error($curl)." on curl ".var_export($last_curl_url,1)."\n",8); curl_close($curl); exit; } if ($add['move']<1) break; $code = curl_getinfo($curl, CURLINFO_HTTP_CODE); if ($code != 301 && $code != 302) break; $header_start = strpos($data, "\r\n")+2; $headers = substr($data, $header_start, strpos($data, "\r\n\r\n", $header_start)+2-$header_start); if (!preg_match("!\r\n(?:Location|URI): *(.*?) *\r\n!", $headers, $matches)) break; $newurl = $matches[1]; if (!strpos($newurl, "//")) { $old_url_parts=explode("//",end($last_curl_url)); $old_url_http_part=$old_url_parts[0]; $old_url_host_part=explode("/",$old_url_parts[1]); $newurl=$old_url_http_part.'//'.$old_url_host_part[0].$newurl; } curl_setopt($curl, CURLOPT_URL, $newurl); file_put_contents(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV, $newurl."\n", 8); $last_curl_url[] = $newurl; $add['move']--; // уменьшение числа разрешённых редиректов }; curl_close($curl); if (!$add['top']) { $ah = strpos($data, "\r\n\r\n")+4; if ($ah<200 AND substr($data,0,21)=='HTTP/1.1 100 Continue') $ah = strpos($data, "\r\n\r\n", $ah)+4; $data = substr($data, $ah); } if (isset($add['save'])) { fclose($out); return 1; } return $data; } /* аналог curl с помощью file_get_contents */ function fget($url="",$add=array()) { $arrContextOptions=array( "ssl"=>array( "verify_peer"=>false, "verify_peer_name"=>false, ), "http"=>array( "user_agent"=>'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0' ) ); $headers = array(); if (isset($add['xml'])) { // ajax запрос $headers[] = 'X-Requested-With: XMLHttpRequest'; }; if (isset($add['json'])) { // json запрос $headers[] = 'Accept: application/json'; }; if (isset($add['post'])) { // post запрос $arrContextOptions['http']['method'] = "POST"; $arrContextOptions['http']['content'] = http_build_query($add['post']); }; if (isset($add['multi'])) { // post multi/part запрос $arrContextOptions['http']['method'] = "POST"; $arrContextOptions['http']['content'] = $add['multi']; }; if (isset($add['req'])) { // request запрос $arrContextOptions['http']['method'] = "POST"; $arrContextOptions['http']['content'] = $add['req']; $headers[] = 'Content-Type: application/json'; }; if (!isset($add['move'])) $add['move'] = 5; if ($add['move']>0) { // разрешены редиректы $add['top'] = true; // включать header в ответ } if (!isset($add['top']) OR isset($add['save'])) $add['top']=false; if (isset($add['proxy'])) $arrContextOptions['http']['proxy'] = $add['proxy']; if (isset($add['ref'])) $headers[] = 'Referer: '.$add['ref']; if (isset($add['save'])) { // сохранить файл в if (FALSE===($out = fopen($add['save'],"w+"))) { file_put_contents(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV,"failed opening of file ".$add['save']."\n",8); exit; } } $arrContextOptions['http']['timeout'] = isset($add['time'])?$add['time']:10; $no_header_params = array('xml','json','post','move','top','save','yupi','ref','proxy','multi','req','time'); if (!empty($add)) foreach ($add as $k=>$h) if (!in_array($k,$no_header_params)) $headers[] = $h; if (isset($add['yupi'])) $headers[] = 'Authorization : Basic '.base64_encode($add['yupi']); if (!empty($headers)) $arrContextOptions['http']['header'] = $headers; global $last_curl_url; $last_curl_url[] = $url; usleep(KURL_PAUZA); $data = file_get_contents($url, false, stream_context_create($arrContextOptions)); if (KURL_LOGIROVANIE==true) file_put_contents(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV, $data, 8); if (isset($add['save'])) { fclose($out); return 1; } return $data; } // сетевой запрос, скачивающий файл с помощью консольной команды wget function wget($url="",$filename="") { if (function_exists('system')) { usleep(KURL_PAUZA); system('wget -O '.$filename.' '.$url,$retval); } else return false; return ($retval===0); } // найти участок кода между двух строк function iska($nachalo, $konec, $string) { if (!preg_match('/'.preg_quote($nachalo,'/').'(.*)'.preg_quote($konec,'/').'/ismU',$string,$nashli)) return ''; return $nashli[1]; } // удалить участок кода между двух строк function udal($nachalo, $konec, $string) { return preg_replace('/'.preg_quote($nachalo,'/').'.*'.preg_quote($konec,'/').'/ismU','',$string); } // очистка логов запросов function ochistka_logov_zaprosov() { file_put_contents(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV, ""); } // проверка, давно ли не было запросов function dolgo_ne_bylo_http_zaprosov($dolgo=50) { $a = time(); $b = filemtime(FILE_DLYA_ZAPISI_POLUCHENNYH_OTVETOV); if ( ($a-$b)>$dolgo ) return true; else return false; } Содержимое файла obnov.php <?php ignore_user_abort(true); ini_set("max_execution_time",3600); ini_set("memory_limit","1200M"); require 'nget.php'; $f=time(); $wd=__DIR__.'/777/'; // директория для записи файлов $u = "https://download.mozilla.org/?product=firefox-latest-ssl&os=linux64&lang=ru"; var_dump($u); $h=nget($u, array('nobody'=>1)); //echo $h; $n=iska('releases/','/',$h); var_dump($n); $o=1; // обновлять ли программу if (file_exists($wd.'firefox.version')) { $pn=file_get_contents($wd.'firefox.version'); if ($pn==$n) $o=0; } file_put_contents($wd.'firefox.version',$n); if ($o) { if (preg_match("!\r\n(?:Location|URI): *(.*?) *\r\n!", $h, $matches)) { $newurl = $matches[1]; var_dump($newurl); unlink($wd.'firefox.tar.bz2'); nget($newurl, array('save'=>$wd.'firefox.tar.bz2')); $output = shell_exec('tar -vxjf '.$wd.'firefox.tar.bz2 -C /opt'); file_put_contents($wd.'firefox.output.txt',$output); } } echo 'firefox ok'; echo "\n"; $u = "https://get.adobe.com/ru/flashplayer/"; var_dump($u); $h=nget($u, array()); //echo $h; $n=trim(iska('Версия','<',$h)); var_dump($n); $o=1; // обновлять ли программу if (file_exists($wd.'flash.version')) { $pn=file_get_contents($wd.'flash.version'); if ($pn==$n) $o=0; } file_put_contents($wd.'flash.version',$n); if ($o) { $h1 = iska('case "3":','case "4":',$h); var_dump($h1); $h2 = iska('$("#buttonDownload").attr("href","','"',$h1); var_dump($h2); if ($h2!=='') { $h=nget("https://get.adobe.com/".$h2, array()); $newurl = iska("location.href = '","'",$h); sleep(2); unlink($wd.'flash.tar.gz'); var_dump($newurl); nget($newurl, array('save'=>$wd.'flash.tar.gz')); $output = shell_exec('tar -xzvf '.$wd.'flash.tar.gz -C /usr/lib/mozilla/plugins libflashplayer.so'); $output2 = shell_exec('tar -xzvf '.$wd.'flash.tar.gz -C / usr'); file_put_contents($wd.'flash.output.txt',$output."\n".$output2); } } echo 'flash ok'; echo "\n"; Для обновления браузера firefox и flash плагина достаточно в терминале выполнить команду sudo php -q /директория_в_которой_находятся_файлы_сайта/obnov.php Если php не установлен, его можно установить с помощью команды sudo apt-get install php Поскольку скрипт устанавливает программу firefox в директорию opt, для запуска firefox нужно будет использовать команду /opt/firefox/firefox -P default Если раньше firefox вы запускали с помощью другой команды, то может потребоваться изменить команду запуска в меню автозагрузки и в меню запуска приложений. Quote Link to post Share on other sites
ytf 4 Posted November 3, 2019 Author Report Share Posted November 3, 2019 Можно запускать обновление не вручную, а по расписанию, допустим 1 раз при каждом включении пк. Если файлы сайта располагаются в директории /var/www/s1.local, то можно создать файл /var/www/s1.local/check.online.sh #!/bin/bash INTERNET_STATUS="" while [ "$INTERNET_STATUS" != "UP" ] do ping -c 1 -W 0.7 8.8.4.4 > /dev/null 2>&1 if [ $? -eq 0 ] ; then INTERNET_STATUS="UP" else sleep 4 fi done; php -q /var/www/s1.local/obnov.php >> /home/user/obnovlenie_firefox_i_flash.txt 2>&1 Открыть терминал и выполнить команду: sudo crontab -e , добавить в конец файла строку @reboot /var/www/s1.local/check.online.sh Сохранить изменения с помощью двух команд "Ctrl+O", "Ctrl+X" Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.