Trabalhar com Imagem

23/07/2009

Bem, na minha aplicação utilizo fotos, não armazeno as fotos no banco e sim em diretorio, gravo no banco apenas o caminho e nome da foto respectiva.
Essa é a melhor solução? é melhor que armazenar a imagem direto no banco?

Para fazer o uploud utilizo o componente Upload, do D4PHP, apesar de facilitar, alguns controles, como tamanho de arquivo, verificar se é imagem etc..., não dá estabilidade na aplicação, não tenho certeza que o upload foi feito corretamente, ou o usuario pode clicar em outra coisa, o sistema fazer o upload e não a referencia no banco, e meu diretorio ficar cheio de imagens inuteis...

O que estou prescisando:

Um script javascrit que paralise  toda a tela  até  o  upload ser concluido;
E quando excluir do banco o resgistro que contenha a respectiva foto, apague também o arquivo no diretorio.

Cristiano,




Cristiano Barreto

Cristiano Barreto

Curtidas 0

Respostas

Rodrigo Mourão

Rodrigo Mourão

23/07/2009

Olá amigo, eu não entendi muito bem a primeira parte de não conseguir saber se o arquivo foi enviado. Existe uma função que vc pode usar para tester  seria a move_uploaded_file e assim saber se o arquivo foi carregado com sucesso.

Agora para apagar o arquivo vc pode usar a função unlink e passar o caminho do arquivo que vc quer apagar. Esse exemplo faz usso recursivamente

function unlinkRecursive($dir, $deleteRootToo)
{
    if(!$dh = @opendir($dir))
    {
        return;
    }
    while (false !== ($obj = readdir($dh)))
    {
        if($obj == '.' || $obj == '..')
        {
            continue;
        }

        if (!@unlink($dir . '/' . $obj))
        {
            unlinkRecursive($dir.'/'.$obj, true);
        }
    }

    closedir($dh);
   
    if ($deleteRootToo)
    {
        @rmdir($dir);
    }
   
    return;
}

Agora vai um conselho, nas minhas aplicações eu tenho um diretorio resources. Dentro dele eu coloco as imagens e gravo o caminho do banco. Agora para cada cliente ou produto ou seja o que for eu crio um pasta, ou seja, detro de de resource eu teria uma pasta chamada product_1254 que guardaria todas as imagens do produto de código 1254 quando eu deletar este produto deleto esta pasta e não as vinte imagens por exemplo que possam ter la dentro.

É apenas uma sugestão !!

Fico no aguardo !!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi


GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

23/07/2009

Olá Amigo,

As dicas Ajudaram ? Estamos aguardando para encerrar o chamado.

Abs.

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0
Cristiano Barreto

Cristiano Barreto

23/07/2009

estu testando a função a função unlink, e só retorna false, mesmo com o upload sendo efetuado com sucesso, já a função de unlinkRecursive, poderia explicar melhor seu funcionamento.   Cristiano
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

23/07/2009

Voce passa um diretorio para ela e ele apaga tudo dentro. Seria como um deltree do dos.

Abs!
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

23/07/2009

Olá amigo,

Estaremos colocando o chamado como concluido.
Caso haja alguma outra dúvida basta postar que reabriremos o chamado.

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi

GOSTEI 0
Cristiano Barreto

Cristiano Barreto

23/07/2009

Olá,

a função unlinkRecursive, como apaga todo o diretorio,  eu teria que ter também uma função para criar um diretorio(em tempo de execução) a medida que se cadastra um imovel, as fotos daquele imovel, naquele diretorio. e quando excluido a função unlinkRecursive.

A função PHP unlink, não conseguir fazer funcionar corretamente, então utilizei a função do proprio componetne upload isUpLoadFile $this->upfoto->isUploadedFile($this->upfoto->moveUploadedFile($path.$filename.'_1.'.$ext))

Bem, em resumo, presciso apargar as imagens no diretorio ou de uma função para criar o diretorio em tempo de execução para usar o unlinkrecursive.

Cristiano,


 
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

23/07/2009

Olá Cristiano,

Se observer bem no meu post la em baixo e sugestao que te dei foi justamente criar um diretorio por registro, segue função:

mkdir("Caminho do Diretorio que quer criar",0777);


Abs!!
GOSTEI 0
Cristiano Barreto

Cristiano Barreto

23/07/2009

Olá,

Usei esta função, funcionou na primeira inserção, mais aparti da segunda, não, porque o diretorio já existia e dá erro, presciso testar se o diretorio existe antes de executar a função.

Cristiano,

GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

23/07/2009

Opa, vamos lá !!


Vc pode usar a função is_dir.  Esta função retorna verdadeiro se o cominho passa é um diretorio ou false se não e um diretorio ou se ele não existe.


Você pode usar assim:

  if (!is_dir("Caminho do Diretorio que quer ver se existe")){
       mkdir("Caminho do Diretorio que quer criar",0777);
   }

Repare no exclamação antes do comando, essa é a negação do PHP, ou seja, se o diretorio não existir.


Espero que ajude.

abs

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi
GOSTEI 0
Rodrigo Mourão

Rodrigo Mourão

23/07/2009

Olá amigo,

A função ajudou? Estamos aguardando para encerrar o chamado !!

Abs!!

Atenciosamente,
Rodrigo Carreiro Mourão
Borland Instructor Certified
Coordenador da Consultoria em Delphi


GOSTEI 0
Cristiano Barreto

Cristiano Barreto

23/07/2009

OK!

Cristiano,
GOSTEI 0
POSTAR