Показать полную графическую версию : Скрипт который может сам себя обновить
BuilderMan
28-09-2006, 13:52
Подскажите алгоритм данного сабжа
Задача такая... Клиент имеет скрипт который должен проверять версию на моем сайте и в случае если появилась новая версия обновить себя... Спасибо
Prisoner
28-09-2006, 16:15
Доброго времени суток. Что понимать под "Клиент имеет скрипт"? Если я верно все понимаю и "Клиент имеет скрипт" - в коде страницы имеется на него ссылка (включение тела скрипта), то при верно настроенном сервере при каждом обновлении файла скрипта клиент (в моем понимании вопроса это ПА) получит также время его модификации для решения вопроса об использовании закешированной версии или версии с сервера (значит файл обновился и его надо закачать снова).
BuilderMan
28-09-2006, 20:39
Клиент скачивает файл помещает в определенныю папку с правами на запись и в коде страницы делает include скрипта. Скрипт при выполнении получает некоторые данные с моего хоста, а также должен проверить есть ли новая версия его кода . соответсвенно если есть он должен перезаписать сам себя. Сервер клиента как бы должен быть не причем...
Скрипт на чём написан? Java Script, VBJ, PHP может быть?
BuilderMan
29-09-2006, 00:59
только на PHP...
я приххожу к то му что с крипт который у клиента при получении от меня данных получает и информацию о том что есть новая версия.
Получает ее и сам себя перезаписывает. Наверное так. Хотя я хотел переписать скрипт клинта со стороны своего сервера...
BuilderMan
программа, способная переписать скрипт клинта со стороны своего сервера обычно называется вирус :) Поэтому броузеры этому сопротивляются. Если сопротивление ослабевает, значит в броузере/системе дыра.
BuilderMan
29-09-2006, 15:20
вирусы эт все понятно) со стороны сервера не получитца... я загнался... Только со стороны клиента...файл сам перезапишет себя при получении определенной команды...
$socket = fsockopen($this->Server,$this->Port,$sock_err_no,$sock_err_str,$this->TimeOut);
if( FALSE === $socket ) return 'ERRORconnect';
else
{
$out = "GET /".$this->Script." HTTP/1.1\r\n".
"Host: ".$this->Host."\r\n";
$out .= "Connection: Close\r\n\r\n";
$result = fwrite( $socket, $out );
if( strlen( $out ) != $result ) return 'ERRORwrite';
else
{
while( !feof( $socket ) ){
$str = fgets( $socket, 40960 );
array_push( $res_array, $str );
}
$http_ok = array_shift($res_array);
if( !preg_match( "/^HTTP\/1\.[01] 200 /", $http_ok, $matches ) ) $return = 'ERRORserver';
}
fclose( $socket );
reset($res_array);
foreach ($res_array as $key => $value) { << вот этот момент как оптимизировать? чтоб найти мессагу U have old version
if( preg_match("/U have old version/", $value, $matches ) ) $new_code=$this->GetNewVersion();
}
}
ну а GetNewVersion коннектица ко мне получает новый скрипт и перезаписыват этот... так наверное?
Prisoner
30-09-2006, 13:44
Попробуйте по аналогии с ПА и сервером: некий скрипт на клиенте выполняет роль ПА и обращается к серверу за данными (кодом файла), если данные говорят, что файл обновился, то ПА берет код и создает на клиенте файл с кодом принятым от сервера, затем созданный (или существующий, если данные свидетельствуют о необновлении файла) файл запускается на исполнение. Только обратите внимание на место вызова и области видимости переменных, могут быть подводные камни.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.