powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Экстренное завершение скрипта и запрещение переходов.
25 сообщений из 35, страница 1 из 2
Экстренное завершение скрипта и запрещение переходов.
    #37853405
Atlina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело такое, у меня есть скрипт, точней такая себе "очередь". Нужно чтоб скрипт работал только с одним пользователем, я осуществила это так:


Index страница:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?php
$path="Z:/home/test1.ru/www/txt.txt";
if(file_exists($path)){
include("tpl/header.tpl");
echo "Поток занят </br>" ;

include("tpl/footer.tpl");

}else{
include("tpl/index.tpl");
}
?>



И страница выполнения скрипта:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<?php
$c = "txt.txt";
$pt = fopen($c, "w");
fclose($pt);
// Тут код
sleep(20);
//Nen код 
unlink('txt.txt');

?>



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

Еще вопрос на эту же тематику, как ограничить доступ к скрипту? То есть скрипт сработает только если на него человек перешел с index.php а просто так человек войти на него не может. Как это сделать?
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853412
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже и не знаю с чего начать.
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853419
phpz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ShSergeДаже и не знаю с чего начать.
уже кончил
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853424
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предлагаю начать по традиции, с конца )))
Atlinaскрипт сработает только если на него человек перешел с index.php а просто так человек войти на него не можетВ index.php стартуем сессию и записываем в сессионную переменную какой-то признак. В целевом скрипте проверяем этот признак, и, если его нет, то завершаем скрипт сообщением об ошибке или редиректом на индекс. По завершении работы скрипта переменную очищаем или убиваем сессию - это по месту определяться. Менее надежный способ - проверять реферер.
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853434
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По первому вопросу попробуйте тынц .
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853462
Фотография Ренат
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atlina,

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
class Locker {
const FILE_NAME = 'txt.txt';
public function __construct() {
if (file_exists(self::FILE_NAME)) {
throw new Expection('Is already runing');
}
$pt = fopen(self::FILE_NAME, "w");
}
public function __destruct() {
unlink(self::FILE_NAME);
}
}



Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
try {
$locker = new Locker();
// Тут код
sleep(20);
die(); //!!!! а всеравно удалиться файл)
//Nen код 
} catch (Exception $e) {
print $e->getMessage();
}
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853497
Atlina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, с первым вопросом благодаря Вам разобралась. Теперь остался актуальным второй. Можно небольшие примеры?
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853513
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853534
Atlina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Набросала такой код:


index.php :

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
<?php
session_start();
$_SESSION['id'] = 1;


$path="Z:/home/test1.ru/www/txt.txt";
if(file_exists($path)){
include("tpl/header.tpl");
echo "Поток занят </br>" ;

include("tpl/footer.tpl");

}else{
include("tpl/index.tpl");
}
?>



И файл исполнения:

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?php
if($_SESSION['id'] > 0){echo "Vse ok";}else{exit();}
session_destroy(); 

ignore_user_abort(false);
set_time_limit(40);
$c = "txt.txt";
$pt = fopen($c, "w");
fclose($pt);
sleep(20);
unlink('txt.txt');
?>



Проблема в том, что если я один раз побывала на index.php то я и смогу просто так ( вбив в адрес test1.ru/test.php ) один раз зайти на свой скрипт, Нужно 100% чтоб заход был с index.php. В этом весь смысл, это такого рода защита. Если пользователь сможет очень часто входить на test.php ( В оригинальном варианте он запускает разные программы на сервере ), мой сервер просто упадет от перенагрузки. Как поступить?
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853579
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atlina,

К сессии можно добавить проверку реферера, однако, этот хидер легко подделывается.

Думаю, надо пересматривать алгоритм. Как один из вариантов, если задание уже запущено, то больше его не запускать для этого пользователя. Можно составить таблицу соответствий заданий и пользователей и проверять по ней право на запуск нового задания. Пользователя так же придется идентифицировать по сессионной переменной. В индексе прописываете в таблицу право на запуск задания, а в своем скрипте первым делом отмечаете в таблице что задание выполняется. Соответственно, право запуска при этом будет утрачено. В конце скрипта так же отмечаете что задание выполнено, и это будет указание индексу на возможность разрешения нового задания.

Есть еще варианты...
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853586
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имхо проще сделать таблицу очередей, в которую пользователи добавляются в очередь. Проще будет вычислить через сколько запрос пользователя будет обработан, можно ограничивать число мест в очереди для одного пользователя.
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853606
phpz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Atlina,

