Автоматическое обновление браузера firefox и flash плагина

Для обновления браузера 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 вы запускали с помощью другой команды, то может потребоваться изменить команду запуска в меню автозагрузки и в меню запуска приложений.

Можно запускать обновление не вручную, а по расписанию, допустим 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”