MO
Ler um arquivo csv e tentar converter a data - Erro
O Código abaixo é pra ler um arquivo csv e grava na tabela Títular, porém dá erro na hora de gravar a data de nascimento, daí eu comentei o trecho, outra coisa é que como tem mais ou menos 11.000 linhas ele só grava quatrocentos e pouco e dá o seguinte erro:
"Fatal error: Maximum execution time of 30 seconds exceeded in C:Vertrigowwwsisbs_testelibadiantidatabaseTTransaction.php on line 129";
Precisando urgente de ajuda, alguém se habilita?
"Fatal error: Maximum execution time of 30 seconds exceeded in C:Vertrigowwwsisbs_testelibadiantidatabaseTTransaction.php on line 129";
Precisando urgente de ajuda, alguém se habilita?
- <?php
- class ImportarTitularForm extends TPage
- {
- private $form;
- private $datagrid;
- private static $DIR_ARQUIVO = '/tmp/';
- public function __construct()
- {
- parent::__construct();
- $this->form = new BootstrapFormBuilder('form_documentos');
- $this->form->setFormTitle('Documentos');
- $this->datagrid = new BootstrapDatagridWrapper(new TQuickGrid);
- $this->datagrid->width = '100%';
- $id = new TEntry('id');
- $arquivo = new TFile('arquivo');
- $descricao = new TEntry('descricao');
- //$descricao->addValidation('Descrição do Arquivo', new TRequiredValidator);
- $descricao->setSize('100%');
- $id->setSize('100%');
- $arquivo->setSize('100%');
- // labels
- $lbl_id = new TLabel('ID');
- $lbl_descricao = new TLabel('Descrição');
- $lbl_arquivo = new TLabel('arquivo');
- $row1 = $this->form->addFields([$lbl_id, $id]);
- $row1->layout = ['col-md-2'];
- $row2 = $this->form->addFields([$lbl_descricao, $descricao]);
- $row2->layout = ['col-md-12'];
- $row3 = $this->form->addFields([$lbl_arquivo, $arquivo]);
- $row3->layout = ['col-md-12'];
- // grid
- $column_id = new TDataGridColumn('id','ID','center');
- $column_descricao = new TDataGridColumn('descricao','Descrição','left');
- $column_caminho = new TDataGridColumn('caminho','Caminho','left');
- $this->datagrid->addColumn($column_id);
- $this->datagrid->addColumn($column_descricao);
- $this->datagrid->addColumn($column_caminho);
- $this->datagrid->createModel();
- // add the search form actions
- $btn = $this->form->addAction('Salvar', new TAction(array($this, 'onSave')), 'fa:disk');
- $btn->class = 'btn btn-sm btn-primary';
- // vertical box container
- $container = new TVBox;
- $container->style = 'width: 90%';
- //$container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
- $container->add($this->form);
- $container->add($this->datagrid);
- parent::add($container);
- }
- public function onSave( $param )
- {
- try
- {
- $data = $this->form->getData();
- //$source_file = 'tmp/'.$doc->arquivo;
- $nome_arquivo = $param['arquivo']; //'tmp/'.$param['filename'];
- $objeto = fopen('tmp/SOLICITANTES.CSV','r');
- $cabecalho = FALSE;
- while(($dados = fgetcsv($objeto,1000,',')) !==false)
- {
- TTransaction::open('permission'); // open a transaction
- if($cabecalho)
- {
- $titular = new Titular;
- //print $dados[6];
- $titular->id = $dados[0];
- $titular->nome = $dados[1];
- $titular->cpf = $dados[2];
- $titular->nis = $dados[3];
- $titular->celular1 = $dados[4];
- $titular->celular2 = $dados[5];
- $datnasc = strtotime(str_replace("/","-",'11/11/11'));
- /*
- //garante que o array possue tres elementos (dia, mes e ano)
- if($datnasc <> trim('null'))
- {
- //cria um array
- $array = explode('/', $datnasc);
- if(count($array) == 3){
- $dia = (int)$array[0];
- $mes = (int)$array[1];
- $ano = (int)$array[2];
- //testa se a data é válida
- if(checkdate($mes, $dia, $ano)){
- $titular->datnasc = strtotime(str_replace("/","-",$dados[6]));
- }
- }
- }
- */
- //if ($dados[6] <> 'NULL')
- //{
- // $titular->datnasc = date($dados[6]);
- //}
- $titular->pai = $dados[7];
- $titular->mae = $dados[8];
- $titular->identidade = $dados[9];
- ////////////////////////////////////////////////////////////////////////////
- $titular->situacao_trab_id=1;
- $titular->escolaridade_id=1;
- $titular->ocupacaoprof_id=1;
- $titular->tipo_nec_esp_id=1;
- $titular->tempo_trabalho_id=1;
- $titular->renda_mensal_id=1;
- $titular->estado_civil_id=1;
- $titular->beneficio_id=1;
- $titular->sitconjugal_id=1;
- $titular->bairro_id=1;
- $titular->logradouro_id=1;
- $titular->rendatotal=1;
- $titular->renda_comp_id=1;
- $titular->observacao='';
- $titular->qtde_comodos_id=1;
- $titular->tempo_moradia_id=1;
- $titular->elim_dejetos_id=1;
- $titular->sit_fornec_id=1;
- $titular->numero_familias_habit_id=1;
- $titular->estado_habitacao_id=1;
- $titular->risco_localizacao_id=1;
- $titular->unidade_sanitaria_id=1;
- $titular->telefone_id=1;
- $titular->tempono_munic_id=1;
- $titular->energia_eletrica_id=1;
- $titular->uso_imovel_id=1;
- $titular->caracterisca_imov_id=1;
- $titular->transporte_id=1;
- $titular->ilum_publica_id=1;
- $titular->tipo_imovel_id=1;
- $titular->trat_dagua_id=1;
- $titular->destino_lixo_id=1;
- $titular->forma_ocupacao_id=1;
- $titular->local_banheiro_id=1;
- $titular->abast_dagua_id=1;
- ////////////////////////////////////////////////////////////////////////////
- $titular->store();
- }
- $cabecalho=TRUE;
- TTransaction::close(); // close the transaction
- }
- }
- catch (Exception $e) // in case of exception
- {
- new TMessage('error', $e->getMessage()); // shows the exception error message
- TTransaction::rollback(); // undo all pending operations
- }
- }
- /**
- * Carrega a grid com dados do BD
- */
- public function onReload( $param )
- {
- try {
- TTransaction::open('app');
- $key = $param['key'];
- $doc = Documento::where('id','=',$key)->load();
- foreach($docs as $doc) {
- $obj = new stdClass;
- $obj->id = $doc->id;
- $obj->descricao = $doc->descricao;
- $obj->caminho = $doc->caminho;
- $this->datagrid->addItem($obj);
- }
- TTransaction::close();
- } catch (Exception $e) {
- new TMessage('error',$e->getMessage());
- }
- }
- public function onEdit($param)
- {
- try {
- TTransaction::open('app');
- $key = $param['key'];
- $doc = Documento($key);
- $obj = new stdClass;
- $obj->id = $doc->id;
- $obj->descricao = $doc->descricao;
- $obj->caminho = $doc->caminho;
- $this->form->setData($obj);
- $this->onReload($param);
- TTransaction::close();
- } catch (Exception $e) {
- new TMessage('error',$e->getMessage());
- }
- }
- }
- ?>
Erro da data, você precisar saber como esta informação está no arquivo e converter para o formato do banco. No caso do time-out, é normal pois existe um tempo limite padrão.
Para resolver o problema do timeout use o seguinte:
Isso fará que o timeout seja desconsiderado.
Este comento deve colocado antes do inicio do processo de leitura do arquivo.