Ir para conteúdo

Arquivado

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

jadsonlucena

[Resolvido] Concatenar variável em uma função

Recommended Posts

Galera estou aqui tentando diminuir a quantidade de condição para validar e ler determinados tipos de imagens.

Mas me deparei com este problema de concatenação, pós ao tentar concatenar uma variável em uma função, acredito que o php a está interpretando como uma string.

 

Teria algum modo de fazer a concatenação da variável com a função?

$imagem = $_FILES['imagem'];
$tmp = $imagem['tmp_name'];
$type = $imagem['type'];

$extensao = str_replace(array('pjpeg', 'jpeg', 'jpg'), 'jpeg', substr($type, 6));

if (in_array($extensao, array('jpeg','png','gif'))) {
	$tratarImg = imagecreatefrom."$extensao".($tmp);
} else {
	$status = 'Tipo de arquivo não suportado';
}

 

Grato desde já, pela ajuda dos senhores!!! ;-P

Compartilhar este post


Link para o post
Compartilhar em outros sites

O PHP tem muito "achismo". Se é uma função que trabalha com string e um dado passado não é uma string, este será forçado a ser, então atente para esse detalhe.

 

Você pode sim concatenar o retorno de função, desde que essa função retorne algo. No caso daquele substr() ele retorna tudo aquilo que estiver após sexto caractere da string de entrada.

 

O que você tem de atentar é que substr() retorna FALSE caso falhe, como por exemplo, exigir seis caracteres de uma string de apenas 5.

 

A a conversão para string de FALSE é "nada", isto ´, uma string vazia, que não afeta a string final a ser gerada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno Augusto, desculpe por eu não ter explicado direito!!

 

 

Onde estou tendo o problema é na variável: $tratarImg, pós estou tentando modificar o tipo de imagem que ele ira resgatar.

 

Ex:

Com a concatenação da extensão da variável com a função ela teria que ficar mais ou menos assim:

De: imagecreatefrom."$extensao".($tmp); para:

Se for uma imagem jpg:

imagecreatefromjpeg($tmp)

Se for uma imagem png:

imagecreatefrompng($tmp)

Se for uma imagem gif:

imagecreatefromgif($tmp)

 

Espero que possa compreender melhor agora..

 

desculpe a negligencia e obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

A ideia é quase essa que você tentou aplicar :closedeyes:

 

Veja:

<?php

$filename = 'umbrella_corp.jpg';

switch( strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) ) )
{
   case( 'jpg' ):
   case( 'jpeg' ):
       $imagecreate = 'imagecreatefromjpeg';
       $imagesave   = 'imagejpeg';
       break;
   case( 'png' ):
       $imagecreate = 'imagecreatefrompng';
       $imagesave   = 'imagepng';
       break;
   case( 'gif' ):
       $imagecreate = 'imagecreatefromgif';
       $imagesave   = 'imagegif';
       break;
   default:
       trigger_error( 'Invalid image file', E_USER_ERROR );            
}

$resource = $imagecreate( $filename );

var_dump( $resource ); // resource(3, gd)

var_dump( $imagesave( $resource, $filename ) ); // boolean true

?>

 

:thumbsup:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu particularmente não acho legal trabalhar assim, dá margem para futuros bugs como por exemplo entrar uma imagem .jpg, a função ficaria imagecreatefromjpg e já daria mer**.

 

Mas, enfim...

<?php

$filename  = 'umbrella_corp.jpeg';
$extension = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );

if( in_array( $extension, array( 'jpeg', 'gif', 'png' ) ) )
{
   $imagecreate = 'imagecreatefrom' . $extension; 
   $imagesave   = 'image' . $extension;            
}

$resource = $imagecreate( $filename );

var_dump( $resource ); // resource(3, gd)

var_dump( $imagesave( $resource, $filename ) ); // boolean true

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carlos coelho, desculpe por tantas contestações, mas o que você pois ainda não é o que eu quero!!

 

 

Acredito que este exemplo irá sintetizar bem o que eu quero:

<?php

$filename  = 'umbrella_corp.jpeg';
$type = 'jpeg';

$tratarImg = "imagecreatefrom$type($filename)";

var_dump($tratarImg);
?>

 

Pelo que foi visto acima, eu resgatarei qual é o tipo de arquivo e vincularei na função imagecreatefrom para que a função identifique que tipo te imagem ela deve ler. Mas ao invés do php identificar a imagecreatefromjpeg(umbrella_corp.jpeg) como uma função ela está a reconhecendo como uma string. pois a função está dentro de aspas e utilizei a var_dump para ilustrar melhor o que eu disse.

 

como faço para concatenar o tipo de arquivo que vai ser lido na função imagecreatefrom, sem a tornar uma string?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, você pode usar call_user_func (recomendado) ou eval.

 

<?php

<?php

$filename  = 'title.png';
$type      = 'png';

$tratarImg1 = call_user_func( "imagecreatefrom{$type}", $filename );

$tratarImg2 = eval( "return imagecreatefrom$type( \"\$filename\" );" );


var_dump( $tratarImg1 ); // resource(3, gd)

var_dump( $tratarImg2 ); // resource(5, gd)

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Muito obrigado, Carlos Coelho.

Com esta solução eu consegui minimizar e muito os meus códigos.

 

estou muito grato por toda a sua ajuda!!!

 

Só mais uma coisinha: Para quem for moderador e puder, eu peço que troque no titulo deste tópico, a palavra "mar" por var ou variável!!

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.