проблема
Я пытаюсь выполнить скрипт на PHP, который читает файл CSV, и для каждой строки, которую читает скрипт, он получает код, чтобы проверить, существует ли он уже в базе данных. Если этот код существует в базе данных, обновите запас, если нет, просто вставьте в БД.
Мой CSV-файл содержит более 700 строк, каждая строка выполняет как минимум 2 запроса, поэтому время ожидания страницы интеграции истекло.
ATTEMPS
Создан файл .htaccess, который отключает GZIP.
SetEnv no-gzip 1
Установить мой лимит более 1000+
set_time_limit (9999999999);
Что происходит
Когда я запускаю скрипт, он читает 40 строк, останавливается и перестает загружаться.
РЕДАКТИРОВАТЬ
Для каждой строки выполните этот код:
if ($produto->getId()) {
$stock = $produto->getStockData();
$stock['qty'] = $quantidade;
$stock['is_in_stock'] = $this->initStock($quantidade);
$stock['manage_stock'] = 1;
$stock['use_config_manage_stock'] = 1;
if ($altura > 0)
$produto->setData('volume_altura', $altura);
if ($comprimento > 0)
$produto->setData('volume_comprimento', $comprimento);
if ($largura > 0)
$produto->setData('volume_largura', $largura);
$produto->setData('weight', $this->initWeight($peso));
$produto->setStockData($stock);
if ($produto->save()) {
$this->showLog('<EDIT> Produto com código [' . $codigo . '] editado com sucesso.', true);
$this->writeLog('<EDIT> Produto com código [' . $codigo . '] editado com sucesso.');
} else {
$this->showLog('<EDIT> Não foi possível editar o produto com código [' . $codigo . ']', false);
$this->writeLog('<EDIT> Não foi possível editar o produto com código [' . $codigo . ']');
}
} else {
$produto = Mage::getModel('catalog/product');
$produto->setTypeId('simple');
$produto->setAttributeSetId(4);
$produto->setData('tax_class_id', 0);
$produto->setVisibility(1);
$produto->setStatus(1);
$produto->setData('sku', $sku);
$produto->setData('color', $cor);
$produto->setData('name', utf8_encode($descricao));
$produto->setData('marca', $this->initAttribute(148, $marca));
$produto->setData('codigo_barra', $codBarra);
$produto->setData('price', $preco);
if ($altura > 0)
$produto->setData('volume_altura', $altura);
if ($comprimento > 0)
$produto->setData('volume_comprimento', $comprimento);
if ($largura > 0)
$produto->setData('volume_largura', $largura);
$produto->setData('cost', $custo);
$stock['qty'] = $quantidade;
$stock['is_in_stock'] = $this->initStock($quantidade);
$stock['manage_stock'] = 1;
$stock['use_config_manage_stock'] = 1;
$produto->setStockData($stock);
$produto->setData('weight', $this->initWeight($peso));
if ($produto->save()) {
$this->showLog('<NEW> O produto com código [' . $codigo . '] foi adicionado com sucesso.', true);
$this->writeLog('<NEW> O produto com código [' . $codigo . '] foi adicionado com sucesso.');
} else {
$this->showLog('<NEW> - Não foi possível adicionar o produto com código [' . $codigo . ']', false);
$this->writeLog('<NEW> - Não foi possível adicionar o produto com código [' . $codigo . ']');
}
}
РЕШИТЬ:
Я обнаружил OB_START () в начале моего кода, и я не использовал ob. Когда я удалил скрипт обратно, работает нормально.
Если у вас нет исключительно большой / неэффективной базы данных / запросов, выполняющих 1400 запросов, это не займет так много времени, чтобы истекло время ожидания.
Если возможно, запустите сценарий как сценарий cli и посмотрите, что выводится и сколько времени требуется для его выполнения (максимальное время выполнения в сценарии cli отсутствует).
Вам нужно как минимум включить псевдокод, чтобы мы могли помочь в его отладке.
Для дополнительной отладки добавляйте строки вывода в каждой итерации и очищайте буфер вывода. Это гарантирует, что время ожидания страницы не истекло.
Других решений пока нет …