PHP Rocks
PHPMailer Pfad wird nicht gefunden - Druckversion

+- PHP Rocks (https://www.php-rocks.de)
+-- Forum: PHP Programmierung (https://www.php-rocks.de/https://www.php-rocks.de/forum/1-php-programmierung.html)
+--- Forum: PHP Basics (https://www.php-rocks.de/https://www.php-rocks.de/forum/2-php-basics.html)
+--- Thema: PHPMailer Pfad wird nicht gefunden (/https://www.php-rocks.de/thema/659-re-phpmailer-pfad-wird-nicht-gefunden.html)



PHPMailer Pfad wird nicht gefunden - Gebby - 08.08.2022

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


RE: PHPMailer Pfad wird nicht gefunden - Arne Drews - 22.08.2022

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


RE: PHPMailer Pfad wird nicht gefunden - Gebby - 22.08.2022

(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


RE: PHPMailer Pfad wird nicht gefunden - Arne Drews - 22.08.2022

__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.


RE: PHPMailer Pfad wird nicht gefunden - Gebby - 23.08.2022

(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.


RE: PHPMailer Pfad wird nicht gefunden - Arne Drews - 23.08.2022

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.