Собсно код:
<?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 )
или "Мы не ищем легких путей" :)