Про сессии можно забыть, т.к. юзер просто почистит куки и при повторном заходе на index.php у него будет новая сессия с новым $_SESSION['id'], а следовательно и доступ к test.php.
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853622
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
phpzюзер просто почистит куки...и придется юзеру авторизоваться заново. Тогда и подхватит свои текущие задания. А без авторизации это тухляк полный.
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853662
phpz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vklephpzюзер просто почистит куки...и придется юзеру авторизоваться заново. Тогда и подхватит свои текущие задания. А без авторизации это тухляк полный.
Ну это само собой разумеется. Правда про авторизацию речи не было, был только вопрос между строк: что такое сессия?! :)
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853712
Atlina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Тогда наверно сейчас стоит сделать авторизацию и по ней уже определять выполняет ли пользователь задание, или нет. Сейчас буду пробывать =)
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853755
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Возьмите фреймворк
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853757
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yii например
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853841
phpz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Atlina,

Без авторизации с "привязкой по IP" (про прокси отдельная песня):
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
<?php
/*
* test.php
*/
error_reporting(0);
set_time_limit(60);  // заменить на нужное

$path = 'sdfkjh/';  // что-нибудь рандомное

// $lifetime задает время, в течение которого скрипт считается занятым.
$lifetime = 15*60; // 15 минут, заменить на нужное

$ip = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : ((isset($_ENV['REMOTE_ADDR'])) ? $_ENV['REMOTE_ADDR'] : getenv('REMOTE_ADDR'));
$filename = $path . md5($ip) . '.txt';

if (file_exists($filename))
{
	if (time() - filemtime($filename) > $lifetime)
		@unlink($filename);
	else
	{
		echo 'Облом...';
		exit;
	}
}

$fp = fopen($filename, 'w');
if ($fp)
{
	while (!flock($fp, LOCK_EX))
		sleep(1);
	fwrite($fp, $ip);
	fflush($fp);
	flock($fp, LOCK_UN);
	fclose($fp);
}
else
{
    echo 'Ошибка...';
    exit;
}

echo "Работаю...";
ob_flush();
flush();

/*
* Выполнение скрипта продолжается до самого конца, даже если пользователь закроет страницу.
* Только НЕ НАДО ничего выводить, никаких там echo или print после flush() !!!
*/
sleep(30);
/* ... */
if (file_exists($filename))
    unlink($filename);
?>



Про прокси отдельная песня
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853973
Atlina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
phpz, очень хороший скрипт у Вас, но мне хотелось бы его чуть модифицировать, то есть если У Вас один пользователь переходит два раза по ссылке, то сначала исполняется его первый запрос ( пишет удачно ), потом исполняется второй его запрос. Как бы это реализовать со всеми пользователями? То есть сначала по такому же принципу исполнится скрипт у одного пользователя, потом у второго. Надеюсь вы поняли. Еще раз спасибо за скрипт.
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853983
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atlina,

Уж сколько способов насыпали... И на файле блокировку держать, и в БД очередь строить... Ничего не подходит?
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853986
Atlina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть когда один пользователь занял "поток", все остальные ждали когда он его освободит. И потом только входили.
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853987
Atlina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vkle, ну вариант с этим скриптом подходит очень, помогите модернизировать его пожалуйста :)
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853990
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторТолько НЕ НАДО ничего выводить, никаких там echo или print после flush() !!!

http://php.net/manual/ru/function.ignore-user-abort.php
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37853993
Atlina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ребята, мучаюсь уже около 3 дней над этим "мини движком", помогите его закончить уже. Вот это последний технический вопрос который не могу решить, все остальное дизайн.
...
Рейтинг: 0 / 0
Экстренное завершение скрипта и запрещение переходов.
    #37854016
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atlinavkle, ну вариант с этим скриптом подходит очень, помогите модернизировать его пожалуйста :)Ну на блокировке файла сделайте... Пример #1 почти для Вас. Только вместо
Код: plaintext
1.
2.
3.
    ftruncate($fp, 0); // очищаем файл
    fwrite($fp, "Что-нибудь пишем сюда\n");
    fflush($fp);        // очищаем вывод перед отменой блокировки
будет Ваш код. Тот самый, который должен работать в единственном экземпляре. Файл, конечно, какой то специальный создать надо. Хотя, можно и этот самый скрипт использовать, если права позволяют или, возможно, тот файл, который мучаете внутри скрипта (что лучше - самостоятельно прикините).
...
Рейтинг: 0 / 0
25 сообщений из 35, страница 1 из 2
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Экстренное завершение скрипта и запрещение переходов.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]