За последние 24 часа нас посетили 18629 программистов и 1702 робота. Сейчас ищут 898 программистов ...

Проблема в чтении Excel

Тема в разделе "PHP и базы данных", создана пользователем Zante7777, 9 сен 2015.

  1. Zante7777

    Zante7777 Новичок

    С нами с:
    9 сен 2015
    Сообщения:
    22
    Симпатии:
    0
    Помогите разобраться...устал уже. Задача такая - нужно с Excel файла с помощью скрипта по определённым колонкам взять значение поискать в базе - если есть - исправить на то что в файле если нету вывести на экран. В конце подсчитать количество исправленных и вывести не найденные. В общем вот следующий код:

    Код (Text):
    1. <?
    2. set_time_limit(0);
    3. define('DB_HOST', 'localhost');
    4.   define('DB_USER', '********');
    5.   define('DB_PASS', '********');
    6.   define('DB_NAME', '********');
    7.  
    8. $ctt = mysql_connect(DB_HOST, DB_USER, DB_PASS) or die(mysql_error());
    9. $db = mysql_select_db(DB_NAME) or die("Ошибка базы данных");
    10. mysql_query ("SET NAMES 'windows-1251'");
    11. #----------------------------------------------
    12. function getXLS($xls){
    13.     include_once 'Classes/PHPExcel.php';
    14.     include_once 'Classes/PHPExcel/IOFactory.php';
    15.     $objPHPExcel = PHPExcel_IOFactory::load($xls);
    16.     $objPHPExcel->setActiveSheetIndex(0);
    17.     $aSheet = $objPHPExcel->getActiveSheet();
    18.  
    19.     $array = array();
    20.    
    21.     foreach($aSheet->getRowIterator() as $row){
    22.  
    23.          $cellIterator = $row->getCellIterator();
    24.  
    25.            $item = array();
    26.       foreach($cellIterator as $cell){
    27.  
    28.               array_push($item, iconv('utf-8', 'cp1251', $cell->getCalculatedValue()));
    29.       }
    30.  
    31.            array_push($array, $item);
    32.     }
    33.     return $array;
    34.   }
    35.  
    36.   $xlsData = getXLS('xls/nprice.xls');
    37.  
    38. #----------------------------------------------
    39.  
    40. $col_str = sizeof($xlsData);
    41.  
    42. for ($i = 0; $i < $col_str; $i++) {
    43.  
    44.     $artikle = $xlsData[$i][1];
    45.     $cena = $xlsData[$i][3];
    46.  
    47.  $tmp=" UPDATE SS_products
    48.        SET Price = ".$cena.", sort_order = -51
    49.        WHERE product_code = ".$artikle."
    50.     AND categoryID = 1443
    51. ";
    52.  
    53. $res = mysql_query($tmp);
    54. $num =  mysql_affected_rows();
    55. $num2 = $num;
    56.  
    57. if ($num = 0) {
    58.  
    59. $notarticle .= $artikle.$cena."<br>";
    60.  
    61. global $notarticle;
    62.  
    63. }
    64.  
    65. $num2 += $num2;
    66.  
    67. global $num2;
    68.  
    69.   }
    70. #----------------------------------------------
    71.  echo "Исправлено товаров: <b>".$num2."</b><br><br>";
    72.  echo "Не найдено товаров: <b>".$notarticle."</b><br><br>";
    73.  
    74. ?>
    Сначала сервер долго думал потом вылетела ошибка тайм-аута 300, я убрал тайм-аут теперь вылазит ошибка что не хватает памяти, но сам файл маленький, я даже урезал ради теста в 10 строк.

    Добавлено спустя 18 минут 39 секунд:
    Затестил без базы:
    Код (Text):
    1. <?
    2. set_time_limit(0);
    3.  
    4.  
    5. function getXLS($xls){
    6.     include_once 'Classes/PHPExcel.php';
    7.     include_once 'Classes/PHPExcel/IOFactory.php';
    8.     $objPHPExcel = PHPExcel_IOFactory::load($xls);
    9.     $objPHPExcel->setActiveSheetIndex(0);
    10.     $aSheet = $objPHPExcel->getActiveSheet();
    11.  
    12.     //этот массив будет содержать массивы содержащие в себе значения ячеек каждой
    13.  
    14. строки
    15.     $array = array();
    16.     //получим итератор строки и пройдемся по нему циклом
    17.     foreach($aSheet->getRowIterator() as $row){
    18.  
    19.       //получим итератор ячеек текущей строки
    20.  
    21.       $cellIterator = $row->getCellIterator();
    22.  
    23.       //пройдемся циклом по ячейкам строки
    24.       //этот массив будет содержать значения каждой отдельной строки
    25.  
    26.       $item = array();
    27.       foreach($cellIterator as $cell){
    28.  
    29.         //заносим значения ячеек одной строки в отдельный массив
    30.  
    31.       array_push($item, iconv('utf-8', 'cp1251', $cell->getCalculatedValue()));
    32.    
    33.       }
    34.  
    35.       //заносим массив со значениями ячеек отдельной строки в "общий массв строк"
    36.  
    37.       array_push($array, $item);
    38.     }
    39.     return $array;
    40.   }
    41.  
    42.   $xlsData = getXLS('xls/nprice.xls'); //извлеаем данные из XLS
    43.  
    44. #----------------------------------------------
    45.  
    46. $col_str = sizeof($xlsData);
    47.  
    48.  
    49. for ($i = 0; $i < $col_str; $i++) {
    50.  
    51.     $artikle = $xlsData[$i][1];
    52.     $cena = $xlsData[$i][3];
    53.  
    54.  echo "Исправлено товаров: <b>".$artikle."</b><br><br>";
    55.  echo "Не найдено товаров: <b>".$cena."</b><br><br>";
    56.   }

    Зависает точно так же...значит проблема в извлечении данных с Excel файла, на локальном все работает а на хосте нет. PHPExcel установлен...может какие то настройки надо делать?
     
  2. rewuxiin

    rewuxiin Активный пользователь

    С нами с:
    17 апр 2012
    Сообщения:
    611
    Симпатии:
    87
    что работает на локале?
    если все работает на локале - с этого и нужно начинать, мол скрипт рабочий, на локале работает, перенес на сервер - все пропало.
     
  3. Zante7777

    Zante7777 Новичок

    С нами с:
    9 сен 2015
    Сообщения:
    22
    Симпатии:
    0
    Зачем писать сообщения с 0 информацией?
     
  4. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  5. Zante7777

    Zante7777 Новичок

    С нами с:
    9 сен 2015
    Сообщения:
    22
    Симпатии:
    0
    Ошибка следующая:
    Код (Text):
    1. Fatal error: Allowed memory size of 1258291200 bytes exhausted (tried to allocate 1254359069 bytes) in /var/www/admin/www/********/Classes/PHPExcel/Shared/OLERead.php on line 155
    увеличивал я уже размер с 512 до 1200 все ровно долго думает потом выдает ошибку. Вряд ли проблема в размере памяти, там файл на 10 строк совсем небольшой.
     
  6. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
    Какая версия PHP там и там и версия PHPExcel?
     
  7. Zante7777

    Zante7777 Новичок

    С нами с:
    9 сен 2015
    Сообщения:
    22
    Симпатии:
    0
    PHPExcel_1.8.0
    Хост - PHP Version 5.3.3-7+squeeze23
    localhost - PHP Version 5.3.13