Ir para conteúdo
Fórum Script Brasil
  • 0

Verificando se dois arquivos são iguais com porcentagem de precisão


João Batista Filho

Pergunta

Agente está trazendo aqui uma solução para arquivos duplicados

Problema:

Um membro do seu site envia imagens ou outros arquivos, mas e se alguém começar a enviar o mesmo arquivo várias vezes o que você faria, alguém poderia usar CURL para enviar centenas de arquivos iguais e prejudicar seu servidor

Solução:

Assim como o youtube não deixa você enviar o mesmo vídeo duas vezes você também pode proibir essa ação para qualquer arquivo enviado para seu site.

Primeiro nos vamos verificar linha por linha se o arquivo enviado não é igual a outro e tudo isso com taxa de igualdade;

Obs.: Muitas funções prontas do php como similar_text não foram feitas para o que estamos mostrando aqui por não suportar grande quantidade de dados e não é segura para binários

Arquivos suportados:

Todos os tipos

NA PRÁTICA:

Vamos ver na interface um pouco dos métodos usados

<?
interface equal_files{


    /**
    * Erros retornados em tempo de execução do script 
    */
    const FILE_IS_NOT_ARRAY = '<strong>$File</strong> deve ser um array';
    
    const FILE_MORE_THAN_2 = '<strong>$File</strong> Suporta a abertura de apenas dois arquivos por vez';
    
    const FILES_NOT_EXIST = 'Um ou mais arquivos não foram encontrados';
    
    const FILE_OPEN_FAIL = 'A abertura de um ou mais arquivos falhou';


    /**
    * abrindo arquivos para leitura
    * @return handler
    */
    public function open_handler();
    
    
    
    /**
    * lendo os arquivos
    * @return array
    */
    public function read_file();
    
    
    
    /**
    * Verificação final de igualdade
    * @return integer
    */
    public function is_equal();
    
    
    
    /**
    * Fechando arquivos abertos por open_handler();
    * @return null
    */
    public function close_handler();
    
    
    

} 

?>
EXEMPLO DE USO REAL:
<?
    require('equal_class.php');
    
    $equal = new equal; 
    
    // Pode ser qualquer arquivo, aqui vamos usar imagen
    
    $Arquivo_1 = '1.png';
    $Arquivo_2 = '2.png';
    
    $equal->File = array($Arquivo_1, $Arquivo_2);
    $equal->init();
    
    if($equal->Exact > $equal->Dividido_Por2) 
    
    echo 'São os mesmos arquivos com uma precisão de '. $equal->Exact_PerCent .'% de acerto';

    elseif($equal->Fail > $equal->Dividido_Por2) 
    
    echo 'Não são iguais por que das '. $equal->Lines .' linhas do arquivos '. $equal->Fail_PerCent .'% são diferente(s)';
    
    
    // OU exemplo de upload

    
    if($equal->Exact > $equal->Dividido_Por2) 
    
    move_uploaded_file($_FILES['NAME']['TEMP'], 'DESTINO');

    elseif($equal->Fail > $equal->Dividido_Por2) 
    
    echo 'ERRO: Você já enviou esse arquivo, tente outro';
    
    
?>

ARQUIVOS INCLUSOS:

- 3 imagens para teste

- equal_class.php

- equal_interface.php

- Exemplo.php

DOWNLOAD:

http://koretu.com/@joao_batista-verificand...e-precisao_5401

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...