Ankündigung

Einklappen
Keine Ankündigung bisher.

PHP Mailer 6 language file

Einklappen

Neue Werbung 2019

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

  • #16
    Gibts dazu schon ein Issue? Sonst macht mal eins
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #17
      Wiso denn in die src von PHPMailer ?
      Wiso nicht
      PHP-Code:
      namespace foo/Wrappers/PHPMailer 

      Kommentar


      • #18
        Zitat von jspit Beitrag anzeigen
        Beim PHP Mailer 6 werden die language files wohl nur ohne eine zusätzliche Pfadangabe gefunden
        Verstehe ich das richtig, dass der zweite Parameter von setLanguage (=$lang_path) nicht berücksichtigt wird? Wenn ich mir den Code angucke, sieht das auf den ersten Blick eigentlich ganz gut aus. Der Vollständigkeit halber hier das Beispiel aus dem GitHub-Repo:
        PHP-Code:
        // To load the French version
        $mail->setLanguage('fr''/optional/path/to/language/directory/'); 
        Änderungen am vendor-Verzeichnis vorzunehmen (egal in welcher Art) ist keine gute Idee. Nutze dafür besser einen eigenen Namespace. Wenn du die Lösung der Allgemeinheit zur Verfügung stellen willst, dann erstelle ein PR mit dem entsprechendem Bugfix oder zumindest ein Issue im GitHub-Repo -- oder einen Fork.
        [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

        Kommentar


        • #19
          Zitat von lottikarotti Beitrag anzeigen
          Verstehe ich das richtig, dass der zweite Parameter von setLanguage (=$lang_path) nicht berücksichtigt wird?
          Wie kommst Du darauf?
          PHP-Code:
          if (empty($lang_path)) {
              
          // Calculate an absolute path so it can work if CWD is not here
              
          $lang_path __DIR__ DIRECTORY_SEPARATOR 'language' DIRECTORY_SEPARATOR;
          }

          //Validate $langcode
          if (!preg_match('/^[a-z]{2}(?:_[a-zA-Z]{2})?$/'$langcode)) {
              
          $langcode 'en';
          }

          $foundlang true;
          $lang_file $lang_path 'phpmailer.lang-' $langcode '.php'
          Das $lang_file wird doch über den $lang_path definiert. Oder habe ich Dich falsch verstanden?
          Competence-Center -> Enjoy the Informatrix
          PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

          Kommentar


          • #20
            Zitat von Arne Drews Beitrag anzeigen
            Das $lang_file wird doch über den $lang_path definiert. Oder habe ich Dich falsch verstanden?
            Das Problem wurde vom TE so beschrieben: "Beim PHP Mailer 6 werden die language files wohl nur ohne eine zusätzliche Pfadangabe gefunden".

            Das klingt für mich so, als versucht der TE language files aus einem eigenen Verzeichnis (statt dem PHPMailer-Verzeichnis) zu laden. Aber genau dafür ist doch der zweite Parameter von setLanguage gedacht?

            Oder habe ich das Problem falsch verstanden?
            [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

            Kommentar


            • #21

              Zitat von jspit Beitrag anzeigen
              Beim PHP Mailer 6 werden die language files wohl nur ohne eine zusätzliche Pfadangabe gefunden
              wenn folgende Verzeichnisstruktur vorliegt: ...
              lottikarotti : Ja, kann missverstanden werden wenn das nicht komplett gelesen wird..

              Mit (richtiger) Pfadangabe im 2.Parameter gibt es keine Probleme. Das betrifft wohl auch die Masse der Anwendungen, welche die Spracheinstellungen dann auch ganz anderen Verzeichnis speichern.

              Wird der 2.Parameter (der Pfad) weggelassen sollten die internen Files geladen werden. Das erfolgt eben nicht, wenn die Struktur welche Composer liefert 1:1 übernommen wird.
              Intern wird aktuell in einem Verzeichnis language unterhalb von src gesucht. Eine kleine Änderung im Quelltext würde die Kompatibilität mit der Composerstruktur auch für diesen Fall wiederherstellen.

              Wird diese Verzeichnisstruktur wie #1 gezeigt gewählt , gibt es auch kein Problem.

              Edit:
              Zitat von hausl Beitrag anzeigen
              Gibts dazu schon ein Issue?
              Muss ich mal richtig durchgehen, beim ersten Überfliegen der offenen Probleme hab ich nichts gesehen.
              Für mich war dies mehr ein Verständnisproblem als ein Bug im PHP-Mailer, will sagen kann damit leben, s. #8.

              tomBuilder

              Zitat von tomBuilder Beitrag anzeigen
              Wiso denn in die src von PHPMailer ?
              Wiso nicht
              PHP-Code:
              namespace foo/Wrappers/PHPMailer 
              Die Bemerkung verstehe ich nicht.

              Kommentar


              • #22
                Zitat von jspit Beitrag anzeigen
                Wird der 2.Parameter (der Pfad) weggelassen sollten die internen Files geladen werden. Das erfolgt eben nicht, wenn die Struktur welche Composer liefert 1:1 übernommen wird.
                ?!

                Zitat von jspit Beitrag anzeigen
                Intern wird aktuell in einem Verzeichnis language unterhalb von src gesucht. Eine kleine Änderung im Quelltext würde die Kompatibilität mit der Composerstruktur auch für diesen Fall wiederherstellen.
                Ich verstehe das Problem irgendwie nicht so ganz - vielleicht stehe ich einfach auf dem Schlauch. Was macht es für den Nutzer von PHPMailer für einen Unterschied wo - innerhalb des vendor-Verzeichnisses - das Standardverzeichnis für die language files von PHPMailer liegt? Du als Nutzer sollst sowieso nicht im vendor-Verzeichnis herumfummeln.

                Zitat von jspit Beitrag anzeigen
                Die Bemerkung verstehe ich nicht.
                Deine Lösung erfordert eine Änderung im vendor-Verzeichnis. Dafür ist es dieses Verzeichnis aber gar nicht gedacht. Deshalb solltest du deine Ableitung innerhalb von deinem Projekt in einem eigenen Namespace platzieren (bspw. unterhalb von /myproject/src).
                [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

                Kommentar


                • #23
                  Das Problem ist, dass bei Verwendung von setLanguage() ohne Pfadangabe relativ vom PHPMailer.php Verzeichnis ausgegangen wird, was sich in src befindet.
                  Das Verzeichnis language befindet sich aber nicht unterhalb von src, sondern im selben parent scope, also auf gleicher Ebene. Der Pfad für ein leer angegebenen Pfad dürfte meiner Meinung nach also nicht passen.

                  Korrekt müsste es - wenn man die Verzeichnisse des PHPMailer nicht manuell anpasst/verschiebt - imho so sein:
                  PHP-Code:
                  if ( empty($lang_path) ) {

                      
                  $lang_path __DIR__ DIRECTORY_SEPARATOR '..' DIRECTORY_SEPARATOR 'language' DIRECTORY_SEPARATOR;


                  Competence-Center -> Enjoy the Informatrix
                  PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                  Kommentar


                  • #24
                    Zitat von Arne Drews Beitrag anzeigen
                    Das Problem ist, dass bei Verwendung von setLanguage() ohne Pfadangabe relativ vom PHPMailer.php Verzeichnis ausgegangen wird, was sich in src befindet.
                    Das Verzeichnis language befindet sich aber nicht unterhalb von src, sondern im selben parent scope, also auf gleicher Ebene. Der Pfad für ein leer angegebenen Pfad dürfte meiner Meinung nach also nicht passen.

                    Korrekt müsste es - wenn man die Verzeichnisse des PHPMailer nicht manuell anpasst/verschiebt - imho so sein:
                    PHP-Code:
                    if ( empty($lang_path) ) {

                    $lang_path __DIR__ DIRECTORY_SEPARATOR '..' DIRECTORY_SEPARATOR 'language' DIRECTORY_SEPARATOR;


                    Ahhhh, ok. Jetzt hab ich's

                    PHPMailer sucht in phpmailer/src/language aber das Verzeichnis befindet sich eigentlich unter phpmailer/language. Wer macht einen PR?
                    [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

                    Kommentar


                    • #25
                      lottikarotti
                      Womöglich habe ich da auch noch Verständnisprobleme da ich nicht bzw. wenig mit Composer und dessen Autoloader gar nicht arbeite (Hab einen eigenen) und deshalb die diesbezüglichen Restriktionen/Gepflogenheiten nicht kenne.
                      Deshalb noch mal von vorn. Wenn ich mir per Composer das Paket PHPMailer hole, dann habe ich folgende Struktur (Das da drüber fehlt)

                      Code:
                        + PHPmailer
                            + src
                                PHPMailer.php, ..
                            + language
                                phpmailer.lang-de.php, ..
                      Frage 1: Ist das so?
                      Wenn ja, dann liegt language sozusagen auf gleicher Höhe wie src. Wenn ich nun

                      PHP-Code:
                      $mail = new PHPMailer\PHPMailer\PHPMailer;
                      $languageOk $mail->setLanguage('de');
                      var_dump($languageOk);  //bool false 
                      bekomme ich von setLanguage() eine Fehlerquittung. Warum? Weil innerhalb des PHPMailers in der Methode setLanguage der Pfad bei leeren 2.Parameter $lang_path wie folgt ermittelt wird:
                      PHP-Code:
                              if (empty($lang_path)) {
                                  
                      // Calculate an absolute path so it can work if CWD is not here
                                  
                      $lang_path __DIR__ DIRECTORY_SEPARATOR 'language' DIRECTORY_SEPARATOR;
                              } 
                      Die Sprachdatei kann so ja auch nicht gefunden werden, bei der obigen Struktur fehlt da ein "../" im Pfad.
                      Frage 2: Liege ich hier richtig?

                      Zitat von lottikarotti Beitrag anzeigen
                      Du als Nutzer sollst sowieso nicht im vendor-Verzeichnis herumfummeln.
                      :
                      Deine Lösung erfordert eine Änderung im vendor-Verzeichnis. Dafür ist es dieses Verzeichnis aber gar nicht gedacht. Deshalb solltest du deine Ableitung innerhalb von deinem Projekt in einem eigenen Namespace platzieren (bspw. unterhalb von /myproject/src).
                      Ok, war mir nicht klar. Die Klassenerweiterung wie oben kann dann aber nicht so benutzt werden.

                      ​​​​​​​Edit: z.T. schon geklärt, kommt davon wenn man zwischendurch Mittag macht..

                      Kommentar


                      • #26
                        Zitat von jspit
                        Frage 1: Ist das so?
                        Ich nutze composer auch nicht, aber ich hoffe mal, dass der die Quellen nicht anders aufbaut, als die die online verfügbar sind?!
                        Zitat von jspit
                        Frage 2: Liege ich hier richtig?
                        Ich würde sagen: Ja.

                        Competence-Center -> Enjoy the Informatrix
                        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                        Kommentar


                        • #27
                          Zitat von Arne Drews Beitrag anzeigen
                          Ich nutze composer auch nicht, aber ich hoffe mal, dass der die Quellen nicht anders aufbaut, als die die online verfügbar sind?!
                          Ich habe mir gestern Abend den PHPMailer mal mit Composer runtergeladen um genau das zu prüfen. Oberhalb der #25 gezeigten Struktur liegt aber noch mal ein Verzeichnis PHPMailer meine ich. Dazu kommen darüber noch einige zig Verzeichnisse/Dateien die der Composer liefert bzw. der Autoloader vom Composer benötigt.
                          Von den Dateien übernehme ich dann nur die welche ich wirklich benötige und packe das in eine Struktur nach meinen Geschmack.

                          Kommentar


                          • #28
                            Ich übernehme das auch immer nur ab der Ebene, wie Du es in #25 gezeigt hast. Du hast aber glaube ich recht, dass da noch eine Ebene PHPMailer drüber liegt.
                            Allerdings ist das aus meiner Sicht irrelevant für das Problem, denn __DIR__ wird relativ von PHPMailer.php aufgerufen. Auf welcher Ebene das am Ende steht, ist vollkommen irrelevant. Für den per default generierten Pfad wäre immer noch ein ../ erforderlich.
                            Competence-Center -> Enjoy the Informatrix
                            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

                            Kommentar


                            • #29
                              Nochmal zur Erweiterungsklasse:
                              Den Ansatz wie von mir #15 realisiert kann man komplett vergessen, wenn die Klasse in einen anderen Verzeichnis liegen soll/muss ohne Bezug zum Verzeichnis in dem PHPMailer.php liegt.
                              Dann kann ich gleich der Methode setLanguage() einen absoluten Pfad als 2.Parameter mitgeben. Total blöd..

                              Kommentar


                              • #30
                                Zitat von Arne Drews Beitrag anzeigen
                                Ich nutze composer auch nicht, aber ich hoffe mal, dass der die Quellen nicht anders aufbaut, als die die online verfügbar sind?!
                                Die Verzeichnisstruktur wird für gewöhnlich 1:1 übernommen, außer der Package-Author werkelt mit irgendwelchen Composer-Hooks herum. Das ist bei PHPMailer aber offensichtlich nicht der Fall. Hier handelt es sich schlichtweg um einen Bug.
                                [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

                                Kommentar

                                Lädt...
                                X