Ankündigung

Einklappen
Keine Ankündigung bisher.

Warning: Use of undefined constant

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Warning: Use of undefined constant

    Hi,

    Ich habe nen altes Skript von mir hiermit bereits halbwegs mit php 7 zum laufen bekommen:
    https://github.com/e-sites/php-mysql-mysqli-wrapper

    Allerdings bekomme ich nun lauter undefined constant Meldungen.
    Ich will momentan nicht das ganze script anpassen sondern nur das es mit möglichst wenig aufwand erstmal unter php 7 läuft.

    Was ich jetzt bräuchte wäre ein codeschnipsel den ich in meine global.php einfügen könnte der diese undefined constant meldung entfernt.
    ich will den fehler nicht unterdrücken sondern der code sollte die quasi automatisch definen und somit das problem beheben.

    Leider hab ich diesbezüglich nichts gefunden.
    Kann mir jemand mit etwas code aushelfen?

  • #2
    Da musst du wohl die Stellen korrigieren, wo der Fehler auftritt. Das hat übrigens nichts mit PHP 7 zu tun.

    Kommentar


    • #3
      Mit alten PHP Versionen tritt dieser Fehler nicht auf.
      Ob es jetzt speziell erst bei PHP 7 auftritt oder bereits 5.6 oder so kann ich jedoch nicht sagen.

      Aufjedenfall will ich genau das vermeiden die Stellen manuell anzupassen.
      Schon klar das dass anpassen des codes die sauberste methode ist, ich will jedoch momentan nur einen einfachen fix der das ding am laufen hält sobald in neuen versionen dies einen error statt nur warning wirft.

      Um den ganzen code nativ mit php 7 zum laufen zu bringen wäre viel mehr nötig als nur das hier anzupassen.
      Das werde ich momentan nicht machen. Trotzdem wäre php 7 support schön weil es überall verfügbar ist im gegensatz zu alten php 5 versionen.

      Kommentar


      • #4
        Zitat von HelgeMattig Beitrag anzeigen
        Mit alten PHP Versionen tritt dieser Fehler nicht auf.
        Dein alter Webserver war wohl so konfiguriert, dass diese Fehlermeldungen unterdrückt werden.

        Zitat von HelgeMattig Beitrag anzeigen
        Ob es jetzt speziell erst bei PHP 7 auftritt oder bereits 5.6 oder so kann ich jedoch nicht sagen.

        Aufjedenfall will ich genau das vermeiden die Stellen manuell anzupassen.
        Schon klar das dass anpassen des codes die sauberste methode ist, ich will jedoch momentan nur einen einfachen fix der das ding am laufen hält sobald in neuen versionen dies einen error statt nur warning wirft.
        Fehlermeldungen unterdrücken oder die Code-Stellen ausbessern. Suchs dir aus.

        Kommentar


        • #5
          Nein dieser Fehler tritt mit PHP 5.2 nicht auf.
          Auch mit aktiviertem Error Reporting nicht.

          Edit:

          Hier mal eine zeile code als beispiel die einen derartigen error wirft
          Code:
             $db->unbuffered_query("INSERT INTO bb".$n."_sessions VALUES ('$session[hash]','$session[userid]','".addslashes($session[ipaddress])."','".addslashes($session[useragent])."','$session[lastactivity]','".addslashes($session[request_uri])."','$session[styleid]','$sboardid','$sthreadid')",1);

          Kommentar


          • #6
            Der Fehler wird zumindest seit der Version 4.3 geworfen. Ältere Versionen habe ich nicht getestet:

            PHP-Code:
            <?php

            error_reporting
            (-1);

            echo 
            foobar;
            Output for 7.2.0 - 7.4.7rc1
            Warning: Use of undefined constant foobar - assumed 'foobar' (this will throw an Error in a future version of PHP) in /in/Hmvmu on line 5
            foobar

            Output for 4.3.0 - 7.1.33
            Notice: Use of undefined constant foobar - assumed 'foobar' in /in/Hmvmu on line 5
            foobar
            https://3v4l.org/Hmvmu

            Dein Code ist übrigens anfällig für SQL-Injections und sollte auf keinen Fall im Internet betrieben werden. addslashes() bitte keinen vollständigen Schutz gegen Injections.

            Kommentar


            • #7
              Zitat von HelgeMattig Beitrag anzeigen
              Allerdings bekomme ich nun lauter undefined constant Meldungen.
              Und die wären? Ich habe das Script mal kurz eingebunden (PHP 7.2), bekomme aber keine Meldungen.

              Ich will momentan nicht das ganze script anpassen sondern nur das es mit möglichst wenig aufwand erstmal unter php 7 läuft.
              Ich würde dringend davon abraten dein Script mit der Krücke zum Laufen bringen zu wollen - Umschreiben dürfte die bessere Wahl sein zumal da vermutlich noch mehr im argen liegt was korrigiert werden sollte/muss.

              Kommentar


              • #8
                *grmpf* Ich hasse es wenn nachträglich wichtige Informationen in Postings reineditiert werden …

                Zitat von HelgeMattig Beitrag anzeigen
                Code:
                 $db->unbuffered_query("INSERT INTO bb".$n."_sessions VALUES ('$session[hash]','$session[userid]','".addslashes($session[ipaddress])."','".addslashes($session[useragent])."','$session[lastactivity]','".addslashes($session[request_uri])."','$session[styleid]','$sboardid','$sthreadid')",1);
                Was hat diese Zeile mit dem verlinkten Script zu tun? Die Fehlenden Anführungszeichen um Array-Keys sind schon immer falsch gewesen (zumindest außerhalb doppelter Anführungszeichen, innerhalb ist es ok so) - und wie hellbringer schon schrieb: der Code ist gefährlich und sollte fachgerecht entsorgt werden.

                Kommentar


                • #9
                  Ich hab jetzt eben nochmal unter PHP 5.2 installiert und folgende Einstellungen (siehe Anhang)

                  Ich bekomme keine undefined constant warnings.
                  Wenn ich php 7 einsetze und den mysql wrapper vom start posting jedoch schon!

                  Das script ist hinter nem .htaccess und ist nur ausgewählten leuten zugänglich.
                  Kein unkalkulierbares Sicherheitsrisiko.

                  PS:
                  In meiner global.php steht folgendes:
                  Code:
                  error_reporting(7);
                  Kann es vllt. damit zusammen hängen?

                  php 5.2.PNG

                  Kommentar


                  • #10
                    Naja, mit error_reporting(7) unterdrückst du einige Fehlermeldungen. Ändere das mal auf error_repoting(-1). -1 bedeutet, dass alle Fehlermeldungen ausgegeben werden.

                    Kommentar


                    • #11
                      Zitat von HelgeMattig Beitrag anzeigen
                      Das script ist hinter nem .htaccess und ist nur ausgewählten leuten zugänglich.
                      Kein unkalkulierbares Sicherheitsrisiko.
                      Doch, zumal da vermutlich noch weitere solcher Fehler drin sind - außerdem: die gefährlichsten Angriffe kommen von innen.

                      Kommentar


                      • #12
                        Ich hab jetzt das

                        Code:
                        error_reporting(7);
                        mal durch

                        Code:
                        //error_reporting(7);
                        und mal durch

                        Code:
                        error_reporting(-1);
                        ersetzt.
                        Hat beides das selbe ergebnis (logisch anhand meiner php einstellungen).

                        Es werden mir zwar nun diverse Meldungen angezeigt,
                        aber nicht alle und diverse andere als mit PHP 7.

                        PHP 7 zeigt mir z.b. an:
                        Code:
                        Warning: Use of undefined constant ipaddress - assumed 'ipaddress' (this will throw an Error in a future version of PHP)
                        Das wird in PHP 5.2 garnicht angezeigt. (Ist der code den ich oben gepostet habe der diese Meldung auswirft)

                        Diese Meldung bekomme ich allerdings fast identisch in beiden:

                        Code:
                        PHP 5.2
                        Notice: Use of undefined constant canusepms - assumed 'canusepms' in
                        
                        PHP 7
                        Warning: Use of undefined constant canusepms - assumed 'canusepms' (this will throw an Error in a future version of PHP) in
                        Letzten endes bedeutet das aber diese Zeile
                        Code:
                        $db->unbuffered_query("INSERT INTO bb".$n."_sessions VALUES ('$session[hash]','$session[userid]','".addslashes($session[ipaddress])."','".addslashes($session[useragent])."','$session[lastactivity]','".addslashes($session[request_uri])."','$session[styleid]','$sboardid','$sthreadid')",1);
                        Warf unter php 5.2 noch keine Warnung aus,
                        wärend sie es unter php 7 nun jedoch tut.

                        Wenn ich error_reporting(7); durch error_reporting(5); ersetze werden die Warnungen nicht mehr angezeigt.
                        Unterdrücken ist ja auch schön und gut mir macht jedoch sorgen das php 7 sagt (was 5 nicht tat)

                        this will throw an Error in a future version of PHP

                        Kommentar


                        • #13
                          Zitat von HelgeMattig Beitrag anzeigen
                          Unterdrücken ist ja auch schön und gut mir macht jedoch sorgen das php 7 sagt (was 5 nicht tat)
                          Das ist ein Hinweis, dass du den Code ehebaldigst korrigieren solltest. Wie lange existiert der fehlerhafte Code jetzt schon so? 20 Jahre? Zumindest das addslashes() deutet auf einen alten PHP 4 Code hin, da seit PHP 4.3 bzw 5.0 addslashes() durch mysql_real_escape_string() abgelöst wurde. Also es war viele Jahre Zeit diese Fehler auszubessern und diese Jahre sind nicht genutzt worden. Wie lange will man diese halbtote Sau noch durchs Dorf treiben? Willst du das bis 2030 so laufen lassen?

                          Kommentar


                          • #14
                            Sry leute der Fehler:

                            Warning: Use of undefined constant ipaddress - assumed 'ipaddress' (this will throw an Error in a future version of PHP)
                            Wird auch in PHP 5.2 angezeigt wenn man das error reporting entsprechend einstellt.
                            Allerdings nur beim ersten aufrufen der Seite, wenn die Session erstellt wurde wird die Meldung sowohl bei 5.2 als auch 7 nicht mehr angezeigt!

                            Ihr habt also recht und diese Meldung wird im Prinzip bereits seit 20 Jahren angezeigt wenn
                            man das error reporting entsprechend konfiguriert.

                            Die Frage ist nur was ist jetzt das equivalent für
                            Code:
                            error_reporting(7);
                            unter php 7?

                            Ich will ja nicht "wichtige" Fehlermeldungen unterdrücken sondern nur diese wo auf die Funktion der Software keinen Einfluss haben.

                            Ansonsten kann man davon ausgehen das dies noch eine weile so klappt oder bereits in der nächsten PHP Version nicht mehr?
                            Weil PHP 7 meldet ja
                            this will throw an Error in a future version of PHP
                            Was php 5.2 nicht tat.

                            Langfristig besteht da Handlungsbedarf das ist richtig aber derzeit will ich das tatsächlich erstmal noch ne weile so durchschleppen.
                            Möglicherweise wird die Software irgendwann sowieso komplett ersetzt.

                            Kommentar


                            • #15
                              Zitat von HelgeMattig Beitrag anzeigen
                              Die Frage ist nur was ist jetzt das equivalent für
                              Code:
                              error_reporting(7);
                              unter php 7?

                              Ich will ja nicht "wichtige" Fehlermeldungen unterdrücken sondern nur diese wo auf die Funktion der Software keinen Einfluss haben.
                              Da gibt es kein Äquivalent. Fehler können von PHP-Version zu PHP-Version unterschiedlich gewichtet werden. Bestimmte Dinge können in zukünftigen Versionen auch nicht mehr funktionieren, deshalb ist es wichtig, dass der Grad der Fehlermeldungen dazu langsam ansteigt. Zuerst eine Notice, dann ein Warning bis zum schlussendlichen Error. Dies gibt den Programmieren über Jahre hinweg Zeit den Code darauf anzupassen.

                              Wenn man diese Fehler von Anfang an ignoriert und dann in letzter Minute drauf kommt, dass das in naher Zukunft Konsequenzen hat, haben die Programmierer die Zeit verschlafen und sind dadurch gezwungen jetzt umso schneller darauf zu reagieren.

                              Zitat von HelgeMattig Beitrag anzeigen
                              Ansonsten kann man davon ausgehen das dies noch eine weile so klappt oder bereits in der nächsten PHP Version nicht mehr?
                              Darüber musst du dich bei den PHP-Entwicklern informieren.

                              Zitat von HelgeMattig Beitrag anzeigen
                              Langfristig besteht da Handlungsbedarf das ist richtig aber derzeit will ich das tatsächlich erstmal noch ne weile so durchschleppen.
                              Möglicherweise wird die Software irgendwann sowieso komplett ersetzt.
                              Du spielst halt mit dem Feuer.

                              Kommentar

                              Lädt...
                              X