Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Проблема с is_file в while(true) цикле

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Nicodinus
Отправлено: 10 Января, 2012 - 17:13:16
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Янв. 2012  
Откуда: Москва


Помог: 0 раз(а)




В общем возникла необходимость проверять на существование "стоп" файла для парсера.

Собсно код:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. if(isset($_SERVER['HTTP_HOST'])) die('You can run this script only in the CMD prompt');
  4.  
  5. $headers = array(
  6.         'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
  7.         'Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.6,en;q=0.4',
  8.         'Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.3',
  9. );
  10.  
  11. function out($str = '') { echo date('d.m.Y - H:i:s').': '.$str.chr(13).chr(10); }
  12.  
  13. out('starting...');
  14.  
  15. $f = fopen(basename(__FILE__).'.log','a');
  16.  
  17. $p = 0;
  18. $f2 = 0;
  19. for($i = 1; $i < 79000; $i++)
  20. {
  21.         if(is_file('last'))
  22.         {
  23.                 $i = intval(file_get_contents('last'));
  24.                 unlink('last');
  25.         }
  26.        
  27.         if(intval($i / 790) != $p || $f2 == 0)
  28.         {
  29.                 $p = intval($i / 790);
  30.                 out($p.'%');
  31.                 $f2 = 1;
  32.         }
  33.        
  34.         if(is_file('stop'))
  35.         {
  36.                 out('event - stop from file!');
  37.                 out('this script will continue, after you remove the stop file');
  38.                 out('5 sec sleeping!');
  39.                
  40.                 $t = fopen('last','w');
  41.                 fputs($t,$i);
  42.                 fclose($t);
  43.                
  44.                 while(true)
  45.                 {
  46.                         if(!is_file('stop')) break;
  47.                         out('sleep');
  48.                         sleep(5);
  49.                 }
  50.         }
  51.        
  52.         $ch = curl_init('http://eu.battle.net/wow/ru/item/'.$i.'/tooltip');
  53.         curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0');
  54.         curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
  55.         curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
  56.         curl_setopt($ch, CURLOPT_HEADER, 1);
  57.         curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  58.         $content = curl_exec($ch);
  59.         $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
  60.         curl_close($ch);
  61.        
  62.         if($code == 200)
  63.         {
  64.                 fputs($f,date('d.m.Y - H:i:s').': item '.$i.chr(13).chr(10));
  65.                 out('item '.$i);
  66.                 $t = fopen('data/'.$i.'.txt', 'w');
  67.                 fputs($t, $content);
  68.                 fclose($t);
  69.         }
  70.        
  71.         usleep(100000);
  72. }
  73.  
  74. fclose($f);
  75. ?>
  76.  


Эта:
PHP:
скопировать код в буфер обмена
  1.  
  2. while(true)
  3. {
  4.         if(!is_file('stop')) break;
  5.         out('sleep');
  6.         sleep(5);
  7. }
  8.  

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

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

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

(Отредактировано автором: 10 Января, 2012 - 17:21:43)

 
 Top
LIME
Отправлено: 10 Января, 2012 - 17:43:59
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




из описания
Цитата:
Замечание: Результаты этой функции кэшируются. Более подробную информацию смотрите в разделе clearstatcache().
 
 Top
Nicodinus
Отправлено: 10 Января, 2012 - 17:48:45
Post Id



Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Янв. 2012  
Откуда: Москва


Помог: 0 раз(а)




LIME, спасибо, помогло
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Если скрипт не работает »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB