объясните прикол с file_get_contents

belbek

Новичок
объясните прикол с file_get_contents

clearstatcache();
if(file_exists("processz.txt")) die;
$fp = @fopen("processz.txt", "a+");
$current = file_get_contents("ups.txt");
if(!$current or $current > 26) $current = 1;
$databaseManager = new sfDatabaseManager();
$databaseManager->initialize();
include('get.php');
file_put_contents("ups.txt", ++$current);
unlink("processz.txt");

прикол в том, что файла ups.txt не существует, однако скрипт исправно считывает оттуда данные и аккуратно заносит их в базу? что за хрень? а потом также аккуратно обновленная $current вносится туда же (в ups.txt)
 

SiMM

Новичок
> файла ups.txt не существует
Почему Вы так думаете?
Для начала - используйте абсолютные пути - http://phpfaq.ru/paths

-~{}~ 13.08.09 13:58:

Кстати, извращения с файлом processz.txt - не панацея - представьте себе, что две копии скрипта выполняются параллельно в следующей последовательности:
1. if(file_exists("processz.txt")) die;
2. if(file_exists("processz.txt")) die;
1. $fp = @fopen("processz.txt", "a+");
2. $fp = @fopen("processz.txt", "a+");
Используйте [m]flock[/m] для ups.txt, открытого в режиме r+
 

belbek

Новичок
Автор оригинала: SiMM
> файла ups.txt не существует
Почему Вы так думаете?
Для начала - используйте абсолютные пути - http://phpfaq.ru/paths

прописал абсолютные пути, спасибо, помогло, хотя на винде этого не требовалось

-~{}~ 13.08.09 13:58:

Кстати, извращения с файлом processz.txt - не панацея - представьте себе, что две копии скрипта выполняются параллельно в следующей последовательности:
1. if(file_exists("processz.txt")) die;
2. if(file_exists("processz.txt")) die;
1. $fp = @fopen("processz.txt", "a+");
2. $fp = @fopen("processz.txt", "a+");
Используйте [m]flock[/m] для ups.txt, открытого в режиме r+
а вот это не совсем понял, точнее совсем не понял, вы хотите сказать что при в приведенном мной варианте скрипта возможно возникновение параллельных процессов?
 

antson

Новичок
Партнер клуба
belbek
processz.txt - как я понимаю семафор для предотвращения
запуска нескольких копий одновременно.

Если скрипт запускается при заходе по урлу посетителя, то
возможна ситуация , которую описал SiMM.
Если по крону, то при смерти скрипта до unlink , выполнение остановиться совсем.
 

belbek

Новичок
заход по урлу невозможен

Автор оригинала: antson
belbek
processz.txt - как я понимаю семафор для предотвращения
запуска нескольких копий одновременно.

Если скрипт запускается при заходе по урлу посетителя, то
возможна ситуация , которую описал SiMM.

заход по урлу невозможен

Если по крону, то при смерти скрипта до unlink , выполнение остановиться совсем.
Не подскажете, как сделать правильно? без базы?
 

dimagolov

Новичок
pid процесса надо писать в файл и потом проверять есть или нет процесс с таким pid-ом. это если через крон.
 
Сверху