admLoki
генератор случайного PHP
- Регистрация
- 14 Сен 2006
- Сообщения
- 481
- Реакции
- 104
- Автор темы
- #1
Вчера лазил по интернету, нашел скрипт на перле для создания логального зеркала обновлений NOD32 .
Он мне не понравился, поэтому написал его же, но на PHP .
Один минус - пока не дописал возможность создания зеркала с официалки, но это временно .
Запускать сей скрипт лучше с консоли, либо кроном .
Он мне не понравился, поэтому написал его же, но на PHP .
Один минус - пока не дописал возможность создания зеркала с официалки, но это временно .
Запускать сей скрипт лучше с консоли, либо кроном .
PHP:
<?php
/**
* @name NOD32 AMC - automatic mirror creater
* @version 1.1
* @author CodexFactory
* @uses PHP5
* @uses sockets
*/
set_time_limit(0); //На всякий случай .
class nod32upd
{
/**
* Данный класс автоматически загружает файлы для обновления NOD32 с серверов-зеркал .
* На данный момент авторизация на официальных серверах не имплементирована .
* Необходимые переменные :
*
* @var string $server Удаленный сервер
* @var string $save_path Путь для сохранения файлов
* @var string $handler Не трогать вообще .
* @var array $updfiles Аналогично .
*/
public $server = 'http://nod32.vareza.net/';
public $save_path = '/webprojects/localhost.lan/public_html/nod32upd/';
private $handler = '';
private $updfiles = array();
#private $login = ''; //Will be implemented soon
#private $password = ''; //Will be implemented soon
/**
* Конструктор
*
* @return none
*/
public function nod32upd()
{
//Contructor
$this->checkUPDFiles();
}
/**
* Парсит файл update.ver и заносит данные в массив класса
* @param none
* @return null
*/
private function getNparse()
{
$this->handler = file_get_contents($this->server . 'update.ver');
preg_match_all("/file\=(.*)\n/",$this->handler,$file_parse);
$file_parse = array_pop($file_parse);
foreach($file_parse as $k => $v)
{
$this->updfiles[] = trim($v);
}
}
/**
* Проверяет, актуально ли текущее зеркало и качает обновление при необходимости .
* По пути удаляет старые файлы .
* @param none
* @return null
*/
private function checkUPDFiles()
{
if(count($this->updfiles == 1))
{
$this->getNparse();
}
if(file_exists($this->save_path . 'update.ver'))
{
if(crc32($this->handler) != crc32(file_get_contents($this->save_path . 'update.ver')))
{
@unlink($this->save_path . 'update.ver');
$fd = opendir('.');
while($file = readdir($fd))
{
if(preg_match("/.+?\.nup/",$file))
{
@unlink($file);
}
}
@file_put_contents($this->save_path . 'update.ver',$this->handler);
$this->getFiles();
}
else
{
print('All right.');
}
}
else
{
@file_put_contents($this->save_path . 'update.ver',$this->handler);
$this->getFiles();
}
}
/**
* Измененный алиас к saveContent()
* @see saveContent
* @param none
* @return null
*/
private function getFiles()
{
foreach ($this->updfiles as $k => $v)
{
$this->saveContent($this->server . $v,$this->save_path . $v);
}
}
/**
* Достает контент файла и инкрементно пишет его в новый файл .
* @param string $host Remote host
* @param string $path Remote file
* @return bool true|false
*/
private function saveContent($path,$destination)
{
$fh = fopen($path,'r');
$fw = fopen($destination,'w+');
if(!$fh)
{
die('Cannot open remote file - 404/403 error or wrong URL');
}
while($fr = fread($fh,8012))
{
fwrite($fw,$fr);
}
print($path . "successfully downloaded .");
unset($fr);
fclose($fh);
fclose($fw);
return true;
}
}
/**
* Создаем обьект .
*/
$do = new nod32upd();
?>