PHP rocks! wünscht allen Mitgliedern einen guten Rutsch ins neue Jahr 2017 !!!
Hinweis: Das Forum zieht um! Um keine Datenverluste zu haben, schalten wir zwecks Übernahme der Daten das Forum am Sonntag, den 24.04.2016 um ca. 21:00 Uhr offline und passen anschliessend die DNS-Einträge an.
www.php-rocks.de wird euch dann nach den Aktualisierungen der DNS-Server wieder wie gewohnt uneingeschränkt zur Verfügung stehen.
Danke für euer Verständnis!

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
PHPMailer Pfad wird nicht gefunden
#1
Hallo,
ich habe bisher eine alte Version vom PHPMailer zu laufen gehabt. Diese und ein Script damit läuft aber unter PHP8.1 nicht mehr.
Nun habe ich mir die Erläuterung hier angesehen und den Autoloader versucht. Ich bekomme es nicht hin.

Die Initialisierung lautet:
PHP-Code:
use PHPMailer\PHPMailer\PHPMailer;
use 
PHPMailer\PHPMailer\Exception;
use 
PHPMailer\PHPMailer\SMTP;

include_once 
'PHPMailer/PHProcksAutoloader.php'

Den PHPMailer rufe ich aus mit einem Script in einem Ordner unter ROOT auf. Das sieht so aus:
Code:
htdocs
---jubileum/birthday.php

Der Fehler scheint durch die Zeile im Autoloader verursacht zu werden, die da lautet:
PHP-Code:
private $PathTemplate __DIR__ '/src/{{CLASS_NAME}}.php'

In __DIR__ ist auf dem Server nicht das enthalten, was man erwarten könnte, bei diesem Anbieter.

Die Fehlermeldung, die kommt lautet:


Zitat:Fatal error: Uncaught Error: Class "PHPMailer\PHPMailer\PHPMailer" not found in /var/www/vhosts/hosting173913.a2e70.netcup.net/wuhletalerff.de/httpdocs/jubileum/birthday.php:48 Stack trace: #0 {main} thrown in /var/www/vhosts/hosting173913.a2e70.netcup.net/wuhletalerff.de/httpdocs/jubileum/birthday.php on line 48

Wie kann ich $PathTemplate so definieren, dass die Klasse auch gefunden wird? Ich stehe total auf dem Schlauch. Ich bitte um Denkanstöße.
Vielen Dank
Antworten
#2
Hi Gebby,

Sorry für die späte Antwort.

Grundsätzlich gilt für das Beispiel, dass das Verzeichnis PHPMailer mit all den enthaltenen Unterverzeichnissen und Dateien im selben Verzeichnis liegt, wie die aufrufende Datei selber, in Deinem Fall also im Verzeichnis jubileum. Ist das gegeben musst Du beim include noch das Stammverzeichnis vom PHPMailer mit angeben und entsprechend die PHP Konstante __DIR__ verwenden, dann passt das auch mit dem Autoloader:
PHP-Code:
include_once __DIR__ '/PHPMailer/PHProcksAutoloader.php'
Genau nachzulesen hier, im Abschnitt zum Autoloader.

Viel Erfolg und ansonsten gerne auch auf php.de Wink
Gruß Arne
Antworten
#3
(22.08.2022, 11:14)Arne Drews schrieb: Hi Gebby,

Sorry für die späte Antwort.

Grundsätzlich gilt für das Beispiel, dass das Verzeichnis PHPMailer mit all den enthaltenen Unterverzeichnissen und Dateien im selben Verzeichnis liegt, wie die aufrufende Datei selber, in Deinem Fall also im Verzeichnis jubileum. Ist das gegeben musst Du beim include noch das Stammverzeichnis vom PHPMailer mit angeben und entsprechend die PHP Konstante __DIR__ verwenden, dann passt das auch mit dem Autoloader:

PHP-Code:
include_once __DIR__ '/PHPMailer/PHProcksAutoloader.php'
Genau nachzulesen hier, im Abschnitt zum Autoloader.

Viel Erfolg und ansonsten gerne auch auf php.de  Wink
Gruß Arne

