Jump to content
Sign in to follow this  
ytf

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

Recommended Posts

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...