Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Seguinte galera, o upload na verdade não é um problema sei fazer, gerencio bem até.
O grande detalhe é, como evitar inconsistência e lixo no server, evitar que a referência no banco seja deletada e a imagem permaneça no servidor perdida. Como fazer um delete eficiente onde eu evite de fato que sobre imagens perdidas ou referências sem imagem.
Como fazer um sistema de substituição de imagem eficiente também, tipo o registro no banco existe, ai é editado e a figura trocada, como garantir total consistência?
Aceito todo tipo de dica e tudo mais.
Meu problema é consistência de dados, queria entender os melhores métodos para isso.
Obrigado.
é desnecessario por acaso fazer um diretorio para cada empresa? usando nome do diretorio o id da empresa?
li sobre os erros e ao meu ver meu sistema esta ok nessas verificações, agora na hora de deletar, vamos ver:
primeiro vejo se o arquivo existe: file_exists ?
segundo vejo se ele pode ser modificado: is_writable ?
ai eu coloco o autocommit no false e tento deletar do banco de dados a referencia.
se o arquivo existe, e o delete do banco de dados nao retornou erro eu dou Commit e unlink no arquivo.
senão volta tudo e retorna uma mensagem de erro pertinente.
ta bom assim ou alguém ja tem algo mais eficiente q isso?
vlwww por enquanto..
flw
sugiro fazer ao contrário
antes de enviar comandos ao banco de dados, faça as checagens de consistência ao remover a imagem
exemplo
if( @file_exists( caminho ) )
{
// ok. aqui provavelmente excluiu a imagem.
// faça aqui execução da query sql de exclusão no banco de dados
}else{
$err['excluindo imagem'] = $php_errormsg; // para usar essa variável do PHP, ative-a no php.ini
}
>
é desnecessario por acaso fazer um diretorio para cada empresa? usando nome do diretorio o id da empresa?
li sobre os erros e ao meu ver meu sistema esta ok nessas verificações, agora na hora de deletar, vamos ver:
se existirem muitas imagens, sim, é recomendável organizar em subfolders.a vantagem nesse caso, é quando precisar excluir um cadastro inteiro, por exemplo, bastaria então excluir a pasta
segundo vejo se ele pode ser modificado: is_writable ?
precisa ter umc erto cuidado com essa função pois não compatível com alguns sistemas operacionais.geralmente não é utilizada.
opa vlw pelas ajudas.
então, beleza quanto ao is_writt.... não usarei.
e as imagens é um caso assim, são inseridas depois do cadastro completo e salvo no banco, então SEMPRE terei o ID para nomear os diretorios e adicionar imagens.
então acho que usarei mesmo...
volto com novidades ou duvidas.
vlwww e flw !
>
precisa ter umc erto cuidado com essa função pois não compatível com alguns sistemas operacionais.
geralmente não é utilizada.
Uhn...teria como mandar a fonte hinom?Não sabia dessa...interessante...
hn...teria como mandar a fonte hinom?Não sabia dessa...interessante
são apenas bugs antigos.
mas de vez em quando ainda falha.
tive diversos problemas em sistemas de galerias de imagens principalmente.
acumulavam centnas de imagens lixo no server e levei um bom tempo pra entender onde estava o problema.
existem fix para esses bugs, mas não confio mais no uso dessa função, pois, mesmo depois de aplicar os "patch fixs", algumas falhas ainda persistiram apesar de ter corrigido outros 99% .
Depende do sistema operacional também. Principalmente para quem desenvolve sistemas "híbridos", multiplataforma, hospedam em hosts terceiros, etc..
Muitas vezes um host terceiro está mal configurado ocasionando problemas.
Nesse caso de exclusão de arquivo, não tem necessidade em usar essa função.
Basta garantir que o arquivo esteja com permissão de leitura de escrita no momento em que fez o upload.
a função unlink retorna valor booleano
complementando o exemplo acima:
if( @file_exists( caminho ) ){
if( @unlink( caminho ) )
{
// ok. aqui provavelmente excluiu a imagem.
// faça aqui execução da query sql de exclusão no banco de dados
}else{
$err['excluindo imagem'] = $php_errormsg; // para usar essa variável do PHP, ative-a no php.ini
}
}else{
$err['excluindo imagem'] = $php_errormsg; // para usar essa variável do PHP, ative-a no php.ini
}
uhn...não sabia desses problemas não.
E não tinha visto o contexto de uso.
basicamente, antes de gravar no banco, faça checagens consistentes do upload
o upload retorna 8 status básicos
http://jp2.php.net/features.file-upload.errors
quanto à exclusão do arquivo
antes de excluir do banco de dados, faça checagens consistentes usando funções do filesystem
http://jp2.php.net/filesystem