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 :: Оптимизация скрипта (парсер)

 PHP.SU

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


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

> Без описания
thesameson
Отправлено: 07 Ноября, 2012 - 16:16:41
Post Id


Новичок


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


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




Есть csv файл каталога, который парсится с помощью скрипта ниже. Проблема в том, что локально (денвер) сей процесс занимает 1 - 2 секунды, а на хостинге страница грузится секунд 30 и выдает 504 ошибку. Однако, зайдя на сайт через несколько минут видно, что бд обновилась и все ок. В чем может быть причина? Возможно скрипт не оптимизирован и жрет много памяти. Если так, то подскажите где подправить.
PHP:
скопировать код в буфер обмена
  1.  
  2. function myIconv($arr)
  3. {
  4.     if(is_array($arr))
  5.         return array_map('myIconv', $arr);
  6.     else
  7.         return iconv('UTF-8', 'CP1251', $arr);
  8. }
  9.  
  10. $file = 'catalog.csv';
  11. // проверяем обновился ли .csv файл каталога
  12. $result = sqlite_query($db,"SELECT * FROM parse_info WHERE id = '1' LIMIT 1");
  13. $last = sqlite_fetch_array($result); // получаем метку времени последнего распарсенного файла
  14.  
  15. if(file_exists($file)){
  16.         $cat_time = filemtime($file);
  17.         if($cat_time != $last['filetime']){ // файл каталога обновился, парсим
  18.                 $cat_parse = true;
  19.         }
  20. }
  21. include('parser.php');
  22.  
  23. # parser.php:
  24.  
  25. if($cat_parse === true){
  26.         if(file_exists($file) && is_readable($file)){
  27.                 $array = file($file);
  28.                 $array = @myIconv($array);
  29.                 $time = time();
  30.                 unset($array[0]); // удаляем первый пустой элемент
  31.                 foreach($array as $key => $str){
  32.                         $item = explode('#',$str);
  33.                         if($item[2]=='БОЛТЫ')
  34.                                 $item[2] = 'КРЕПЕЖ';
  35.                         $result = sqlite_query($db,"SELECT * FROM prod_cats WHERE name = '".$item[2]."'");
  36.                         if(sqlite_num_rows($result)!=0){ // есть такая категория
  37.                                 $cat = sqlite_fetch_array($result);
  38.                         } else { // добавляем категорию
  39.                                 $cat_url = str2url($item[2]);
  40.                                 $cat_add = sqlite_query($db,"INSERT INTO prod_cats ( parent_id, name, uri) VALUES ( '0', '".$item[2]."', '".$cat_url."' )");
  41.                                 $result = sqlite_query($db,"SELECT * FROM prod_cats WHERE uri = '".$cat_url."'"); // делаем выборку только что созданной категории (для добавления товара)
  42.                                 $cat = sqlite_fetch_array($result);
  43.                         }
  44.                         $item[0] = sqlite_escape_string($item[0]);
  45.                         // проверяем есть ли уже этот товар в каталоге
  46.                         $result = sqlite_query($db,"SELECT * FROM prod_items WHERE name='".$item[0]."' AND parent_id='".$cat['id']."'");
  47.                         if(sqlite_num_rows($result)!=0){ //обновляем
  48.                                 sqlite_query($db,"UPDATE prod_items SET price = '".$item[3]."', icount = '".$item[1]."', date_add = '".$time."' WHERE name='".$item[0]."' AND parent_id='".$cat['id']."'");
  49.                         } else{ // добавляем новый
  50.                                 $url = str2url($item[0]).strtolower(rand(0,10000));
  51.                                 $add = sqlite_query($db,"INSERT INTO prod_items ( parent_id, name, text, price, icount, date_add, uri) VALUES ( '".$cat['id']."', '".$item[0]."', '', '".$item[3]."', '".$item[1]."', '".$time."', '".$url."')");
  52.                         }
  53.                 }
  54.                 // удаляем старые товары
  55.                 sqlite_query($db,"DELETE FROM prod_items WHERE date_add NOT LIKE '".$time."'");
  56.                 // обновляем время файла каталога
  57.                 sqlite_query($db,"UPDATE parse_info SET filetime = '".$cat_time."' WHERE id = '1'");
  58.         }
  59. }
  60.  
 
 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