powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Пошаговая работа PHP скрипта
23 сообщений из 23, страница 1 из 1
Пошаговая работа PHP скрипта
    #39044633
ssaich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть скрипт, краткая суть его работы это "Чтение файла по строчкам, сравнение информации строки с БД, и выполнение нужных действий"

Дело в том что он не укладывается в тайм_ лимит на хостинге, Cron и SSH не вариант так как пользователь хочет "ему так надо" запускать через веб интерфейс.

Подскажите как можно запустить скрипт поэтапно?
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39044655
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делайте скрипт таким, чтоб за один запуск он успешно переваривал некоторую часть данных и отмечал где-то (в базе, например) на каком месте он остановился. При следующем запуске с этого места пусть и начинает. Скрипт дёргать аяксом с веб-странички. Ответ от сервера будет сигналом для следующего запуска. Попутно можно прогресс-бар вывести. Разумеется, если закрыть браузер (отрубить инет, выключить комп), то выполнение задачи приостановится.
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39045149
morewind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пусть скрипт вызывает сам себя с передачей новому экземпляру параметра "откуда продолжать".
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39045154
morewind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добавлю.

Однажды, делал через браузер пользователя, высылал ему после порции обработки страницу с
<meta http-equiv="refresh" content="10;URL=http://url?param=...">
после чего браузер обновлял страницу благодаря чему снова вызывался скрипт с передачей ему параметра откуда продолжать обработку.
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39045249
ssaich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
morewindДобавлю.

Однажды, делал через браузер пользователя, высылал ему после порции обработки страницу с
<meta http-equiv="refresh" content="10;URL=http://url?param=...">
после чего браузер обновлял страницу благодаря чему снова вызывался скрипт с передачей ему параметра откуда продолжать обработку.

Спасибо, взял Ваш вариант на вооружение
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39045278
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
morewind<meta http-equiv="refresh" content="10;URL=http://url?param=...">
после чего браузер обновлял страницу благодаря чему снова вызывался скрипт с передачей ему параметра откуда продолжать обработку.Вполне рабочий вариант при некоторых оговорках. А именно, если повторная обработка данных (после обрыва/восстановления связи, например, или при вызове скрипта из закладок) не принесёт проблем, кроме попусту потраченного времени.
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39045450
ssaich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все равно время от времени получаю

Fatal error: Maximum execution time of 120 seconds exceeded in E:\home\magaz\www\load2.php on line 48

если обрабатываю построчно и передаю по ссылке смещение от куда начинать читать файл , то все работает , но неимоверно долго
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39045467
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ssaich,
тогда надо подходить с другой стороны... Что за файл,каков его размер и что вы конкретно сравниваете.
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39045471
ssaich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kunaksergeyssaich,
тогда надо подходить с другой стороны... Что за файл,каков его размер и что вы конкретно сравниваете.

Есть вот такой код
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
<?php
include_once("./config.php");
function meta_page_refresh($url,$time=0){
        if($time<0)$time=0;
        echo '
        <meta http-equiv="refresh" content="'.$time.';url='.$url.'">';
}
      $handle = @fopen($_SERVER['DOCUMENT_ROOT']."/import.tmp", "r");

      $Offset=(int)$_GET['num'];
       $Cnt=(int)$_GET['count'];
      if (isset($Offset))
      {
    fseek($handle,$Offset,SEEK_SET);
    }
     else
     {
       fseek($handle,0) ;
       }


        $link = mysql_connect(DB_HOSTNAME, DB_USERNAME, DB_PASSWORD)
        or die(" : " . mysql_error());
    print " <br/>";
            mysql_query("SET NAMES 'utf8'");
           mysql_query("SET CHARACTER SET utf8");
           mysql_query("SET CHARACTER_SET_CONNECTION=utf8");
          mysql_select_db(DB_DATABASE) or die("!!");

    $query = "SELECT MAX(product_id) FROM oc_product";
    $result = mysql_query($query) or die("! : " . mysql_error());
    $SetStatus="UPDATE oc_product SET `status` = '0'";
    if ($Offset==0)
    mysql_query($SetStatus);
    //**********************
while (($buffer = fgets($handle)) !== false)
{
$buffer = str_replace(array("\r\n", "\r", "\n"), '', $buffer);
         $ex=explode("@@@",$buffer);
         $model=explode(" ",$ex[1]);
 // что то делаем
if ($num_rows==0)

{
 // что то делаем

if ($id_manufacturer)
     {
     // что то делаем
      }

      else
      {
       // что то делаем
         if ($id_manufacturer)
             {
    // что то делаем
             }
               else
               {
     // что то делаем
             if ($id_manufacturer)
                 {
              // что то делаем
                   }
                    else
                    {
                    // что то делаем
                      }
                        }
      }
  //-----------------------
 // что то делаем
 }
  else if ($num_rows==1)
   {
        // что то делаем
   }
   meta_page_refresh('load2.php?num='.ftell($handle)."?count=".$i,0);
    }
 if (ftell($handle)==$Offset) die ("DONE");
// }



fclose($handle);

?>
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39045484
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ssaich,
какой формат и размер имеет файл import.tmp? Вы сами его генерируете?
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39045528
ssaich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kunaksergeyssaich,
какой формат и размер имеет файл import.tmp? Вы сами его генерируете?
Да там просто строки с разделителем @@@ обычный текстовый файл
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39045622
morewind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ssaichвсе равно время от времени получаю

Fatal error: Maximum execution time of 120 seconds exceeded in E:\home\magaz\www\load2.php on line 48

если обрабатываю построчно и передаю по ссылке смещение от куда начинать читать файл , то все работает , но неимоверно долго

