SviMik пишет:У меня есть такая идея по защите от неё (идея взята у некоторых прог, для сохранения данных в случае сбоя во время записи): форум переодически создаёт копи файлов. Типа файл блаблабла.php копирует в блаблабла.php.bak и проверяетт каждый раз размер файла. Если 0 байт - восстанавливает, если файл целый - обновляет бэкап.
я даже видел это реализованное где-то.. кажется на [url]php.net[/url]. сейчас найду.
а, вот CODE:Following is based on below comments. When something goes wrong, script will perform backup of writen data to randomly named file in temp dir.
<?
function safewrite($filename, $data){
$rand = microtime();
$rand = md5($rand);
$temp = fopen("temp/$rand", "w");
fwrite($temp, $data);
fclose($temp);
$otw = fopen($filename, "a+");
if(flock($otw, LOCK_EX)){
ftruncate($otw, 0);
if(!fwrite($otw, $data)) $err = 1;
flock($otw, LOCK_UN);
fclose($otw);
} else {
$err = 1;
}
if($err == 1 || (filesize($filename) == 0 && strlen($data) <> 0)){
die("<b>There was an error while writing to $filename. Contact site administrator!</b>");
} else {
unlink("temp/$rand");
}
}
?>
Hope it helps. |