Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
[ ATUALIZADO ]
Como nosso amigo Carlos Coelho apontou abaixo o uso também de similar_text notem que:
A função similar_text não foi feita para o que estamos mostrando aqui por não suportar grande quantidade de dados e não é segura para binários
--------------------------------------------------------------------------
Primeiro gostaria de agradecer a todos, membros, equipe e desejar que o nome Imasters++ cresca cada vez mais
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;
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 nullpublic 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: link removido
Se quiser calcular sem diferenciar maiúsculas de minúsculas (case-insensitive) é só usar strtolower ou strtoupper
Na na ni na não.
Essas funções alteram a capitalização das letras.
A comparação correta ignorando maiúsculas e minúsculas deve ser feita com strcasecmp(), comparando o resultado com zero:
$str1 = 'bruno augusto';
$str2 = 'Bruno Augusto';
var_dump( $str1 == $str2, strcasecmp( $str1, $str2 ) == 0 );
O primeiro retorna FALSE e o segundo TRUE. :thumbsup:
Pegando a frase fora do seu contexto fica estranho mesmo usar strtoupper e strtolower. Mesmo não sendo para fazer aquele tipo de comparação que você citou.
Mas como usar similar_text sem diferenciar maiúsculas de minúsculas?
Talvez utilizando mb_strtolower ou mb_strtoupper :mellow:
Eu não consigo imaginar outro uso para simlar_text() que não seja algo em torno do "Você quis dizer..." do Google.
Se, e somente se, este for o caso, a solução mais adequada seria buscar num banco de dados todas as palavras cuja fonética, calculada com soundex(), coincidam com a da palavra digitada/recebida.
Uma vez com esse set de palavras e fonéticas, com um loop calcularia-se a distância levenshtein() da palavra digitada/recebida E da palavra da iteração corrente.
Feito isso, a palavra com a menor distância levenshtein é aquela que se procura.
>
Eu não consigo imaginar outro uso para simlar_text() que não seja algo em torno do "Você quis dizer..." do Google.
Você e o outro que disse
Cara, também dá para fazer isso usando similar_text
Nem testaram o sistema, testaram?
ATENÇÂO:
usar simlar_text() para testar arquivos é incorreto pois é SIMILAR_TEXT e não SIMILAR_FILE
simlar_text() para testar arquivos poderá tirar teu site do ar se você for testar em arquivos de ex: 100 K para cima
No caso do Google, estamos falando aqui de texto ou de arquivos?
Antes de vir com grosseria, porque você não se dá ao trabalho de no mínimo postar todos os arquivos para que possamos entender a implementação que você tinha em mente quando iniciou o tópico?
Comparação binária de arquivos existem aos montes na Internet, como por exemplo essa classe, que inclusive recebeu o prêmio de Inovação do PHPClasses que faz esse tipo de tarefa.
Pode não ser a melhor, não analisei a fundo, mas enfim...
>
Antes de vir com grosseria, porque você não se dá ao trabalho de no mínimo postar todos os arquivos para que possamos entender a implementação que você tinha em mente quando iniciou o tópico?
Desculpe amigo, já editei e removi palavras consideradas grosseiras, é assim mesmo cada um defende suas idéias afinal agente tem certo trabalho para fazer. Um abraço pra você e para todos.
Quanto a postar os arquivos, não seria legal afinal se alguma mudança for feita as pessoas terão aqui arquivos defasados e também não é apenas nesse site que o projeto foi postado
O grande problema foi a remoção, talvez inadvertida, do link que você postou.
se a questão das atualizações for um problema, você pode postá-la no iMasters Code ou, se usar GitHub, postar o linkdo repositório, assim sempre todos poderão ter as versões atuais.
>
O grande problema foi a remoção, talvez inadvertida, do link que você postou.
O que você quis dizer, não entendi, podemos conversar pessoalmente?
Eles quiz dizer Não adianta nada você postar so a Interface pro pessoal.. kkkk
Deveria ta postada no laboratorio de scrips.. ja que sua intenção é disponibilizar sua class pra galera!
Eu quero testar sua Class.. Até consigo implementar alguns metodos da interface, porém is_equal(), a porca torce o rabo =X
para que a class não fique desatualizada, use GITHUB! la voce pode fazer o versionamento e sempre disponibilizar a versão atualizada.
Primeiramente a grosseria de remover um link para download do conteúdo e não avisar foi terrível
Eu pergunto qual foi o motivo que levou a remoção do link?
todos os fórums receberam bem a postagem e usaram e testaram o conteúdo, mas apenas aqui aconteceu isto
Se tiver um motivo plausível posso dar outro jeito de postar um novo download
Poste um novo link que, se ninguém fizer antes, eu me disponho pessoalmente a adicioná-lo ao post inicial.
Apenas para que não hajam margens para uma nova remoção, atente apenas para duas coisas: A disponibilidade do link, isto é, estar de fato online e que o host escolhido não tenha nada que vá contra as Regras do Fórum, principal, mas não exclusivamente, com relação à pirataria, ---ografia, racismo e etc.
Cara, também dá para fazer isso usando similar_text
Se quiser calcular sem diferenciar maiúsculas de minúsculas (case-insensitive) é só usar strtolower ou strtoupper