• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage XTEA mit Deprecated constructors bei PHP7

Cheffchen

Senior HTML'ler
Hallo,

vielleicht kann mir hier jemand helfen?
Ich habe mal vor Jahren um Links zu verschlüsseln das hier eingefügt https://github.com/jungepiraten/nntpboard/blob/master/libs/xtea.class.php
Das funktioniert soweit auch echt super, nur seit PHP 7.2. kommt diese Deprecated Meldung, die ich gerne behoben hätte.

Kann jemand sich das mal anschauen und mir mal erklären wie das geändert werden müsste mit den __constructors?

Aktuell ruf ich das so auf wenn die Datei include ist:
PHP:
$xtea = new XTEA('Psstnichtweitersagen'); 
$code=$xtea->Encrypt('Der geheime Text'); 

echo $code.'<br>';

# und wieder zurück
$code=$xtea->Decrypt($code); 
echo $code.'<br>';

Ach so hier die Fehlermeldung, das halt um construct geht, damit kann ich leider nicht viel anfangen.
Deprecated: Methods with the same name as their class will not be constructors in a future version of PHP; XTEA has a deprecated constructor in /var/www/vhosts/xxxxx/httpdocs/xtea.class.php on line 34

Meine versuche waren nicht von Erfolg gekrönt in der class einfach function __construct(){ einzufügen.

Cheffchen
 
Die Fehlermeldung besagt, dass die Methode "XTEA" in Zukunft nicht mehr als Konstruktor fungieren wird, weil sie denselben Namen wie die Klasse hat. Ab PHP 7 wird der Konstruktor einer Klasse immer "__construct" genannt.

Um das Problem zu beheben, musst du die Methode "XTEA" in der Datei "xtea.class.php" in "__construct" umbenennen. Das sollte wie folgt aussehen:

Code:
public function __construct($key) {
   $this->-key = array_values(unpack('N', str_pad($key, 16, chr(0))));
}
Dann solltest du in deinem Code das Objekt wie folgt initialisieren:

Code:
$xtea = new XTEA('Psstnichtweitersagen');
Dann sollten die Deprecated-Meldungen nicht mehr auftreten.

--->von ChatGPT
 
Hallo zorro,

also erstmal danke und funktioniert super, habe das einfach in Zeile 35 eingefügt und kommt keine Fehlermeldung mehr.

Wenn noch kurz zeit hast, wie so hast dein
PHP:
$this->_key = array_values(unpack('N*', str_pad($key, 16, chr(0))));
nicht mit dem aus der funktion Zeile44 gemacht und die function XTEA($key) gelöscht?
PHP:
$this->key_setup($key);

so das es am ende so aussieht, bin einfach neugierig.

PHP:
class XTEA {

public function __construct($key) {
   '$this->_key = array_values(unpack('N', str_pad($key, 16, chr(0)));
   $this->key_setup($key);
}
   //Private
    var $key;

    // CBC or ECB Mode
    // normaly, CBC Mode would be the right choice
    var $cbc = 1;

   #function XTEA($key) {
   #   $this->key_setup($key);
   #}

   //Verschluesseln
   function encrypt($text) {

Danke
 
ja klar, wenn nicht not tut.
Aber grundsätzlich ist das was ich gemacht habe richtig oder schaffe ich mir andere absehbare Fehler?
 
Ja, das ist grundsätzlich richtig, wobei ich bei Löschen ehe vorsichtig bin. Man weiß nir ob irgendwo in den Riefen noch ein entsprechender Funktionsazfruf erfolgt.
 
Zurück
Oben