php.de

Zurück   php.de > Webentwicklung > PHP Einsteiger > PHP Tipps 2007

 
 
LinkBack Themen-Optionen Thema bewerten
Alt 22.06.2007, 23:55  
Neuer Benutzer
 
Registriert seit: 22.06.2007
Beiträge: 3
tomschelling
Standard Fehlerhafte Funktion

Hallo zusammen,

in folgender Funktion bekomme ich auf meinem Webserver immer die Fehlermeldung.

Warning: Division by zero in /var/www/vhosts/xxx.de/httpdocs/xxx/functions.inc.php on line 150

Der Fehler ist anscheinend in den beiden Zeilen "$return="
Lokal auf meinem xampp läuft die Funktion jedoch ohne Fehler.

Hat jemand eine Idee?


Code:
function sbox_round($integer)
    {
    global $sbox0,$sbox1,$sbox2,$sbox3;

    //$integer in vier 8 Bit Blöcke unterteilen
    //Split $integer into four 8 Bit blocks
    $b0 = $integer<<24 & 0xFF;
    $b1 = $integer<<16 & 0xFF;
    $b2 = $integer<<8 & 0xFF;
    $b3 = $integer & 0xFF;
    

    $return = ($sbox0[$b0] + $sbox1[$b1] % pow(2,32));
    $return = ($return ^ $sbox2[$b2]) + $sbox3[$b3] % pow(2,32);

    return $return;
    }
tomschelling ist offline  
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 23.06.2007, 00:02  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Hallo, willkommen hier im Forum!

Was PHP damit sagen will ist ja klar (oder? - sorry man muss immer fragen). Sehe hier garkeine direkte Division. Welches genau ist die Zeile, welche Werte haben die Variablen dieser Zeile und welches Error-Reporting-Level hast du eingestellt?

Variablenwerte kannst du mittels var_dump() ermitteln.
Zergling-new ist offline  
Alt 23.06.2007, 10:02  
Neuer Benutzer
 
Registriert seit: 22.06.2007
Beiträge: 3
tomschelling
Standard

Hi Zergling.

Ja, was PHP mir sagen will ist klar. Aber wie du sehe ich hier auch keine Division. Das macht ich ja so stutzig.

Der Quellcode ist nicht mein eigener. Er ist Teil einer BLowfish Verschlüsselung die ich von http://www.php-einfach.de/sonstiges_...r_blowfish.php habe.

Der Fehler tritt in den beiden Zeilen

PHP-Code:
$return = ($sbox0[$b0] + $sbox1[$b1] % pow(2,32));
$return = ($return $sbox2[$b2]) + $sbox3[$b3] % pow(2,32); 
auf.

Wie erkenne ich welches Error-Reporting-Level ich eingestellt habe?
tomschelling ist offline  
Alt 23.06.2007, 11:17  
Erfahrener Benutzer
 
Registriert seit: 08.11.2004
Beiträge: 2.079
Der_Gerhard ist zur Zeit noch ein unbeschriebenes Blatt
Der_Gerhard eine Nachricht über ICQ schicken
Standard

Willkommen im Forum.

Was meinst Du mit "den beiden Zeilen"
Es gibt nur eine Zeile 150. Welche von den beiden ist es?

Mal so ne Idee....
Der Modulo-Operator arbeitet ja nur mit Integer Werten sinnvoll.
Falls Integer auf Deinem System 32 Bit haben, ist pow(2,32) ja 2 hoch 32 und damit ist der Anteil, der als Integer darstellbar ist, 0 weil der Rest ein Überlauf ist.
Damit würdest Du Modulo 0 rechnen, was einer Division durch 0 gleich kommt.

Wie man auf die Idee kommen kann, Modulo (2 hoch 32) zu rechnen, statt einfach eine bitweise Und-Verknüpfunf mit (2 hoch 32) - 1 zu machen, ist mir etwas schleierhaft. Das kann nur ein Mathematiker mit wenig Ahnung von Rechner-Grundlagen verbrochen haben.

Ersetze den Teil lieber durch
PHP-Code:
  0xFFFFFFFF 
__________________
**********************************
Nein, ich bin nicht die Signatur.
Ich putze hier nur.
**********************************
Der_Gerhard ist offline  
Alt 23.06.2007, 11:37  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Zitat:
Zitat von Zergling
welche Werte haben die Variablen dieser Zeile
[..]
Variablenwerte kannst du mittels var_dump() ermitteln.
!

Das Error-Reporting-Level kannst du mit ini_get('error_reporting') auslesen.
Zergling-new ist offline  
Alt 23.06.2007, 12:51  
Neuer Benutzer
 
Registriert seit: 22.06.2007
Beiträge: 3
tomschelling
Standard

Zitat:
Zitat von Der_Gerhard
Willkommen im Forum.

