Back to top

Autore Topic: [Risolto] controllo indirizzi email in un file spamlist.txt  (Letto 5181 volte)

Offline jumping

  • Nuovo arrivato
  • *
  • Post: 17
    • Mostra profilo
Ciao a tutti, avrei un piccolo problema, dovrei aggiungere un controllo durante la registrazione degli utenti: se l'email con cui ci si iscrive è presente nella lista di indirizzi spam in un file txt (ogni riga contiene un indirizzo solo e poi va a capo e così via)  ritorna un errore e non fa effettuare la registrazione.

allora ho preso il file user.php dove ci sono tutti i controlli se il nome utente esiste già o se l'email è già iscritta ed ho aggiunto:

Codice: [Seleziona]
$lista=fopen("spamlist.txt","r");  //apre il file
while (!feof($lista)) {
$buffer = fgets($lista, 4096); //legge riga per riga
if($buffer==$this->email){
$this->setError( JText::_( ' Indirizzo bloccato per spam ' ) );
fclose ($lista); //chiude il file
return false;
}
}
fclose ($lista); #chiude il file

ma non funziona, cmq sia fa registrrare lo stesso. Non sono praticissimo di php quindi ho fatto qualche cappellata sicuro con il $buffer che non viene letto forse come stringa...qualcuno mi da una manina perfavore  :'(
« Ultima modifica: 17 Giu 2010, 14:10:53 da jumping »

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:controllo indirizzi email in un file spamlist.txt
« Risposta #1 il: 17 Giu 2010, 07:51:46 »
certo che non funziona!

$buffer = fgets($lista, 4096)

legge 4096 bytes non riga per riga, quindi la condizione

$buffer==$this->email

difficilmente sarà soddisfatta, l'unico caso è quello in cui il file contenga solo la mail  :D

leggi tutto il file e poi verifica che non contenga la mail. dato che leggi una risorsa locale e relativamente piccola, immagino, magari usa file_get_contents() o  file().

