gzhegow
@gzhegow
aka "ОбнимиБизнесмена"

Проблема header/Location: и copy($path, $copy_path) — как решить?

Скрипт считывает огромный прайс лист на несколько сотен тысяч позиций.
Разумеется залить его в базу битрикса, определенного политикой компании невозможно за раз, учитывая особенности получения ID свойств
Соответственно поставлена задача написать считывалку прайслиста, которая будет редиректом запускать себя еще раз, если все ляжет, мы должны иметь возможность запустить скрипт с параметром продолжения загрузки и все должно отработать

Значит скрипт то я написал весь, он много чего умеет, но запутался вот где:

Я запускаю скрипт для 15 товаров с шагом 5 товаров.

В скрипте написано - если он запущен первый раз (нету $_GET["nofirst"]), то скопировать исходный файл и переименовать его в !#name чтобы не терять оригиналы.
После этого начинается построчный разбор файла с отжиранием от него верхней части и сохранением в рабочий вариант того, что осталось.

Для 15 товаров скрипт должен отработать 3 раза, по 5 товаров. Вместо этого он работает через раз правильно/неправильно - один раз он все делает идеально, второй раз он почему-то отгрызает кусок файла и сохраняет уже отгрызенный (в коде явно сначала сохранение, а потом отгрызание), а логи создаются как будто он запустился всего 2 раза (2 лог файла создано) - причем в первом входные параметры такие, как будто я первый раз его запустил, то есть он 1 раз отработал, отожрал кусок, ничего не сделал, а потом редиректом запустился второй раз причем забыв передать жестко заданные для редиректа параметры и запустился второй раз будто человеком и соответственно скопировал уже отгрызенный файл.

Создание логов висит на register_shutdown_function. Создание копии файла - функцией copy. Отгрызание - file_get_contents(), file_put_contents();

Соответственно такое поведение похоже на то, что какая-то функция работает асинхронно (в синхронном то языке) и ко второму выполнению еще не успела выполнится.

Как дебажить/решать такие проблемы в PHP?
  • Вопрос задан
  • 166 просмотров
Пригласить эксперта
Ответы на вопрос 1
veshetu
@veshetu
web-dev
в консоле отлаживай.

через веб закачивается csv и ставится флажок - что надо запустить обработку.

а обработка идет по крону. с лок файлом.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы