Ir para conteúdo

Arquivado

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

Carcleo

Preg_match

Recommended Posts

Ola pessoal,

 

Estou começando a me preparar para fazer uploads de varias imagens com patch no Banco mas estou me travando na verificação da extensão.

 

O que eu queria era ver se na matriz (array) do campo file que envia "n" fotos ( ou imagens), há extensões validas.

Ou seja, Se o aqruivo que enviei tem extensão valida.

 

No (pequeno) script que estou fazendo poara teste, só passa a extensão gif. Png, jpg e jpeg não passam.

 

Será que estou fazendo errado?

 

<form action="tt.php" method="post"  enctype="multipart/form-data">
<b>Envio das fotos</b><br />
<input type="file" name="fotos[]"><br />
<input type="submit" value="OK"/>
</form>

<?
$Fotos = $_FILES['fotos'];
//$Fotos = isset($_FILES["fotos"]) ? $_FILES["fotos"] : FALSE;
for($i = 0; $i < sizeof($Fotos['name']); $i++) {
	
    $Nome    = $Fotos['name'][$i];
    $Tamanho = $Fotos['size'][$i];
    $Tipo    = $Fotos['type'][$i];
    $Tmpname = $Fotos['tmp_name'][$i];
	
print $Nome."<br>";
print $Tamanho."<br>";
print $Tipo."<br>";
print $Tmpname."<p>";

print preg_match('/^image\/(gif|jpeg|jpg|png)$/', $Tipo)."<br>";

preg_match('/^image\/(gif|jpeg|jpg|png)$/', $Tipo, $Ext)."<br>";

print $Ext[1]."<br>";

if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$",$Ext[1]))
    {
        print "Ok";
    }
	else {        
	    print "iiiiiii"; 
		  }
                                            } //FIM DO FOR
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom, descobri parte do erro.

 

Porem agora preciso usar a função mas o resultado é a criação de um arquivo sem extensão e nem pasta é.

 

O que será que esta errado:

 

<form action="tt.php" method="post"  enctype="multipart/form-data">
<b>Envio das fotos</b><br />
<input type="file" name="fotos[]"><br />
<input name="MAX_FILE_SIZE" type="hidden" value="1">
<input type="submit" value="OK"/>
</form>

<?
$dir="img/";
$Fotos = $_FILES['fotos'];
//$Fotos = isset($_FILES["fotos"]) ? $_FILES["fotos"] : FALSE;
for($i = 0; $i < sizeof($Fotos['name']); $i++){
	
    $Nome    = $Fotos['name'][$i];
    $Tamanho = $Fotos['size'][$i];
    $Tipo    = $Fotos['type'][$i];
    $Tmpname = $Fotos['tmp_name'][$i];
///////////////////////	
print $Nome."<br>";
print $Tamanho."<br>";
print $Tipo."<br>";
print $Tmpname."<p>";
//////////////////////////
if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$",  $Fotos['type']))
        {
			echo "OPA"."<br>";
			echo $Fotos['type'][$i]."<br>";
		}
else    {        
	    echo "IIIIIIIIII"."<br>";
			echo $Fotos['type'][$i]."<br>";
	    }
//////////////////////////
           $Caminho = $dir . $Nome;
			print $Caminho."<br>";

            if(move_uploaded_file($Tmpname, $Caminho))			
            {
                echo 'Foto #' . ($i+1) . ' enviada.<br/>';
                
                // Faz contagem de enviada com sucesso
                $Conta++;
            }            
            else // Erro no envio
            {
                // $i+1 porque $i começa em zero
                echo 'Não foi possível enviar a foto #' . ($i+1) . '<br/>';
            }


                                          } //FIM DO FOR
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas você precisa mesmo usa uma ER para isso?

 

Veja:

 

$extensions = array( 'gif', 'jpg', 'png' );

$validFile = 'file.jpg';
$invalidFile = 'file.zip';

var_dump( in_array( getExtension( $validFile ), $extensions ) );
var_dump( in_array( getExtension( $invalidFile ), $extensions ) );

function getExtension( $filename ) {
   return substr( $filename, strpos( $filename, '.' ) + 1 ); 
}

Saída:

 

bool(true)

bool(false)

Criei uma função apenas para reutilizar a rotina que retorna a extensão.

 

A idéia é criar um array com todas as extensões válidas e verifica com in_array() se a extensão do arquivo está presente nessa lista.

 

;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olha só

 

A questão das extensões já conesgui.

 

O que ta pegando agora é a questão do upload.

 

Ele esta jogando na pasta principal um aqruivo com o nome do diretório e não o nome do aqruivo e sem a extensão.

Tipo, se a gente for lá, manualmente e colocar a extensão o arquivo abre entendeu?

 

Nova situação agora.

 

Mesmo usando no script abaixo as funções Copy ou move_uploadedfiles, tanto faz, o resultado é o mesmo.

 

Só da certo se eu colocar apenas o nome da imagem.

Caso eu coloque o nome do diretório que quero colocar a imagem ai não faz o upload.

Segue:

<form action="tt.php" method="post"  enctype="multipart/form-data">
<b>Envio das fotos</b><br />
<input type="file" name="fotos[]"><br />
<input type="submit" value="OK"/>
</form>

<?
$dir="img/";
$Fotos = $_FILES['fotos'];
//$Fotos = isset($_FILES["fotos"]) ? $_FILES["fotos"] : FALSE;
for($i = 0; $i < sizeof($Fotos['name']); $i++){
	
    $Nome    = $Fotos['name'][$i];
    $Tamanho = $Fotos['size'][$i];
    $Tipo    = $Fotos['type'][$i];
    $Tmpname = $Fotos['tmp_name'][$i];
//////////////////////////
if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$",  $Fotos['type']))
        {
            if(copy($Tmpname, $Nome)) // aqui, se eu colocar a variavel $Caminho o upload não vai.			
            //if(move_uploaded_file($Tmpname, $Nome))			
            {
                echo 'Foto #' . ($i+1) . ' enviada.<br/>';
                
                // Faz contagem de enviada com sucesso
                $Conta++;
            }            
            else // Erro no envio
            {
                echo 'Não foi possível enviar a foto #' . ($i+1) . '<br/>';
            }
		}
else    {        
	    echo "Erro";
	    }
                                          } //FIM DO FOR
?>

image/gif
img/Fim de Ano (6).gif
img/
gif
Fim de Ano (6).gif
C:\Windows\Temp\phpD12B.tmp

Bom pesoal.

 

Consegui resolvar parte do problema.

 

Agora, gostaria de pedir voces que ohasse por favor o script abaixo onde, na hora que chega o momento de gera uma miniaturta da imagem enviada por upload, ai dá o seguinte erro :

Warning: imagecreatefromjpeg(/tmp/phpfcthJD) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in /home/dinamica/public_html/teste_upload/Multiplos_Uploads.php on line 51
Esis o código

<b>Envio das fotos</b><br />

<form action="Multiplos_Uploads.php" method="post"  enctype="multipart/form-data">
<input type="file" name="fotos[]"><br />
<input type="file" name="fotos[]"><br />
<input type="file" name="fotos[]"><br />
<input type="submit" value="OK"/>
</form>

<?
$dir="teste_upload/normal/";
$dir_mini="teste_upload/mini/";
$Fotos = $_FILES['fotos'];
//$Fotos = isset($_FILES["fotos"]) ? $_FILES["fotos"] : FALSE;
for($i = 0; $i < sizeof($Fotos['name']); $i++){
	
    $Nome    = $Fotos['name'][$i];
    $Tamanho = $Fotos['size'][$i];
    $Tipo    = $Fotos['type'][$i];
    $Tmpname = $Fotos['tmp_name'][$i];
	$Caminho = $dir . $Nome;
	$Caminho_mini = $dir_mini . $Nome;	
	if (!$Nome) { 
				  echo 'Você não enviou nada na posição' . ($i+1) . '<br/>';
				 }
	else         {			 
					if(!eregi("^image\/(pjpeg|jpeg|png|gif|bmp)$", $Tipo))
							{
					
							echo 'O arquivo ' . ($i+1) . ' não é um arquivo válido.<br/>';
									
									// Faz contagem de enviada com sucesso
									$Conta++;
							}
					else    {        
								if(move_uploaded_file($Tmpname, $Caminho))			
								{
									echo 'Foto ' . ($i+1) . ' enviada.<br/>';
									// Faz contagem de enviada com sucesso
								   $Conta++;
									///cria a miniatura e faz io move_uploaded_file
													  
									  //IMAGEM A SER ABERTA
									  $imagem = $Tmpname; 
									  
									  //NOME DO ARQUIVO DA MINIATURA Igual o nome da original
									  $imagem_gerada = $Nome;
									  
									  //CRIA UMA NOVA IMAGEM
									  $imagem_orig = ImageCreateFromJPEG($imagem);
									  //LARGURA
									  $pontoX = ImagesX($imagem_orig);
									  //ALTURA
									  $pontoY = ImagesY($imagem_orig); 
									  
									  //DEFINE OS PARÂMETROS DA MINIATURA
									  $largura = 150;
									  $altura = ($pontoY * $largura) / $pontoX;
									  
									  //CRIA O THUMBNAIL
									  $imagem_fin = ImageCreateTrueColor($largura, $altura); 
									  
									  //COPIA A IMAGEM ORIGINAL PARA DENTRO
									  ImageCopyResampled($imagem_fin, $imagem_orig, 0, 0, 0, 0, $largura+1, $altura+1, $pontoX, $pontoY); 
									  
									  //SALVA A IMAGEM
									  ImageJPEG($imagem_fin, "$dir_mini/".$imagem_gerada,100); 
									  
									  //LIBERA A MEMÓRIA
									  ImageDestroy($imagem_orig);
									  ImageDestroy($imagem_fin);

								  }            
								  else // Erro no envio
								  {
									  echo 'Não foi possível enviar a foto' . ($i+1) . '<br/>';
								  }
							}
				  }
                                          } //FIM DO FOR
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O interessante é que esta funcionando legalzinho.

 

Mas o problema que estou tendo agora é com relação a geração ds miniatura.

 

Tem como dar uma luz irmão?

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.