Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Блокировка, при копировании!
 
 автор: Diablo_   (01.05.2006 в 02:45)   письмо автору
 
 

Доброго времени суток!
С помощью вот этого кода, копироую один файл, в другой!
//----------------------------------------------------
$filename = 'base/counter.dat';
$filename2 = 'base/counter_copy.dat';
if(filesize($filename)>2000){
copy ( $filename, $filename2);
}
//---------------------------------------------------
И вот, появился вопрос, как копируемый файл, заблокировать?
Flock(), блокирует только открытый файл, а открывать файл, мне не хотелось бы!
Блокировать, мне нужно обязательно, так как в момент копирования, может происходить запись в файл! Но вот как заблокировать, я не знаю!
Или может, будут другие предлажения, как делать резервную копию?

   
 
 автор: Unkind™   (01.05.2006 в 09:34)   письмо автору
 
   для: Diablo_   (01.05.2006 в 02:45)
 

Попробуйте с помощью .htaccess...Создайте новую папку с файлами, которые необходимо защитить и напишите в .htaccess:

deny from all

или можно сделать запрет для всех, кроме опр. IP:

order deny,allow 
deny from all 
allow from 000.000.000.000

Файлы будут только для include доступны...

   
 
 автор: Diablo_   (01.05.2006 в 12:23)   письмо автору
 
   для: Unkind™   (01.05.2006 в 09:34)
 

Кажется, это чуть-чуть не то! Мне нужно заблокировать файл на некоторое время, а не ан постоянной основе!
Мне просто нужно, что бы происходило так: блокировка->копироваине(вообще, какое-либо действие)->разблокировка!

   
 
 автор: Diablo_   (01.05.2006 в 23:39)   письмо автору
 
   для: Diablo_   (01.05.2006 в 12:23)
 

Подскажите хоть, ждёт ли функчия copy, когда файл будет разблокирован?

   
 
 автор: cheops   (02.05.2006 в 11:40)   письмо автору
 
   для: Diablo_   (01.05.2006 в 23:39)
 

По моему нет - ждут файл только те потоки, которые участвуют в блокировке и сами блокируют файл.

   
 
 автор: Diablo_   (02.05.2006 в 15:48)   письмо автору
 
   для: cheops   (02.05.2006 в 11:40)
 

А чего тогда делать???

   
 
 автор: cheops   (02.05.2006 в 16:14)   письмо автору
 
   для: Diablo_   (02.05.2006 в 15:48)
 

Проверяйте блокирован ли файл, и вводите блокировку перед использованием яункция copy().

   
 
 автор: Diablo_   (02.05.2006 в 19:17)   письмо автору
 
   для: cheops   (02.05.2006 в 16:14)
 

А можно пример?

   
 
 автор: cheops   (02.05.2006 в 23:23)   письмо автору
 
   для: Diablo_   (02.05.2006 в 19:17)
 

С примером можно ознакомиться в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=572?

   
 
 автор: Diablo_   (03.05.2006 в 00:40)   письмо автору
 
   для: cheops   (02.05.2006 в 23:23)
 

Получается, что бы заблокировать файл при копировании, он должен быть открыт! А зачем мне это нужно!
Вот код:

<?php 
if(@$_REQUEST["id"])
{
$arr file("base/counter.dat"); 
$fp fopen("base/counter.dat""a"); 
ftruncate($fp0); 
$id = @$_REQUEST["id"]; 
for (
$i=0$i<count($arr); $i++) 

list(
$link$counter) = explode("|"str_replace ("\n"""$arr[$i])); 
if (
$link == $id

$counter += 1

flock($fpLOCK_EX);
if(
flock($fpLOCK_EX)){
fwrite($fp$link."|".$counter."\n"); 
flock($fpLOCK_UN); 
}
fclose($fp);
}}

//--------------------------------------------------------------------
$filename 'base/counter.dat';
$filename2 'base/counter_copy.dat';
if(
flock($fpLOCK_EX)){
if(
filesize($filename)>2000){
copy $filename$filename2);
}}
 else 
sleep(1);
//--------------------------------
?>

Выдаёт ошибку в 26 строке!
Notice: Undefined variable: fp in c:\easyphp1-8\www\1\include\counter_click.inc on line 26
Warning: flock(): supplied argument is not a valid stream resource in c:\easyphp1-8\www\1\include\counter_click.inc on line 26

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования