Jump to content
Fórum Script Brasil
  • 0

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


João Batista Filho

Question

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 to comment
Share on other sites

0 answers to this question

Recommended Posts

There have been no answers to this question yet

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      651.8k
×
×
  • Create New...