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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: запрет открытия двух копий(и более) скрипта

Сообщения:  [1-5] 

 
 автор: tricket   (11.06.2007 в 21:25)   письмо автору
 
   для: Poison   (11.06.2007 в 21:10)
 

2 Poison
за код спасибо! чуть позже потестю!
только понять не могу, какая разница откуда его запускать?

   
 
 автор: Poison   (11.06.2007 в 21:10)   письмо автору
 
   для: tricket   (11.06.2007 в 18:54)
 

Такое происходит потомучто ты скрипт запускал через броузер=)

Попробуй напрямую все работает;)

<?
$fp 
fopen($file'r'); 
$filetime fread($fp1024);
fclose($fp);
$nowtime time(); 
$delta $nowtime-$filetime

clearstatcache();

if (
$delta <= 10) { 
    echo 
"Погодь начальничек скрипт итак активность проявлял ".$delta." секунл назад"
    
sleep(1);
    exit(); 
}

$fp fopen($file'w'); 
fwrite($fptime()); 
fclose($fp);

clearstatcache();

sleep(10); // Demon:)

   
 
 автор: tricket   (11.06.2007 в 18:54)   письмо автору
 
   для: DEM   (11.06.2007 в 18:30)
 

неа) не выйдет. скрипт запускается кроном

   
 
 автор: DEM   (11.06.2007 в 18:30)   письмо автору
 
   для: tricket   (11.06.2007 в 16:38)
 

Попробуйте может быть использовать КУКИ? Пусть в них записывается время и потом сверяется...

   
 
 автор: tricket   (11.06.2007 в 16:38)   письмо автору
 
 

Частенько при написание скриптом-демонов встаёт передо мной эта задача.
Раньше все демоны писал с использованием mysql, ща для демонов отказался от использования БД.
Использую файлы.
С использованием БД, я особо не парился, брал записывал в БД значение time(), и при каждом запуске сверял (время сейчас-значение в БД) и даю скрипт запускать если значение больше 60. И в скрипте-демоне просто напросто циклом писал каждый раз новое значение time().
А с файлами ето немного сложнее.


<?
$filetimear
=file("time.txt");
$filetime=trim($filetimear[0]);
$nowtime=time();
$delta=$nowtime-$filetime;

if (
$delta<=20)
{
echo 
"Погодь начальничек скрипт итак активность проявлял".$delta." секунл назад";
exit();
}

#следующая запись в цикле!
$file="time.txt";
 
$f=fopen($file"a+b");
truncate($f,0);
$time=time();
fwrite($f$time);
fclose($f);
?>

НО почему-то не работает при параллельном запуске скрипт!!!(скрипт второй такое ощущение что ждёт окончания первого)
Вот ещё на код наткнулсяя интересный(автора не помню...)


<?
#блокируем повторное открывание скрпита!
if (!function_exists('sys_get_temp_dir')) {
    function 
sys_get_temp_dir() {
        
$temp_file tempnam(md5(uniqid(rand(), TRUE)), '');
        if (
$temp_file) {
            
$temp_dir realpath(dirname($temp_file));
            
unlink($temp_file);
            return 
$temp_dir;
        } else {
            return 
FALSE;
        }
    }
}

$lock_file sys_get_temp_dir() . "/" basename($_SERVER["PHP_SELF"]) . ".lock";

$fp fopen($lock_file"w+");
$res flock($fpLOCK_EX LOCK_NB);
if (!
$res) {
    print 
"Одна копия скрипта уже запущена, второй не надо!";
    exit();
?>

Но работает не на всех операционках, и код очень не устойчив.

Вот сейчас думаю что же делать, как запретить вторую копию открыть?

   

Сообщения:  [1-5] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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