|
|
|
| Здравствуйте уважаемые участники форума! Извините, если пишу не в подходящей теме :)
Вопрос:
Вот у меня есть файл: index.php
Я его запустил и он выполняет что-то долгое по времени и нагружающее процессор. И для меня очень важно сделать так, чтобы не было возможности запустить повторно файл: index.php до тех пор, пока не закончит работу первый!
Как быть? Что можно придумать? Очень прошу помочь :)
Заранее спасибо! С уважением, Сергей | |
|
|
|
|
|
|
|
для: zeos
(01.06.2010 в 00:00)
| | Создать блокировочный файл и заблокировать его.
<?
$lock_file = 'lock';
if ( !file_exists($lock_file) || is_writable($lock_file) ) {
$fp = fopen($lock_file, 'w');
flock($fp, LOCK_EX);
} else {
die('Первый экземпляр этого скрипта ещё не завершил работу');
}
// ...
// долгие операции
// ...
|
| |
|
|
|
|
|
|
|
для: Саня
(01.06.2010 в 00:31)
| | Спасибо большое за ответ! Буду пробовать
А другие способы для этого есть? Уже просто так спрашиваю, для интереса :) | |
|
|
|
|
|
|
|
для: ZEOS
(01.06.2010 в 00:43)
| | Хранить метку можно в любом другом внешнем хранилище. Например в БД. Но вариант с блокировкой спец файла самый простой и распространённый. | |
|
|
|
|
|
|
|
для: Саня
(01.06.2010 в 00:56)
| | Гораздо проще хранить в сессии! | |
|
|
|
|
|
|
|
для: Саня
(01.06.2010 в 00:31)
| | Я конечно извиняюсь за свой креатинизм, но у меня не работает :(.
Вот, что я делал:
1. Создал файл "lock" (без расширения).
2. CTRL+C/V скрипт.
3. Пытаюсь нагрузить страницу клацая подряд 5 раз F5.
А толку 0. Сообщение "Скрипт не завершил работу..." не вылазит. Что делать? | |
|
|
|
|
|
|
|
для: lElectroHardl
(16.08.2010 в 22:53)
| | Помогите кто-то :). | |
|
|
|
|
|
|
|
для: zeos
(01.06.2010 в 00:00)
| | >Вопрос:
>Вот у меня есть файл: index.php
>
>Я его запустил и
Что значит "я его запустил"? | |
|
|
|
|
|
|
|
для: Trianon
(17.08.2010 в 12:13)
| | А почему это может не работать? Делаю все так, как автор сказал. А оно не хочет (тестировал на локальной машинке). | |
|
|
|
|
|
|
|
для: lElectroHardl
(17.08.2010 в 15:05)
| | по-моему если запустить файл index.php и он будет долго выполняться, то не знаю как все браузеры но IE зависнет пока скрипт не завершит работу, как тогда можно повторно запустить index.php? | |
|
|
|
|
|
|
|
для: serenya1983
(17.08.2010 в 15:14)
| | Дождаться выполнения скрипта, наверное.
Не знаю как Осел, но мой любимый хром капризный ко всяким скриптам. И в частности этот скрипт у меня не работает.
А вот как сделать, что бы оно заработало, не знаю. | |
|
|
|
|
|
|
|
для: lElectroHardl
(17.08.2010 в 15:36)
| | браузер-то тут причем?
скрипт же на сервере выполняется | |
|
|
|
|
|
|
|
для: psychomc
(17.08.2010 в 18:44)
| | Тогда еще непонятней - почему не работает скрипт? Сделал вс в точности так, как предложил
Саня в (01.06.2010 в 00:31)
|
| |
|
|
|
|
|
|
|
для: lElectroHardl
(17.08.2010 в 19:20)
| | вставьте
error_reporting(E_ALL);
после <? | |
|
|
|
|
|
|
|
для: 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 перевожу в переменную. | |
|
|
|
|
|
|
|
для: lElectroHardl
(17.08.2010 в 21:29)
| | это не ошибка и предупреждение, что значение не установлено!!! | |
|
|
|
|
|
|
|
для: serenya1983
(17.08.2010 в 22:19)
| | Как это может быть? Ошибка указывает на такого вида присвоение:
Все-равно, сути это не меняется, скрипт не работает (у меня) :(. И это печально! | |
|
|
|
|
|
|
|
для: 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;
|
| |
|
|
|
|
|
|
|
для: serenya1983
(18.08.2010 в 11:14)
| | Постоянно пишет "еще выполняется". | |
|
|
|