Eddy.: PHP Fatal error: Cannot redeclare class PHPMailer in...

Hallo,

PHP Fatal error: Cannot redeclare class PHPMailer in /.../.../FPDFMail/class.php

Ich habe sämtliche require zu require_once ausgetauscht. Ich kriegs auch nicht hin, überhaupt zu erforschen, wo der Fehler letztlich ausgelöst wird. Der Errorlog zeigt mir zwar das Ausgangsscript an. Das kann es aber nicht sein, da ich dort die Klasse gar nicht benutze. Es muß also durch eine der eingebundenen Dateien ausgelöst werden.

Wie gehe ich die Fehlersuche am besten an?

Ed

  1. Tach!

    PHP Fatal error: Cannot redeclare class PHPMailer in /.../.../FPDFMail/class.php

    Wie gehe ich die Fehlersuche am besten an?

    Zur Not schrittweise. Immer mal wieder ein die('irgendein signifikanter text') setzen und schauen, ob es fehlerfrei bis dahin geht. Auskommentieren von Includes kann man auch probieren, wird wohl aber nur noch mehr Fehler bringen wegen nicht mehr gefundener Dinge.

    Man könnte es auch mit einem Debugger versuchen und sich damit und ohne die die() durchhangeln. Aber da muss man sich erstmal einen besorgen und installieren. Zu dem Thema muss ich aber passen.

    dedlfix.

    1. Hi dedlfix,

      Wie gehe ich die Fehlersuche am besten an?

      Zur Not schrittweise. Immer mal wieder ein die('irgendein signifikanter text') setzen und schauen, ob es fehlerfrei bis dahin geht. Auskommentieren von Includes kann man auch probieren, wird wohl aber nur noch mehr Fehler bringen wegen nicht mehr gefundener Dinge.

      Ach wenns so einfach wäre. Mein Problem ist, dass ich es nicht schaffe, den Fehler zu reproduzieren. Mal taucht er in diesem Script auf, mal in einem anderen. Insofern wirds sehr schwierig, schrittweise Erkenntnisse zu sammeln :-(

      Ed

      1. Tach!

        Ach wenns so einfach wäre. Mein Problem ist, dass ich es nicht schaffe, den Fehler zu reproduzieren. Mal taucht er in diesem Script auf, mal in einem anderen.

        Hast du eventuell die Übersicht über die Includes verloren? Zumindest wenn man objektorientiert arbeitet, kann man mit etwas Disziplin beim Benennen der Klassen und dem Anlegen der Verzeichnisstruktur sowie dem Standard PSR-4 deren Inkludieren dem Autoloader überlassen.

        dedlfix.

        1. Hi dedlfix,

          Hast du eventuell die Übersicht über die Includes verloren? Zumindest wenn man objektorientiert arbeitet, kann man mit etwas Disziplin beim Benennen der Klassen und dem Anlegen der Verzeichnisstruktur sowie dem Standard PSR-4 deren Inkludieren dem Autoloader überlassen.

          Sollte ich eigentlich nicht verloren haben. Die Datei, die es heute morgen verursacht hat, hat 4 includes. Die erste inkludierte Datei hat: 1 include_once (die hat widerum keine weiteren mehr) Die zweite inkludierte Datei hat: Keine weiteren inkl. Dateien Die dritte inkludierte Datei hat: Sehr viele, jedoch alle in Funktionen verpackt, d.h. hier müsste ich nachprüfen, welche Funktion aus welcher Datei angesprochen werden könnte Die vierte inkludierte Datei hat: Keine weiteren inkl. Dateien

          Was mich aber wundert, ist, dass eine Klasse doch überhaupt nicht versucht werden kann, "declared" zu werden, wenn ich überall "require_once" benutze.

          UNd nein, mein Projekt ist alles andere als durchgängig objektorientiert programmiert.

          Ed

          1. Tach!

            Hast du eventuell die Übersicht über die Includes verloren? Sollte ich eigentlich nicht verloren haben.

            Ich hatte das im Verdacht, weil du schon das Austauschen von include gegen die once-Variante überhaupt als Lösungsversuch ins Spiel brachtest. Da dachte ich mir, dass du dir bisher keine großartigen Gedanken gemacht hattest, wann include und wann include_once sinnvoll ist (oder require/require_once).

            Die dritte inkludierte Datei hat: Sehr viele, jedoch alle in Funktionen verpackt, d.h. hier müsste ich nachprüfen, welche Funktion aus welcher Datei angesprochen werden könnte

            Wann immer die Funktion aufgerufen wird, muss inkludiert werden. Das riecht problematisch. Besser die Includes an eine zentrale Stelle am Anfang der Datei schreiben. Dann hat man vielleicht unnötig viele eingeladen, aber auch keine potentiellen Dopplungen.

            Was mich aber wundert, ist, dass eine Klasse doch überhaupt nicht versucht werden kann, "declared" zu werden, wenn ich überall "require_once" benutze.

            Vielleicht hast du eins vergessen?

            UNd nein, mein Projekt ist alles andere als durchgängig objektorientiert programmiert.

            Das ist nicht weiter tragisch. Jedoch könnte man zumindest für den OOP-Teil den Autoloader in Betracht ziehen.

            dedlfix.

            1. Hi dedlfix,

              Vielleicht hast du eins vergessen?

              Und wenn nicht? Ich werde auf jeden Fall nochmal nachschauen und melde mich dann wieder. Kann es denn sein, dass ein require_once fehlinterpretiert wird? Seltsam, seltsam... ich melde mich. Ed

              1. Tach!

                Vielleicht hast du eins vergessen?

                Und wenn nicht?

                Tja, dann steckt der Fehler doch woanders.

                Kann es denn sein, dass ein require_once fehlinterpretiert wird?

                Unwahrscheinlich. Und ziemlich unwahrscheinlich, dass du dann der einzige mit dem Problem wärst. Wenn sich seltsame Dinge nicht auf einen eigenen Fehler zurückführen lassen, oder auf exotische Softare, die zu selten verwendet wird, als dass darin Fehler auffallen, dann ist es meist defekte Hardware. Dann treten aber Fehler üblicherweise nicht nur konkret in einer Anwendung auf, sondern verteilen sich übers System. Ich tippe eher auf einen Fehler in deinem (oder verwendetem) Code.

                dedlfix.