Как вариант, ловить самому время выполнения скрипта и при приближении к 120сек вызывать meta_page_refresh
для этого в самом начале написать
$currTime = time();
и в цикле обработки проверять
if ($currTime + 100 < time())
и при истине вызывать meta_page_refresh и завершать работу.
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39045647
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если размер файла это слабое место, то нужно разбирать его с помощью системы или писать код на пример на СИ и запускать его через
system()
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39045683
ssaich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
morewind,

Залил на хостинг, работает без проблем, у меня же на локальном хосте нет нет, да подглючит (настройки пхп сделал почти такие же как у хостера)
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39045718
morewind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
quot ssaich

Возможно, общая производительность сервера у хостера существенно выше чем локального хоста, поэтому скрипт успевает отработать до таймлимита.
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39045743
morewind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
kunaksergeyесли размер файла это слабое место, то нужно разбирать его с помощью системы или писать код на пример на СИ и запускать его через
system()

Для бинарников, и прочих пользовательских программ, тоже могут стоять ограничения на время выполнения, и тот же "код на СИ" будет прибиваться по таймлимиту. И менее универсальнее, хостер может поменять архитектуру сервера и "код на СИ" перестанет работать.
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39045744
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ssaichЗалил на хостинг, работает без проблемПротестируйте в часы наибольшей нагрузки на сервер, во время выполнения бекапов. Результаты иногда могут оказаться иными.
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39046316
ShkrylAndrei
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А можно узнать суть задачи? что за файл, почему сравнивается именно с базой данных, какая задача решается вашим скриптом?
И откуда такой большой объем данных, если он не укладывается в тайм_лимит? Может просто брать информацию из базы, сохранять в обычный файл на сервере, и потом уже работать как с отдельной структурой информации.
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39046442
ssaich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShkrylAndreiА можно узнать суть задачи? что за файл, почему сравнивается именно с базой данных, какая задача решается вашим скриптом?
И откуда такой большой объем данных, если он не укладывается в тайм_лимит? Может просто брать информацию из базы, сохранять в обычный файл на сервере, и потом уже работать как с отдельной структурой информации.

Ну проблема уже скажем так решена , ради интереса алгоритм его работы кратко опишу

1) Открываем и читаем файл построчно
2) Отключаем весь товар что есть в БД (то есть не показываем его покупателю)

879441@@@HUAWEI ASCEND G630 BLACK@@@1@@@8040.00@@@HUAWEI ASCEND G630 BLACK@@@278
886991@@@Автомобильный FM-модулятор ROLSEN RFA-340@@@1@@@440.00@@@Автомобильный FM-модулятор ROLSEN RFA-340@@@297

и так далее

3) Разбиваем строку сначала
$ex=explode("@@@",$buffer);

Проверяем по коду 879441 в базе- есть ли такой товар в базе ?

Если нет, то
Разбиваем по пробелу для того что бы выбрать фирму(производителя), для примера в первой строке фирма HUAWEI, но есть строки такого вида
для фирма (производитель ) по порядку первое либо второе и тд например Автомобильный FM-модулятор ROLSEN RFA-340
$model=explode(" ",$ex[1]);

Далее спрашиваем у базы есть ли такой производитель ? $model[0] если нет то спрашиваем , а такой ? $model[1] если нет то спрашиваем еще раз , а такой ? $model[2]

Если нашли производителя получаем его код и пишем в базу сам товар с кодом производителя
Далее пишем информацию (к какой категории товара его отнести и тд)в другие таблички

Если товар есть , то

Обновляем у товара только цену, и включаем его (товар отображается на витрине)
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39046461
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ssaich,
авторАвтомобильный FM-модулятор ROLSEN RFA-340
$model=explode(" ",$ex[1]);
Я так понимаю, что в $model[0] у вас попадет Автомобильный и это станет вашим производителем и вы будете искать его в списке производителей?
Сколько ж у вас запросов к базе при обработке файлов?
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39046476
ssaich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kunaksergeyssaich,
авторАвтомобильный FM-модулятор ROLSEN RFA-340
$model=explode(" ",$ex[1]);
Я так понимаю, что в $model[0] у вас попадет Автомобильный и это станет вашим производителем и вы будете искать его в списке производителей?
Сколько ж у вас запросов к базе при обработке файлов?
В данном случае , если по производителю - то три запроса

Автомобильный соответственно производителем не может быть, третий запрос по слову ROLSEN будет верным

Сам файл выгружается из 1С в таком вот виде, а "конфигураст 1с" не сделал почему то, что при загрузке прайса в 1с производитель попадал туда куда надо
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39046600
kunaksergey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ssaich,
Если у вас производитель гарантировано только из больших букв, то можно c помощью регулярки выдернуть только такие слова или например сформировать запрос из нескольких условий и брать первую строку результата... Уже получится -2 запроса при итерации...
А лучше взять 1С-ника, пусть выгружает вам данные в xml, далее xslt получаешь своих производителей и одним запросом получаешь свои данные.
...
Рейтинг: 0 / 0
Пошаговая работа PHP скрипта
    #39050926
ssaich
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kunaksergeyssaich,
Если у вас производитель гарантировано только из больших букв, то можно c помощью регулярки выдернуть только такие слова или например сформировать запрос из нескольких условий и брать первую строку результата... Уже получится -2 запроса при итерации...
А лучше взять 1С-ника, пусть выгружает вам данные в xml, далее xslt получаешь своих производителей и одним запросом получаешь свои данные.

мммм... например ? можно кусочек кода ?
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / Пошаговая работа PHP скрипта
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]