Ich kann __DIR__ nicht verwenden, denn darin ist ein Pfad enthalten, der NICHT zu meinem htdocs verweist.
MfG
Antworten
#4
__DIR__ enthält immer den absoluten Pfad (aus Server-Sicht) zu dem Verzeichnis der Datei, wo es verwendet wird.
Doku: __DIR__

Kannst ja mal Spaßeshalber ausprobieren:
PHP-Code:
var_dump(__DIR__); 

Das Konstrukt mit dem Autoloader funktioniert, habe ich selber getestet und in Verwendung und wurde mir von mehreren schon bestätigt.
Wenn Du eine andere Verzeichnishierarchie hast, geht es natürlich nicht mehr ohne Anpassungen.
Strikt nach dem Tutorial läuft es aber definitiv.
Antworten
#5
(22.08.2022, 22:39)Arne Drews schrieb: __DIR__ enthält immer den absoluten Pfad (aus Server-Sicht) zu dem Verzeichnis der Datei, wo es verwendet wird.

Kannst ja mal Spaßeshalber ausprobieren:


PHP-Code:
var_dump(__DIR__); 

Habe ich alles schon durch. Es wird mir geliefert:


PHP-Code:
/var/www/vhosts/hosting173XXXX.netcup.net/meinedomain.de/httpdocs/jubileum/birthday.php 

Damit kann ich aber nichts anfangen, denn aus meiner Sicht liegt die birthday.php in:


Zitat:htdocs/jubileum/birthday.php


Und der PHPMailer liegt in:

Zitat:htdocs/PHPMailer/

Dieser ganze Trödel den mir __DIR__ liefert, wird wohl nach Angabe des Services des Providers geliefert, weil die zur Miete auf einer größeren Serverfarm sind.

Zitat:Das Konstrukt mit dem Autoloader funktioniert,

Bei mir eben nicht. Es kommt die Fehlermeldung die Datein des PHPMailers seien nicht zu finden.
Antworten
#6
Das, was __DIR__ Dir liefert ist korrekt, schau mal genau hin  Wink
/var/www/vhosts/hosting173XXXX.netcup.net/meinedomain.de/httpdocs/jubileum/birthday.php

Es handelt sich um den kompletten Serverpfad und der ist korrekt. Das Ziel ist genau das, was Du suchst.

Was den PHPMailer angeht, liegt der im falschen Verzeichnis, wenn man von meinem Tutorial ausgeht.
Du hast die Möglichkeit, entweder das komplette Verzeichnis vom PHPMailer in das Verzeichnis jubilaeum zu schieben, womit dann der include funktionieren würde oder Du passt den include an auf das Stammverzeichnis.

Dazu bietet es sich an, eine Konstante zu definieren am Anfang des Initialscriptes ( bspw. index.php ):
PHP-Code:
define('__MyBaseDir__'__DIR__); 

Wobei die Namensgebung vollkommen egal ist, hier sei nur mal als Beispiel die Schreibweise von __DIR__ adaptiert.
Wenn Deine jubilaeum/birthday.php nun per include oder require eingebunden ist, kannst Du darin Deine Konstante einfach verwenden und hast immer Dein httpdocs Verzeichnis:
PHP-Code:
include_once __MyBaseDir__ '/PHPMailer/PHProcksAutoloader.php'

Das sollte ebenfalls funktionieren.

Alles in allem basiert das ganze "funktioniert nicht" wie von Anfang an angesprochen auf falschen Pfaden bzw. der Annahme falscher Pfade.
Antworten


Möglicherweise verwandte Themen...
Thema Verfasser Antworten Ansichten Letzter Beitrag
  PHP & E-Mail PHPMailer Version 6 erfolgreich einbinden fischer1000 1 4.391 13.11.2018, 13:51
Letzter Beitrag: Arne Drews
  Session Files werden nicht beschrieben Till 5 11.577 26.05.2017, 09:16
Letzter Beitrag: Arne Drews
  phpinfo wird nicht ausgelesen! HelgeHH 10 24.951 12.10.2016, 10:21
Letzter Beitrag: Arne Drews

Gehe zu: