Ir para conteúdo

Arquivado

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

AiltonSP

Alguém pode dar uma ajuda neste código para upload de imagens

Recommended Posts

Alguém pode dar uma ajuda neste código para upload de imagens.

Está dando o seguinte erro:

 

Strict standards: Only variables should be passed by reference in C:\wamp\www\tebuscando\Upload.class.php on line 18

 

 

A linha 18 está marcada abaixo.

 

 

<?php
class Upload{
private $arquivo;
private $altura;
private $largura;
private $pasta;
function __construct($arquivo, $altura, $largura, $pasta){
$this->arquivo = $arquivo;
$this->altura = $altura;
$this->largura = $largura;
$this->pasta = $pasta;
}
private function getExtensao(){
//retorna a extensao da imagem
return $extensao = strtolower(end(explode('.', $this->arquivo['name'])));
}
private function ehImagem($extensao){
$extensoes = array('gif', 'jpeg', 'jpg', 'png'); // extensoes permitidas
if (in_array($extensao, $extensoes))
return true;
}
//largura, altura, tipo, localizacao da imagem original
private function redimensionar($imgLarg, $imgAlt, $tipo, $img_localizacao){
//descobrir novo tamanho sem perder a proporcao
if ( $imgLarg > $imgAlt ){
$novaLarg = $this->largura;
$novaAlt = round( ($novaLarg / $imgLarg) * $imgAlt );
}
elseif ( $imgAlt > $imgLarg ){
$novaAlt = $this->altura;
$novaLarg = round( ($novaAlt / $imgAlt) * $imgLarg );
}
else // altura == largura
$novaAltura = $novaLargura = max($this->largura, $this->altura);
//redimencionar a imagem
//cria uma nova imagem com o novo tamanho
$novaimagem = imagecreatetruecolor($novaLarg, $novaAlt);
switch ($tipo){
case 1: // gif
$origem = imagecreatefromgif($img_localizacao);
imagecopyresampled($novaimagem, $origem, 0, 0, 0, 0,
$novaLarg, $novaAlt, $imgLarg, $imgAlt);
imagegif($novaimagem, $img_localizacao);
break;
case 2: // jpg
$origem = imagecreatefromjpeg($img_localizacao);
imagecopyresampled($novaimagem, $origem, 0, 0, 0, 0,
$novaLarg, $novaAlt, $imgLarg, $imgAlt);
imagejpeg($novaimagem, $img_localizacao);
break;
case 3: // png
$origem = imagecreatefrompng($img_localizacao);
imagecopyresampled($novaimagem, $origem, 0, 0, 0, 0,
$novaLarg, $novaAlt, $imgLarg, $imgAlt);
imagepng($novaimagem, $img_localizacao);
break;
}
//destroi as imagens criadas
imagedestroy($novaimagem);
imagedestroy($origem);
}
public function salvar(){
$extensao = $this->getExtensao();
//gera um nome unico para a imagem em funcao do tempo
$novo_nome = time() . '.' . $extensao;
//localizacao do arquivo
$destino = $this->pasta . $novo_nome;
//move o arquivo
if (! move_uploaded_file($this->arquivo['tmp_name'], $destino)){
if ($this->arquivo['error'] == 1)
return "Tamanho excede o permitido";
else
return "Erro " . $this->arquivo['error'];
}
if ($this->ehImagem($extensao)){
//pega a largura, altura, tipo e atributo da imagem
list($largura, $altura, $tipo, $atributo) = getimagesize($destino);
// testa se é preciso redimensionar a imagem
if(($largura > $this->largura) || ($altura > $this->altura))
$this->redimensionar($largura, $altura, $tipo, $destino);
}
return "Sucesso";
}
}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Continua dando o mesmo erro.

 

Strict standards: Only variables should be passed by reference in C:\wamp\www\tebuscando\Upload.class.php on line 22

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tenta assim

$extensao = pathinfo($this->arquivo['name'], PATHINFO_EXTENSION);

http://php.net/manual/pt_BR/function.pathinfo.php

Não há necessidade desta função getExtensao()

Vai usar em algum outro lugar?

Senão coloque dentro do escopo da função salvar

Compartilhar este post


Link para o post
Compartilhar em outros sites

A função end() recebe um parâmetro por referência. E somente variáveis podem ser passados por referência. É isso que o erro diz.

 

O correto seria dividir o código assim:

 

$arr = explode('.', $this->arquivo['name']);
return $extensao = strtolower(end($arr));

 

Como o @Williams Duarte disse, a função pathinfo também resolve esse problema de forma ainda mais simples

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.