Non sono praticissimo di php e ti sembra il caso di andare a modificare i files di Joomla?  >:(

ciao,
marco

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline jumping

  • Nuovo arrivato
  • *
  • Post: 17
    • Mostra profilo
Re:controllo indirizzi email in un file spamlist.txt
« Risposta #2 il: 17 Giu 2010, 13:53:01 »
Non è che mi sono alzato stamattina ed ho aperto un file a caso di joomla ed ho cominciato a cancellare qualche parola strana qui e la e ad aggiungere altre robe che non stanno ne in cielo ne in terra.

Progammo in c++ e java da diversi anni, con il php ho iniziato da poco, ma non è molto differente dai linguaggi che conosco. Certo non sono così presuntuoso da dire che già domani faccio un bel componente, ma per qualche stupida modifica tipo quella che stò facendo credo di esserne capace, anche perchè ne ho già fatte alcune di modifiche su alcuni file ed il risultato l'ho ottenuto.

per quanto riguarda il metodo fgets() ti assicuro che legge riga per riga, prima di provarlo mi sono informato sul sito di php alla pagina http://php.net/manual/en/function.fgets.php dove c'è proprio l'esempio "Reading a file line by line". Credo legga una riga contenente al massimo 4096 byte, ed un indirizzo email ne contiene parecchi di meno.
Ho anche visto il metodo fgetc() che legge carattere per carattere.

I metodi suggeriti da te li ho provati, ma file_get_contents() inserisce in un unica stringa tutto il file e quindi il controllo non si potrebbe fare; il metodo file() è ottimo, crea un array riga per riga ma quando sono andato per leggerlo con un for tipo:
Codice: [Seleziona]
...
...
$var2=file("spamlist.txt");  //estraggo l'array dal file .txt
$i=count($var2);  //conto gli elementi nell'array
for($a=0; $a<=$i; $a++){  //uso il ciclo for per guardare nell'array
    $buffer=$var2[$a];
...
...

nella variabile $buffer quando vado a stamparla me la da cmq vuota.
Tengo a precisare che il file txt lo vede e che il numero di righe del contatore $i le vede correttamente (stampata a video la variabile i).

per quanto riguarda il mio "esperimento" precedente ho notato che ad ogni riga tranne l'ultima inserisce due caratteri spazio anche se nel file txt non c'è (il carattere a capo lo vede come doppio spazio insomma), quindi l'indirizzo email da controllare risulterà ovviamente differente da quello inserito poichè questo carattere spazio inficia l'uguaglianza.

Allora ho risolto in maniera davvero brutta e brutale, ma almeno funziona:
Codice: [Seleziona]
$lista=fopen("spamlist.txt","r");  //apre il file
while (!feof($lista)) {
$buffer = fgets($lista,4096); //prende la riga , ma aggiunge un doppio spazio
$rest = substr($buffer, 0, -2); // tronca di due caratteri finali la stringa precedente
if($rest==$this->email){
fclose ($lista); //chiude il file
$this->setError( JText::_( ' Indirizzo presente nella lista spam ' ) );
return false;
}
}
fclose ($lista); //chiude il file

unica accortezza e che anche l'ultimo indirizzo email inserito nel file txt deve avere alla fine "a capo" altrimenti verrebbe troncato. Il file spamlist.txt va inserito nella root del sito web.
« Ultima modifica: 17 Giu 2010, 14:14:02 da jumping »

mau_develop

  • Visitatore
Re:[Risolto] controllo indirizzi email in un file spamlist.txt
« Risposta #3 il: 17 Giu 2010, 14:16:07 »
ilprimo script funziona

trim($buffer) == $this->email

se non funziona metti appena prima un print_r($buffer); exit();  e vedi cosa legge

M.

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
Re:[Risolto] controllo indirizzi email in un file spamlist.txt
« Risposta #4 il: 17 Giu 2010, 14:22:58 »
ragazzo che filippica! scusa, avevo letto fget e non fgets

file_get_contents(): ko se strpos($buffer, $email) !==  false
file(): ko se in_array($email, $buffer)

ciao,
marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline jumping

  • Nuovo arrivato
  • *
  • Post: 17
    • Mostra profilo
Re:[Risolto] controllo indirizzi email in un file spamlist.txt
« Risposta #5 il: 17 Giu 2010, 14:56:15 »
Ok funzionano tutti e tre, il trim() fa in maniera più elegante quello che avevo fatto il con il substr().

Quelli suggeriti da mmleoni funzionano anche, ma crea sempre lo spazio alla fine e quindi va troncata la stringa.

Grazie mille ad entrambi, ora mi metto a cercare una bella lista di indirizza etichettati come spammers.

potete chiudere, ho già inserito la scritta [RISOLTO].

mau_develop

  • Visitatore
Re:[Risolto] controllo indirizzi email in un file spamlist.txt
« Risposta #6 il: 17 Giu 2010, 16:03:25 »
perchè invece di fare un accrocchio su un altro plugin non fai tu un plugin?

quegli indirizzi diventerebbero dei comodi params e ti assicuro che se già scrivi codice la difficoltà di fare un plugin è = 0

aggiungere codice diventa comodo al momento, poi diventi matto ad aggiornare la versione, perchè nonsai se hanno riscritto anche quel file e quindi tutte le volte devi prendere il file e rifare la mod.

M.

Offline jumping

  • Nuovo arrivato
  • *
  • Post: 17
    • Mostra profilo
Re:[Risolto] controllo indirizzi email in un file spamlist.txt
« Risposta #7 il: 17 Giu 2010, 19:44:07 »
E' da poco che ho inziato a studiarmi un po il php, e non ho mai fatto un plugin, ci proverò sciuramente ma non prometto nulla, per ora il massimo che posso fare e aggiungere qualche riga di codice e mi sono accorto che non va benissimo questo antispam, perchè basta che uno si iscrive con @Mail.ru invece che con @mail.ru, quella lettere maiuscola inficia l'uguaglianza quindi devo trovare il modo per non farlo case sensitive.

Se c'è qualche piccola guida sulle basi della creazione dei plugin per joomla me la studierei volentieri.

mau_develop

  • Visitatore
Re:[Risolto] controllo indirizzi email in un file spamlist.txt
« Risposta #8 il: 17 Giu 2010, 20:00:46 »
allora non ti conviene cercare l'uguaglianza ma la presenza

strstr è insensitive
stristr() è sensitive

if( strstr( $this->email, 'Mail.ru' ) ){

print_r('trovato');

}

potrebbe sembrare che strstr sia booleano.. no, ritorna la porzione di stringa corrispondente, il fatto di non trovarla da "vuoto" interpretato da php come false.

attenzione ad usare stringhe come 'mail' e basta, perchè ti da true se trova  'mailbox', piuttosto che 'myemail', cerca di trovarne una abbastanza univoca (togli abbastanza ;) )

M.

Offline jumping

  • Nuovo arrivato
  • *
  • Post: 17
    • Mostra profilo
Re:[Risolto] controllo indirizzi email in un file spamlist.txt
« Risposta #9 il: 17 Giu 2010, 20:12:33 »
Si hai ragione, effettivamente bloccare direttamente tutti gli indirizzi del domino @mail.ru conviene che mettere in lista tutti i singoli indirizzi.

e quindi converrebbe mettere in lista direttamente
Codice: [Seleziona]
@mail.ru, dato che se mettessi solo mail.ru, un povero utente che ha come email
Codice: [Seleziona]
mail.russofrancesco@yahoo.it si vedrebbe rifiutata l'iscrizione poichè nell'indirizzo è presente la stringa mail.ru .

e poichè negli indirizzi email non si può scegleire come carattere la @ diventerebbe molto univoca  ;)

Questo funziona:
Codice: [Seleziona]
$lista=fopen("http://www.MIOSITO.it/spamlist.txt","r");  //apre il file (per un corretto funzionamento dare l'indirizzo esatto
while (!feof($lista)) {
$buffer = fgets($lista,4096);
if(stristr($this->email,trim($buffer))){
fclose ($lista); //chiude il file
$this->setError( JText::_( ' Indirizzo presente nella lista bloccati ' ) );
return false;
}
}
fclose ($lista); //chiude il file

ho dovuto usare comunque il trim() sempre a causa di quel dannato spazio che lascia alla fine della stringa il metodo fgets()

P.S: credo ti sia confuso con i metodi strstr e stristr, il primo è case sensitive e il secondo no.
Grazie ancora per tutti i suggerimenti,ora è proprio come lo volevo io, così blocco anche tutti i servizi di email temporanee.
« Ultima modifica: 24 Giu 2010, 14:38:52 da jumping »

mau_develop

  • Visitatore
Re:[Risolto] controllo indirizzi email in un file spamlist.txt
« Risposta #10 il: 18 Giu 2010, 00:45:20 »
P.S: credo ti sia confuso con i metodi strstr e stristr, il primo è case sensitive e il secondo no.
------------------------------------
...non faccio fatica ad ammetterlo  ;D ;D ;D, infatti è importante che alla fine il lavoro sia tuo una volta capito il concetto, e li ti accorgi di queste distrazioni :)

M.

 



Web Design Bolzano Kreatif