unix3dgforce писал(а):!!!МНОГО БУКВ!!!!
Частично переделал Mirror.class.php
и так по порядку с PHP давно не работал так что за код не пинайте может кто то возьмется его оптимизировать
в
static private function parse_update_ver($file, $server, $ver = null) после
Код: Выделить всё
$tmp = array('size','file','version');
foreach($tmp as $varible) {
if(substr($row, 0, strlen($varible)) == $varible) {
$res[$varible][$pos] = trim(substr($row, strlen($varible)+1));
}
}
}
вписываем
Код: Выделить всё
$fileupdate = $file;
$f = fopen($fileupdate, 'w');
for ($i=0; $i < count($update); $i++){
if (preg_match("/file/",$update[$i])){
$rebuild_update[$i] = str_replace("/", DS, substr(dirname($update[$i]),0,strripos(dirname($update[$i]),"_"))) . DS . basename($update[$i]);
fwrite($f, $rebuild_update[$i]);
}
else {
$rebuild_update[$i] = $update[$i];
fwrite($f, $rebuild_update[$i]);
}
}
fclose($f);
на выходе имеем перезаписанный фаил
update.ver с по правлеными ссылками типа file=/v5-rel-sta/mod_000_loader/em000_32_l0.nup без лишнего мусора (Номера билда который постоянно меняется) который передаётся клиенту.
в
download_signature
Вместо
Код: Выделить всё
$res = str_replace("/", DS, dirname($name)) . DS;
пишем
Код: Выделить всё
$res = str_replace("/", DS, substr(dirname($name),0,strripos(dirname($name),"_"))) . DS;
Не будут плодится папки с номером билда.
Дальше
Код: Выделить всё
$local_fs = file_exists($dir.$file[$key]) ? filesize($dir.$file[$key]) : -1;
меняем на
Код: Выделить всё
$local_fs = file_exists(substr(dirname($dir.$file[$key]),0,strripos(dirname($dir.$file[$key]),"_")).DS.basename($dir.$file[$key])) ? filesize(substr(dirname($dir.$file[$key]),0,strripos(dirname($dir.$file[$key]),"_")).DS.basename($dir.$file[$key])) : -1;
Чтобы находил файлы по изменённым путям
заменяем на
Код: Выделить всё
@unlink(substr(dirname($dir.$file[$key]),0,strripos(dirname($dir.$file[$key]),"_")).DS.basename($dir.$file[$key]));
заменяется на
Код: Выделить всё
if(!file_exists(substr(dirname($dir.$file[$key]),0,strripos(dirname($dir.$file[$key]),"_")).DS.basename($dir.$file[$key]))) {
ну и последняя замена
Код: Выделить всё
Tools::download_file(sprintf("http://%s:%s@%s", $pair_key[0], $pair_key[1], $mirror . $name), $dir.$name);
меняем на
Код: Выделить всё
Tools::download_file(sprintf("http://%s:%s@%s", $pair_key[0], $pair_key[1], $mirror . $name), substr(dirname($dir.$file[$key]),0,strripos(dirname($dir.$file[$key]),"_")).DS.basename($name));
что бы правельно загруженные файлы сохранял
Что получилось на выходе: Старая архитектура хранения папок без всяких приписок номеров Билда к имени папки. Поправленный update.ver согласно новой (старой) архитектуре папок
Всё было протестировано на Centos 6.5 x86_64 и 30 рабочих станциях. Клиенты обновления получают.
P.S Хотелось бы увидеть ответ автора скрипта