Перейти к содержанию

Автоматическое обновление браузера 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 месяц спустя...

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

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...