Was meinst Du mit "den beiden Zeilen"
Es gibt nur eine Zeile 150. Welche von den beiden ist es?

Mal so ne Idee....
Der Modulo-Operator arbeitet ja nur mit Integer Werten sinnvoll.
Falls Integer auf Deinem System 32 Bit haben, ist pow(2,32) ja 2 hoch 32 und damit ist der Anteil, der als Integer darstellbar ist, 0 weil der Rest ein Überlauf ist.
Damit würdest Du Modulo 0 rechnen, was einer Division durch 0 gleich kommt.

Wie man auf die Idee kommen kann, Modulo (2 hoch 32) zu rechnen, statt einfach eine bitweise Und-Verknüpfunf mit (2 hoch 32) - 1 zu machen, ist mir etwas schleierhaft. Das kann nur ein Mathematiker mit wenig Ahnung von Rechner-Grundlagen verbrochen haben.

Ersetze den Teil lieber durch
PHP-Code:
  0xFFFFFFFF 
er meldet:
Warning: Division by zero in /var/www/vhosts/xxx.de/httpdocs/xxx/functions.inc.php on line 150

UND

Warning: Division by zero in /var/www/vhosts/xxx.de/httpdocs/xxx/functions.inc.php on line 149

Von daher sind es schon die beiden Zeilen. Danke für eure Hinweise. Ich werde es versuchen.
tomschelling ist offline  
Alt 23.06.2007, 15:56  
Erfahrener Benutzer
 
Registriert seit: 21.05.2008
Beiträge: 9.937
Zergling-new wird schon bald berühmt werden
Standard

Ich weiß nicht, nichts gegen Schüler, aber von einem Schüler würde ich mir nicht unbedingt meine Verschlüsselungs-Funktionen programmieren lassen.

Vielleicht schlampt er ja nicht nur beim Stil ("global") sondern auch bei anderen Dingen (wie es ja scheint).

Verlässlicher wäre vielleicht doch
http://pear.php.net/package/Crypt_Blowfish/
http://pear.php.net/package/Crypt_Bl..._Blowfish.html
Zitat:
Code:
1      $bf =& Crypt_Blowfish::factory('cbc');
2      if (PEAR::isError($bf)) {
3          echo $bf->getMessage();
4          exit;
5      }
6      $iv = 'abc123+=';
7      $key = 'My secret key';
8      $bf->setKey($key, $iv);
9      $encrypted = $bf->encrypt('this is some example plain text');
10     $bf->setKey($key, $iv);
11     $plaintext = $bf->decrypt($encrypted);
12     if (PEAR::isError($plaintext)) {
13         echo $plaintext->getMessage();
14         exit;
15     }
Zergling-new ist offline  
 


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
JS: Einführung - Javascript im Schichtenmodell nikosch Tutorials 4 11.04.2009 17:06
Rekursive Funktion bricht ab... duras666 PHP Tipps 2008 9 28.04.2008 11:36
Funktion mehrere optionale Parameter GSJLink PHP Tipps 2008 10 28.09.2007 17:52
gpc_quotes funktion: verbesserungsvorschläge? Promaetheus PHP Tipps 2007 10 12.08.2007 19:29
Komplexe Funktion: +Übersichtlichkeit, -Performance Jacks Rache PHP Tipps 2006 3 07.06.2006 14:22
Array in rekursiver Funktion auslesen Gumfuzi PHP Tipps 2007 17 15.11.2005 12:01
PHP-GTK Tutorial Beitragsarchiv 9 02.11.2005 21:07
Rückgabewert einer rekrusiven Funktion PHP-Fortgeschrittene 7 06.10.2005 18:44
(schnellere) Funktion zum Zusammenfassen von CSS PHP-Fortgeschrittene 21 08.08.2005 16:47
In einer Funktion auf eine Funktion der Klasse zugreifen phpbeginner PHP Tipps 2005-2 2 28.07.2005 00:30
Funktion in einer Funktion aufrufen? PHP Tipps 2005-2 11 14.06.2005 15:14
[Erledigt] Array-Übergabe in Funktion PHP Tipps 2005 1 08.05.2005 21:05
[Erledigt] Wie kann ich beliebig viele Werte an eine Funktion übergeben PHP Tipps 2005 11 25.01.2005 10:44
[Erledigt] sql syntax error in funktion, kann aber nix finden :( PHP Tipps 2004 10 20.07.2004 19:19
[Erledigt] Referenz auf Funktion übergeben PHP-Fortgeschrittene 7 20.07.2004 09:51

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
return fehlerhafte funktion, sbox_round($integer), division by zero in /inc/bbcode.php on line

Alle Zeitangaben in WEZ +2. Es ist jetzt 16:35 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum

Creative Commons License
Dieser Inhalt ist unter einer Creative Commons-Lizenz lizenziert.