E ai galera tudo bem, Bom não sou muito da área de php, pois gosto muito do Java, mas onde eu trabalho atualmente Embrapa, estamos desenvolvendo um sistema em php, usando o ScripCase, mas estou tentando fazer um upload na mão. Então vamos para o Estudo de Caso de Uso.
Pode fazer upload de arquivos somente txt, csv.
Tamanho maximo 2MB.
Depois de fazer upload, deve se mostrado para o usuário em uma tabela, com os índice de cada linha até a leitura final do documento, em tela, isso porque pode haver documento com cabeçalho, nessa mesma tabela tem um input do tipo number para o usuário informar onde começa a nova contagem para, finalmente fazer o insert no Banco de Dados.
Sucesso que eu obtive.
Conseguir validar as extensões, consegui validar o tipo dele, o tamanho, tudo certinho,
Conseguir ler o arquivo e preencher na tabela. consegui fazer o campo do tipo number, debuguei e retorna o valor passado pelo usuario certo.
mas no meu código tenho dois ifs, um para if ( isset($_POST['sendArquivoUpload'] ) )
, ou seja caso usuário confirme o uplode entra aqui, tenho um outro que me para o namber, esse não consigo ver o meu novo vetor for desse carinha aqui if( isset( $_POST['sendIniciarContagemDaNovaLista'] ) )
eu consigo ver o array o problema e que eu preciso disso dentro do meu segundo if. vou mandar o documento, para vocês analizar melhor. Desde já obrigado
<meta charset="utf-8" />
<style type="text/css">
.centro,.cordeFundo{width:500px;background:#ddd;display:block;margin:10px auto}table.header{width:500px;border-collapse:collapse;border:1px solid#444}table.header td{border:1px solid#444;padding:3px 5px}table.header th{background:#ddd}table.header th.coluna75px{width:75px}table.header th.coluna100px{width:100px}div.scrollTable{background:#fff;border:1px solid#888;padding:5px;height:200px;overflow:auto}div.scrollTable table.header,div.scrollTable div.scroller table{width:500px;border-collapse:collapse}div.scrollTable table.header th,div.scrollTable div.scroller table td{border:1px solid#444;padding:3px 5px}div.scrollTable table.header th{background:#ddd}div.scrollTable div.scroller{height:auto;overflow:auto}div.scrollTable.coluna75px{width:75px}div.scrollTable.coluna100px{width:100px}div.scrollTable.coluna150px{width:150px}
</style>
<?php
$leituraArray = array();
$count = 0;
if ( isset($_POST['sendArquivoUpload'] ) )
{
// Armazenando os dados na variavel
$arq = $_FILES['arq']; // Nos retorna um array esse e nome do campo do formulario
// Proximo passo e debugar o nosso array
// echo "<pre>";
// print_r($arq);
// echo "</pre>";
# Determina os tipos de arquivo aceito
$permissao = array( 'text/plain', 'text/csv' );
# valida as extensões
$extensao = ( $arq['type'] == 'text/plain' ? '.txt' : '.csv' );
# tamanho maximo permitido 1GB maximo permitido
$size = 1024*1024*2;
// Validação
if ($arq['size'] > $size) //se o idince size for maior que nossa variável entra aqui
{
echo 'O arquivo não pode ser maior do que 2MB';
}
elseif ( !in_array( $arq['type'], $permissao ) )
{
echo 'Apenas arquivos (txt ou csv) são permitidos';
}
else # Aqui e que vamos entra para fazer o upload
{
$pasta = ( $arq['type'] == 'text/plain' ? 'arquivos' : 'arquivos' );
$pasta = 'uploads/'.$pasta; // Aqui concatenamos o tipo de pasta ser salva graças a nossa ternaria
$nome = md5( time() ).$extensao; # concatenando com o a estensão, neste caso não tem como existir dois arquivos com o mesmo nome
// Agora vamos validar upload das imagens
if( move_uploaded_file( $arq['tmp_name'],$pasta.'/'.$nome ) )
{
echo 'Arquivo enviado com sucesso !'."<br />";
# Armazenando o nome do arquivo importado
$nomeDoArquivoASerLido = "/var/www/uploads/arquivos/".$nome;
# o que queremos que faça apos abri o arquivo
$modoDoArquivoASerLido = "r";
# Abre o arquivo para leitura
$abreArquivoParaLeitura = fopen( $nomeDoArquivoASerLido, $modoDoArquivoASerLido );
# validando se o arquivo pode ser lido
if( !$abreArquivoParaLeitura )
{
echo 'Não é possível abrir o arquivo '." $nomeDoArquivoASerLido"."<br />";
exit(); # não abri mata a aplicação
}
?>
<!-- Preenchendo a tabela -->
<div class="centro">
<table class="header">
<tr>
<th class="coluna75px">Linha</th>
<th class="coluna100px">Conteúdo</th>
<th></th>
</tr>
</table> <!-- end table header -->
<div class="scrollTable">
<div class="scroller">
<table>
<?php
# lendo o arquivo até o final
while( !feof( $abreArquivoParaLeitura ) )
{
$linha = fgets( $abreArquivoParaLeitura );
$GLOBALS[$leituraArray[$count] = $linha];
?>
<tr>
<td >
<?php echo $count; ?>
</td> <!-- Enumera as linha da minha tabela de acordo com o tamanho do arquivo -->
<td class="coluna75px">
<center><?php echo str_replace("\r\n", "<br />", $linha); ?></center>
</td><!-- Substiui o quebra de linha no documento (\n), por quebra de linha no navegador (<br />) -->
<?php $count++; ?>
</tr>
<?php
} // end while
#fechando o arquivo
fclose( $abreArquivoParaLeitura );
?>
</table> <!-- end table table -->
</div> <!-- end div scroller -->
</div> <!-- end div scrollTable -->
</div> <!-- end div centro -->
<div class="centro cordeFundo">
<!-- Forumulario para saber onde começar a cotar -->
<center>
<form id="formIniciaPosicao" action="" method="post" enctype="multipart/form-data">
<label>
<span>Iniciar importação na linha: </span>
<input type="number" step="1" min="0" max="<?php echo $count -1; ?>" value="0" name="linhaInicioImportacao" />
</label>
<input type="submit" name="sendIniciarContagemDaNovaLista" value="Confirmar" />
</form>
</center>
</div>
<?php
} // end if move_uploaded_file(filename, destination);
else
{
echo 'Erro ao enviar o arquivo';
}
} // end else validação
} // end if sendArquivoUpload
?>
<!-- Formulário para upload -->
<hr />
<!-- Validação do forumulario de enviar novo registro -->
<?php
// Validando por posição do novo registro informado pelo usuário
if( isset( $_POST['sendIniciarContagemDaNovaLista'] ) )
{
$novaContagemInformada = $_POST['linhaInicioImportacao'];
//echo $novaContagemInformada;
// for ($i=$novaContagemInformada; $i < 63; $i++)
// {
// echo $i."<br />";
// }
//$novaLeituraDoNovoArray = array_slice($leituraArray, $novaContagemInformada); //saida
//
//echo "<pre>";
//print_r($leituraArray);
//
$input = array_slice($leituraArray, $novaContagemInformada);
foreach ($input as $value)
{
echo $value."<br/>";
}
// for ($i=0; $i < count($novaLeituraDoNovoArray); $i++) {
// echo $novaLeituraDoNovoArray[$i];
// }
// //
// echo "<pre>";
// print_r($leitura);
}
?>
<form name="formEnvioUploadArquivo" action="" method="post" enctype="multipart/form-data">
<label>
<span>Arquivo</span><br />
<input type="file" name="arq" />
</label>
<br />
<br />
<input type="submit" value="Enviar Dados" name="sendArquivoUpload" />
</form>
<?php
// echo 'Debugando o meu novo array'."<br />";
// $input = array_slice($leituraArray, 50);
echo "<pre>";
print_r( $leituraArray);
echo $novaContagemInformada;
// foreach ($input as $value)
// {
// echo $value."<br/>";
// }
?>