Nico: PHP kennt bcsub() nicht?

Hallo!

Ich hab auf meinen WebServer ein Script hochgeladen. Zu sagen wäre vielleicht nich, dass ich das nicht selber geschrieben habe, sondern aus dem Internet downgeloadet. Als ich das auf dem Server ausführen wollte kam die Fehlermeldung "
Fatal error: Call to undefined function: bcsub() ..."
In dem Script ist ja auch die Funktion mit eingebaut. Aber die ist doch absolut legitim, oder?
Beim googeln bin ich auch schon auf massenweise von den gleichen Problemen gestoßen. Die hatten aber alle keine Lösung. Hängt das mit der PHP-Konfiguration des Servers ab? Und wenn ja, wie kann ich das dann umgehen. In dem Script ist eine Genauigkeit von 2 angegeben. Ich weiss nicht, inwiefern sich das dann auf das ganze Script auswirkt, wenn ich einfach schreibe $x=$y-$z. Hätte da jemand einen Vorschlag?

Nico

  1. Moin,

    Hätte da jemand einen Vorschlag?

    Ja, wie wärs mit ein paar Zeilen beispielcode?

    Grüsse

    Marc

    1. Ich weiß zwar nicht , ob das weiter hilft, aber wenn du denkst:

      $userlogin=$usrsettings[$usrid."_login"];
      $userstamp=$usrsettings[$usrid."_timestamp"];
      $localstamp=date("H.i");
      $checkstamp=bcsub($localstamp,$userstamp,2);

      Nico

      1. Hiho,

        du hast ja bereits eine (wahrscheinlich richtige) Antwort von Tobias bekommen. Wäre dem nicht so hätte ich die paar Zeilen Code genutzt um das selbe mal bei mir auszuprobieren und so zu sehen ob es an deinem Server liegt, oder doch am Script...
        Deshalb am besten immer ein bisschen Code mitliefern...

        Grüsse

        Marc

        1. Ja aber was mach ich denn da jetzt?

          1. Hallo Nico,

            Ja aber was mach ich denn da jetzt?

            z.B. hättest Du die Möglichkeit, dein Programm so umzuschreiben, daß es ohne bcsub() läuft. bcsub() ist ja schliesslich keine Funktion, die man unbedingt braucht. Wenn Du formatierte Zahlen brauchst tut es auch number_format(), sprintf() oder so.

            Grüsse
            Frankie

            1. Also würde dann

              $checkstamp=bcsub($localstamp,$userstamp,2);

              das gleiche sein wie

              $checkstamp=$localstamp-$userstamp
              $checkstamp=number_format($checkstamp, 2)

              , oder? Danke schonmal (auch an alle anderen)

              Nico

              1. Hiho,

                ob das das gleiche ist hab ich jetzt nicht geprüft. Aber es wird zumindest ähnlich. Ich wollte nur einwerfen das du es am besten als eigene Funktiion lösen solltest

                  
                function bcsub($wert1, $wert2, $stellen){  
                    return (number_format(/$wert1 - $wert2), 2));  
                }  
                
                

                (oder entsprechend anderen Code, falls dein Beispiel da unten nicht vollkommen äquivalent ist)
                Die Funktion dann irgendwo untergebracht so das sie möglichst in allen anderen Scripten includet ist und tadaa...

                Marc

                1. Hallo AllesMeins,

                  gute Idee, aber

                  function bcsub($wert1, $wert2, $stellen){
                      return (number_format(/$wert1 - $wert2), 2));

                  ^^^^

                  }

                    
                  welche bedeutung hat der "/" in deiner Funktion?  
                    
                  Grüsse  
                  Frankie
                  
                  1. function bcsub($wert1, $wert2, $stellen){
                        return (number_format(/$wert1 - $wert2), 2));
                                                ^^^^
                    }

                    
                    >   
                    > welche bedeutung hat der "/" in deiner Funktion?  
                      
                    Es war spät und ich hab die "Klammer auf" Taste knapp verfehlt :)  
                      
                    Marc
                    
                2. Da wäre ja blos das Problem, dass die Stellenanzahl optional ist. Kann ich das denn in einer selbstdefinierten Funktion angeben?

                  Nico

                  1. Hallo Nico,

                    Da wäre ja blos das Problem, dass die Stellenanzahl optional ist. Kann ich das denn in einer selbstdefinierten Funktion angeben?

                    ja.

                    Grüsse
                    Frankie

                3. Hallo!

                  function bcsub($wert1, $wert2, $stellen){
                      return (number_format(/$wert1 - $wert2), 2));
                  }

                  
                  > (oder entsprechend anderen Code, falls dein Beispiel da unten nicht vollkommen äquivalent ist)  
                  > Die Funktion dann irgendwo untergebracht so das sie möglichst in allen anderen Scripten includet ist und tadaa...  
                    
                  Man kann das Verhalten von BC-Funktionen nicht so ohne weiteres nachbilden. BC abreitet nicht mit (den Limitierungen von) Floats, sondern mit Strings. Wenn das in diesem Fall geht war die Verwendung einer BC-Funktion gar nicht notwendig.  
                    
                    
                  Grüße  
                  Andreas
                  
                  -- 
                  SELFHTML Linkverzeichnis: <http://aktuell.de.selfhtml.org/links/>
                  
              2. Hallo Nico,

                $checkstamp=$localstamp-$userstamp

                ; fehlt

                $checkstamp=number_format($checkstamp, 2)

                ; fehlt

                , oder? Danke schonmal (auch an alle anderen)

                ich denke schon, daß das zum gewünschten Ergebnis führt, hast es denn schon ausprobiert?

                Grüsse
                Frankie

            2. Hallo!

              Ja aber was mach ich denn da jetzt?

              z.B. hättest Du die Möglichkeit, dein Programm so umzuschreiben, daß es ohne bcsub() läuft. bcsub() ist ja schliesslich keine Funktion, die man unbedingt braucht. Wenn Du formatierte Zahlen brauchst tut es auch number_format(), sprintf() oder so.

              bc-Funktionen können mit einer sehr viel höheren Genauigkeit rechnen, entsprechend kann man Rundungsfehler von normalen Rundungen vermeiden. Das aber nur wenn man es bewußt und vor allem konsequent einsetzt und weiß was man da macht. Mit Formatierungen hat das ganze erstmal wenig zu tun.

              Grüße
              Andreas

              --
              SELFHTML Tipps & Tricks: http://aktuell.de.selfhtml.org/tippstricks/
              1. Hallo Andreas,

                bc-Funktionen können mit einer sehr viel höheren Genauigkeit rechnen, entsprechend kann man Rundungsfehler von normalen Rundungen vermeiden. Das aber nur wenn man es bewußt und vor allem konsequent einsetzt und weiß was man da macht. Mit Formatierungen hat das ganze erstmal wenig zu tun.

                Danke für die Aufklärung!

                Grüsse
                Frankie

          2. Hiho,

            hast du nachgeschaut ob es das wirklich ist? Leg mal ne Datei mit nur
            <?php
            phpinfo();
            ?>
            an und schau was bei dem Punkt "bcmath support" steht. Sollte das nichT "enabled" stehen oder gibt es den Punkt gar nicht hängt es davon ab ob du bei irgend einem Hoster bist und bei welchem. Falls du selber Zugriff auf den Server hast: Perfekt - dann musst du PHP einfach nur mit der entsprechenden Option neu kompilieren/installieren.
            Falls du das nicht hast kannst du nur auf den guten Draht zu deinem Hoster hoffen und ihn fragen ob es möglich ist das zu aktivieren (bei den grossen Massenhostern wirst du wohl kaum ne Chance haben - aber wenn du bei nem kleinen bist...)
            Alternativ kannst du dir noch einen neuen Hoster suchen oder ein neues Script...

            Und die letzte Möglichkeit: Wenn es nur bcsub ist - die Funktion scheint mir nicht so arg kompliziert zu sein. Mit ein bisschen geschick dürftest du so ne Funktion auch mit PHP Bordmitteln nachbauen können und dann das Script entsprechend umbasteln, das deine Funktion mitdrinne ist...

            Marc

  2. Hallo Nico,

    Fatal error: Call to undefined function: bcsub() ..."

    <zitat quelle="http://de3.php.net/ref.bc">
    These functions are only available if PHP was configured with --enable-bcmath.
    </zitat>
    was sagt phpinfo(); zu dieser Option?

    Grüße aus Nürnberg
    Tobias