长 PHP 脚本没有 运行 完全
Long PHP script does not run completely
问题
我正在尝试在 PHP 中执行一个读取 CSV 文件的脚本,并且对于脚本读取的每一行,它都会获取代码以验证它是否已存在于数据库中。如果此代码存在于数据库中更新库存,如果不存在则插入到数据库中。
我的 CSV 文件有 700 多行,每行至少执行 2 个查询,因此集成页面超时。
尝试次数
创建了一个禁用 GZIP 的 .htaccess 文件。
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。当我删除脚本时恢复正常。
除非你有异常 large/inefficient database/queries 运行宁 1400 次查询不应该花费太长时间以至于超时。
如果可能,运行 将脚本作为 cli 脚本并查看输出内容以及 运行 需要多长时间(cli 脚本没有最长执行时间)。
您至少需要包含伪代码,以便我们帮助调试它。
要进行更多调试,请在每次迭代中添加输出行并刷新输出缓冲区。这将确保页面不会超时。
问题
我正在尝试在 PHP 中执行一个读取 CSV 文件的脚本,并且对于脚本读取的每一行,它都会获取代码以验证它是否已存在于数据库中。如果此代码存在于数据库中更新库存,如果不存在则插入到数据库中。
我的 CSV 文件有 700 多行,每行至少执行 2 个查询,因此集成页面超时。
尝试次数 创建了一个禁用 GZIP 的 .htaccess 文件。
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。当我删除脚本时恢复正常。
除非你有异常 large/inefficient database/queries 运行宁 1400 次查询不应该花费太长时间以至于超时。
如果可能,运行 将脚本作为 cli 脚本并查看输出内容以及 运行 需要多长时间(cli 脚本没有最长执行时间)。
您至少需要包含伪代码,以便我们帮助调试它。
要进行更多调试,请在每次迭代中添加输出行并刷新输出缓冲区。这将确保页面不会超时。