Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

dochipis

Erro 503 ao importar txt para o mysql

Recommended Posts

Olá gente.

Estou com o seguinte problema:

Ao ler um txt e importar para o mysql está me retornando o seguinte erro:

 

Error 503 Backend fetch failed

Backend fetch failed

Segue o código:

<?php
ini_set("max_execution_time",-1);
set_time_limit(0);
ini_set('set_time_limit', 0);
include("../../config.base.inc.php");
require('../inc/autoload.inc.php');
include("../inc/verifica.inc.php");
include('../../classes/config.db.inc.php');
    


$total = 1;
$cadastrados    =   0;
$alterados      =   0;

$htmlXls = '<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">


<style>

    * {
        font-family: Calibri, Arial, Helvetica, sans-serif;
    }
    
    table tr td {
        font-size: 11pt;    
    }
    
    .branco{
        color: #FFF;
    }
</style>
</head>
<body bgcolor="#FFFFFF" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">

<table id="Table_01"  width="1203" height="516" border="1" cellpadding="10" cellspacing="0">
    <tr>
        <td>Data da importação:</td><td>'.date('d/m/Y H:i:s').'</td>
    </tr>            
    <tr>
        <td>Cadastrados:</td><td>{CADASTRADO}</td>
    </tr> 
    <tr>
        <td>Atualizado:</td><td>{ALTERADO}</td>
    </tr>                                
</table>
<table id="Table_01"  width="1203" height="516" border="1" cellpadding="10" cellspacing="0">
    <tr>
        <td>Item</td>
        <td>Nome</td>
        <td>Qtde</td>
        <td>Preço</td>
        <td>Situação</td>
    </tr>';

$linhas = file('arquivo/itens.txt');

$db = new mysqli( HOSTNAME , USUARIO , SENHA, DB );

foreach ($linhas as $linha) 
{

    list($cod_item, $nome, $modelo, $medida, $quantidade, $cod_categoria, $cod_subcategoria, $dimensoes, $especificacao, $preco, $peso, $nrfotos) = explode('{!}', $linha);
    
    $nrfotos = count( explode(',', $nrfotos));

    $preco_temp = ($preco * ( $_SESSION['TAXA'] / 100 ) );

    $preco_db = ($preco + $preco_temp );  

    $sqlExiste = "SELECT cod_item FROM  produtos WHERE cod_item =  '$cod_item'; " ;
    
    $resultado = $db->query( $sqlExiste );

    if(!$resultado->num_rows)
    {
        
        $sqlInsert =   "INSERT INTO produtos (`codigo`, `cod_item`, `nome`, `modelo`, `medida`, `quantidade`, `cod_categoria`, `cod_subcategoria`, `dimensoes`, `especificacao`, `preco`, `peso`, `tipo`, `nr_fotos`, `ativo`) VALUES ( NULL,  '$cod_item', '$nome', '$modelo', '$medida', '$quantidade', '$cod_categoria', '$cod_subcategoria', '$dimensoes', '$especificacao', '$preco_db', $peso, '', $nrfotos,  'S' );\r\n";
        $db->query( $sqlInsert );

        $cadastrados++;
        
        $htmlXls .='<tr><td>'.$cod_item.'</td><td>'.$nome.'</td><td>'.$quantidade.'</td><td>R$ '.$preco_db.'</td><td bgcolor="#16E038">Cadastrado</td></tr>';

        $sqlInsert = null;
                          
    }
    else
    {
            $sqlUpadte =   "UPDATE produtos  SET  nome = '".$nome."', modelo = '".$modelo."', medida = '".$medida."', quantidade = '".$quantidade."', cod_categoria = '".$cod_categoria."', cod_subcategoria = '".$cod_subcategoria."', dimensoes = '".$dimensoes."', especificacao = '".$especificacao."', preco = '".$preco_db."', peso = '".$peso."', nr_fotos    =   '".$nrfotos."', ativo = 'S' WHERE  cod_item = '".$cod_item. "';\r\n";
            
            $db->query( $sqlUpadte );
                            
            $alterados++;

            $htmlXls .='<tr><td>'.$cod_item.'</td><td>'.$nome.'</td><td>'.$quantidade.'</td><td>R$ '.$preco_db.'</td><td bgcolor="#FAE43C">Atualizado</td></tr>';

            $sqlUpadte = null;
    }

    $resultado->close(); 
  
    $sqlExiste = null;
}


$htmlXls .= '</table></body></html>';

$htmlXls = str_replace('{CADASTRADO}', $cadastrados, $htmlXls);
$htmlXls = str_replace('{ALTERADO}', $alterados, $htmlXls);

$fp = fopen('arquivo/importacao.xls', 'w');
fwrite($fp, $htmlXls);
fclose($fp);

echo "<pre><h4>Total de registros cadastrados: <b>".$cadastrados."</b></h4>";
echo "<h4>Total de registros atualizados: <b>".$alterados."</b></h4>";
echo "<h4>Relatório da importação: <b><a href='arquivo/importacao.xls'>baixar relatório</a></b></h4>";
echo "<p><a href='importar.php'>« importar outro arquivo</a></p>";

Tem algo de errado no script, se tiver uma maneira mais correta de fazer por favor me mostrem.

 

flws...

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

2MB com 3000 linhas

O script está causando o seguinte erro:

Error 503 Backend fetch failed
Backend fetch failed
Guru Meditation:
XID: 67486626
Varnish cache server

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá difícil, parece que não há erro no seu código. O jeito é ir testando parte do código e ver em que ponto ele começa a apresentar o erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

No servidor local o script executa sem problemas, mas se eu executar ele no servidor onde o site está hospedado, retorna esse erro.

É como se o servidor parasse de responder.

Será que existe alguma maneira do script executar mais rápido?

 

flws...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Então provavelmente o servidor bloqueia o ini_set() de algumas variáveis, e deve estar travando por causa da quantidade de linhas na execução. Experimente processar com menos linhas para saber se é isso mesmo.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz um teste com o seguinte código(php.net):

if (ob_get_level() == 0) ob_start();

for ($i = 0; $i<10; $i++){

        echo "<br> Line to show.";
        echo str_pad('',4096)."\n";   

        ob_flush();
        flush();
        sleep(1);
}

echo "Done.";

ob_end_flush();

E o resultado não é impresso linha por linha como deveria, executa o script todo primeiro para depois mostrar.

Tem algum modo de alterar isso?

 

flws..

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.