Notifica login php attraverso email

di il
9 risposte

Notifica login php attraverso email

Salve, ho sviluppato questo codice che invia una email di notifica non appena si esegue il login ad una pagina php
Il codice funziona per il campo IP, ma non per i campi Date e Clock
Qualcuno potrebbe aiutarmi nelle righe 4, 5 e 8?

$AddressToEmailTo = "";
$SubjectOfEmail = "Private page access notification";
$content = 'This email sent from script ' . $_SERVER['PHP_SELF'] . "\n\nData received:\n\n";
$timestamp = date('+clockid[i_clock]+'>'+thistime+');
if( isset ($_GET['i_clock']) ) { $_GET['i_clock'] = $timestamp ['+thistime+']; }
if( isset($_GET['IP']) ) { $_GET['IP '] = $_SERVER['REMOTE_ADDR']; }
else { $_GET['IP'] = $_SERVER['REMOTE_ADDR'];
$_GET['date'] = $timestamp ['+thistime+']; }
ksort($_GET);
foreach( $_GET as $k => $v ) { $content .= "\t$k = $v\n"; }
mail($AddressToEmailTo,$SubjectOfEmail,$content,"From: $AddressToEmailTo");

9 Risposte

  • Re: Notifica login php attraverso email

    
    $date = new DateTime("now", new DateTimeZone('Europe/Rome'));
    echo $date->format($date, 'Y-m-d');
    
  • Re: Notifica login php attraverso email

    Grazie, Hormus. Il codice che frattanto avevo provato era il seguente: $date_time = date('H:i d-m-Y');
    Funziona ugualmente, ma la soluzione da te proposta mi sembra più completa
    Bravo
  • Re: Notifica login php attraverso email

    Però la funzione strtotime EDIT: se originaria dalla funzione date (per convertire una data in un timestamp che è in uso sul tuo server) è influenzata dall'offset impostato dal tuo php.ini o il default mentre l'oggetto DateTime con DateTimezone è impostato sul fuso orario italiano.. Prima di php 5.4 il timezone di tipo 3 aveva un problema nel caso di Dst o St che spero ad oggi con php 7.4 sia risolto su ogni software capace di interagire con php.
    $oggetto->getTimestamp() ritorna sempre una sequenza numerica riferita a UTC (può essere intero o float nel caso il sistema operativo abbia limiti a 32 bit e può darsi in vecchie versioni Windows anche se usa 64 bit...)
    https://en.wikipedia.org/wiki/Year_2038_proble
  • Re: Notifica login php attraverso email

    Hai ragione. Si passa a 64 numeri interi, lo stesso problema degli ottetti IP. Come già visto per la formattazione dei dischi fissi nei sistemi operativi a 32 bit. Tornando al codice, potrei svilupparlo in altro modo?
  • Re: Notifica login php attraverso email

    Ovviamente la risposta non può essere altro che si.
    Non esiste il codice perfetto ma lo si migliora quando si incontrano ostacoli o si deve superare le proprie conoscenze.
    Attualmente puoi lasciare il codice così come sta... poi magari potresti aggiungere un header from per l'email.... un'altro header per gmail e puoi anche recuperare la risorsa con __DIR__ e __FILE__.
  • Re: Notifica login php attraverso email

    D'accordo, grazie. Farò come dici
    $headers = "From: " . $_POST['mail'] . "\n";
  • Re: Notifica login php attraverso email

    Prova a cambiare la riga 4 così e continua di conseguenza

    $timestamp = date('Y-m-d Hs');

    semplice ma efficace ricoda che se il campo di mysql che devi riempieri è un datetime ti accetterà solo data in formato Y-m-d Hs ciao
  • Re: Notifica login php attraverso email

    Grazie per la risposta, Ricky
    Ero indeciso, in realtà, tra l'utilizzo di $date_time o $timestamp .
    Con DATETIME, MySQL recupera e visualizza i valori nel formato 'AAAA-MM-GG HH:MM:SS' con intervallo compreso tra '1000-01-01 00:00:00' e '9999-12-31 23:59:59'. Con TIMESTAMP l'intervallo è da '1970-01-01 00:00:01' UTC a '2038-01-09 03:14:07' UTC. Quest'ultimo, riconosce dunque il fuso orario e non funziona con date precedenti al 1970 (che non devo utilizzare perché ricerco un report di data e ora di accesso, non retroattivo). Il problema dei 64 numeri interi, tuttavia, si presenterà. Non c'è una semplice correzione, ma c'è ancora tempo per pensarci...
  • Re: Notifica login php attraverso email

    Prima del bug si con getTimestamp() dopo il bug corretto può anche restituire un float.
    In ogni caso credo che questo $date->format("U"); funzioni sempre ma il valore è di tipo stringa... Quindi teoricamente per intervalli positivi dopo il 2038 indistintamente da 32/64 bit PHP_INT_MAX devi semplicemente creare addizzione/sottrazione stringa se devi modificare il valore numerico di un timestamp per un sistema operativo che abbia limiti a 32 bit.
    Credo che il costruttore DateTime accetti indistintamente valori a 64 bit il bug sta su getTimestamp e le funzioni interne di quel determinato sistema operativo che operano a 32 bit.
    Di conseguenza sarebbe bello confrontare il periodo di transizione per verificare che php stia usando effettivamente +-offset database (prima di php 5.3 purtroppo il salto in avanti o indietro o viceversa di un'ora DST/ST non veniva effettuato in automatico) mentre $timezone->getOffset(); dovrebbe restituire l'offset in uso.
    poiché il database IANA per rari casi di timezone impone l'inversione del segno (ovviamente questo discorso vale se devi effettuare addizioni/sottrazioni) dovresti usare (array) clone crea un un'oggetto UTC dal valore date del clone e poi fai addizione/sottrazione con funzioni native se getOffset o segno inverso getOffset corrisponde con almeno uno dei due sei venuto a conoscenza del segno in uso.
    In breve quando devi gestire dopo il 2038 crea la prima data a 2039-01-01 se getTimestamp() ritorna false allora devi utilizzare un'altra strategia che può anche essere quella descritta in precedenza.
Devi accedere o registrarti per scrivere nel forum
9 risposte