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

Форум PHP

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

 

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

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

тема: Запрет на повторный запуск скрипта php (если первый не завершил работу)
 
 автор: zeos   (01.06.2010 в 00:00)   письмо автору
 
 

Здравствуйте уважаемые участники форума! Извините, если пишу не в подходящей теме :)

Вопрос:
Вот у меня есть файл: index.php

Я его запустил и он выполняет что-то долгое по времени и нагружающее процессор. И для меня очень важно сделать так, чтобы не было возможности запустить повторно файл: index.php до тех пор, пока не закончит работу первый!

Как быть? Что можно придумать? Очень прошу помочь :)
Заранее спасибо! С уважением, Сергей

  Ответить  
 
 автор: Саня   (01.06.2010 в 00:31)   письмо автору
 
   для: zeos   (01.06.2010 в 00:00)
 

Создать блокировочный файл и заблокировать его.
<?
$lock_file 
'lock';
if ( !
file_exists($lock_file) || is_writable($lock_file) ) {
  
$fp fopen($lock_file'w');
  
flock($fpLOCK_EX);
} else {
  die(
'Первый экземпляр этого скрипта ещё не завершил работу');
}

// ...
// долгие операции
// ...

  Ответить  
 
 автор: ZEOS   (01.06.2010 в 00:43)   письмо автору
 
   для: Саня   (01.06.2010 в 00:31)
 

Спасибо большое за ответ! Буду пробовать
А другие способы для этого есть? Уже просто так спрашиваю, для интереса :)

  Ответить  
 
 автор: Саня   (01.06.2010 в 00:56)   письмо автору
 
   для: ZEOS   (01.06.2010 в 00:43)
 

Хранить метку можно в любом другом внешнем хранилище. Например в БД. Но вариант с блокировкой спец файла самый простой и распространённый.

  Ответить  
 
 автор: serenya1983   (16.08.2010 в 02:29)   письмо автору
 
   для: Саня   (01.06.2010 в 00:56)
 

Гораздо проще хранить в сессии!

  Ответить  
 
 автор: lElectroHardl   (16.08.2010 в 22:53)   письмо автору
 
   для: Саня   (01.06.2010 в 00:31)
 

Я конечно извиняюсь за свой креатинизм, но у меня не работает :(.
Вот, что я делал:
1. Создал файл "lock" (без расширения).
2. CTRL+C/V скрипт.
3. Пытаюсь нагрузить страницу клацая подряд 5 раз F5.

А толку 0. Сообщение "Скрипт не завершил работу..." не вылазит. Что делать?

  Ответить  
 
 автор: lElectroHardl   (17.08.2010 в 11:56)   письмо автору
 
   для: lElectroHardl   (16.08.2010 в 22:53)
 

Помогите кто-то :).

  Ответить  
 
 автор: Trianon   (17.08.2010 в 12:13)   письмо автору
 
   для: zeos   (01.06.2010 в 00:00)
 

>Вопрос:
>Вот у меня есть файл: index.php
>
>Я его запустил и

Что значит "я его запустил"?

  Ответить  
 
 автор: lElectroHardl   (17.08.2010 в 15:05)   письмо автору
 
   для: Trianon   (17.08.2010 в 12:13)
 

А почему это может не работать? Делаю все так, как автор сказал. А оно не хочет (тестировал на локальной машинке).

  Ответить  
 
 автор: serenya1983   (17.08.2010 в 15:14)   письмо автору
 
   для: lElectroHardl   (17.08.2010 в 15:05)
 

по-моему если запустить файл index.php и он будет долго выполняться, то не знаю как все браузеры но IE зависнет пока скрипт не завершит работу, как тогда можно повторно запустить index.php?

  Ответить  
 
 автор: lElectroHardl   (17.08.2010 в 15:36)   письмо автору
 
   для: serenya1983   (17.08.2010 в 15:14)
 

Дождаться выполнения скрипта, наверное.
Не знаю как Осел, но мой любимый хром капризный ко всяким скриптам. И в частности этот скрипт у меня не работает.
А вот как сделать, что бы оно заработало, не знаю.

  Ответить  
 
 автор: psychomc   (17.08.2010 в 18:44)   письмо автору
 
   для: lElectroHardl   (17.08.2010 в 15:36)
 

браузер-то тут причем?
скрипт же на сервере выполняется

  Ответить  
 
 автор: lElectroHardl   (17.08.2010 в 19:20)   письмо автору
 
   для: psychomc   (17.08.2010 в 18:44)
 

Тогда еще непонятней - почему не работает скрипт? Сделал вс в точности так, как предложил
Саня в (01.06.2010 в 00:31)

  Ответить  
 
 автор: psychomc   (17.08.2010 в 19:51)   письмо автору
 
   для: lElectroHardl   (17.08.2010 в 19:20)
 

вставьте
error_reporting(E_ALL);
после <?

  Ответить  
 
 автор: lElectroHardl   (17.08.2010 в 21:29)   письмо автору
 
   для: psychomc   (17.08.2010 в 19:51)
 

Теперь еще хуже :).
на сервере постоянно пишет "Не закончил работу скрипт", а Денвер выводит
Notice: Undefined index: cat in Z:\home\site.com\www\blocks\right.php on line 66
И причем выводит он это сообщение в правом блоке, хотя код находиться в index после session_start();

Что я не так делаю?

UPD: Только сейчас увидел, что ошибку выводи только тогда, когда я $_GET перевожу в переменную.

  Ответить  
 
 автор: serenya1983   (17.08.2010 в 22:19)   письмо автору
 
   для: lElectroHardl   (17.08.2010 в 21:29)
 

это не ошибка и предупреждение, что значение не установлено!!!

  Ответить  
 
 автор: lElectroHardl   (18.08.2010 в 11:03)   письмо автору
 
   для: serenya1983   (17.08.2010 в 22:19)
 

Как это может быть? Ошибка указывает на такого вида присвоение:
$cat = $_GET['cat']


Все-равно, сути это не меняется, скрипт не работает (у меня) :(. И это печально!

  Ответить  
 
 автор: serenya1983   (18.08.2010 в 11:14)   письмо автору
 
   для: lElectroHardl   (18.08.2010 в 11:03)
 

скорее всего значение $_GET['cat'] небыло установлено!
попробуйте проверить:

if (isset($_GET['cat'])) echo "установлено";else echo "не установлено";

По поводу первоначального вопроса, можно попробовать так:

//в начале файла
session_start();
if ((isset($_SESSION))and($_SESSION["end"]==false)) {echo "еще выполняется";exit;}
$_SESSION["end"]=false;


тут ваш код, который долго выполняется

//в конце файла
$_SESSION["end"]=true;

  Ответить  
 
 автор: lElectroHardl   (18.08.2010 в 13:06)   письмо автору
 
   для: serenya1983   (18.08.2010 в 11:14)
 

Постоянно пишет "еще выполняется".

  Ответить  
Rambler's Top100
вверх

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