[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Проблема с is_file в while(true) цикле
Nicodinus
В общем возникла необходимость проверять на существование "стоп" файла для парсера.

Собсно код:

<?php
if(isset($_SERVER['HTTP_HOST'])) die('You can run this script only in the CMD prompt');

$headers = array(
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4',
'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3',
);


function out($str = '') { echo date('d.m.Y - H:i:s').': '.$str.chr(13).chr(10); }

out('starting...');

$f = fopen(basename(__FILE__).'.log','a');

$p = 0;
$f2 = 0;
for($i = 1; $i < 79000; $i++)
{
if(is_file('last'))
{
$i = intval(file_get_contents('last'));
unlink('last');
}

if(intval($i / 790) != $p || $f2 == 0)
{
$p = intval($i / 790);
out($p.'%');
$f2 = 1;
}

if(is_file('stop'))
{
out('event - stop from file!');
out('this script will continue, after you remove the stop file');
out('5 sec sleeping!');

$t = fopen('last','w');
fputs($t,$i);
fclose($t);

while(true)
{
if(!is_file('stop')) break;
out('sleep');
sleep(5);
}
}


$ch = curl_init('http://eu.battle.net/wow/ru/item/'.$i.'/tooltip');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);

if($code == 200)
{
fputs($f,date('d.m.Y - H:i:s').': item '.$i.chr(13).chr(10));
out('item '.$i);
$t = fopen('data/'.$i.'.txt', 'w');
fputs($t, $content);
fclose($t);
}

usleep(100000);
}

fclose($f);
?>


Эта:

while(true)
{
if(!is_file('stop')) break;
out('sleep');
sleep(5);
}

часть, работает не так, как хотелось бы.

Создайте рядом со скриптом пустой файл "stop", запустите скрипт, подождите пару секунд и удалите файл. Казалось бы, if(!is_file('stop')) break; завершит цикл и парсер будет дальше парсить данные. Но нет, ему кажется, что файл существует, хотя функции на считывания работают нормально, т.е. выводят ошибку, что файл не существует. Можно и с помощью них обойтись, но хотелось бы услышать мнение форумчан.

пс. Если как то поможет, php 5.3.8, запускаю из консоли



Спустя 23 минуты, 2 секунды (10.01.2012 - 18:39) Nikitian написал(а):
В мануале по is_file()()()()()()()()() написано:
Цитата
    Замечание: Результаты этой функции кэшируются. Более подробную информацию смотрите в разделе clearstatcache().

Иногда полезно его почитывать.

Спустя 8 минут, 26 секунд (10.01.2012 - 18:48) Nicodinus написал(а):
Nikitian, спасибо, помогло

Спустя 6 дней, 18 часов, 2 минуты, 32 секунды (17.01.2012 - 12:50) walerus написал(а):
Цитата
В общем возникла необходимость проверять на существование "стоп" файла для парсера.
.

ТС - а почему не использовать функцию предназначенную именно для проверки существования файла ?
bool file_exists ( string filename )

или "Мы не ищем легких путей" :)
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.