Ich versuche Swiftmailer zu verwenden transaktionale E-Mails zu senden, aber ich bekomme immer die folgenden Fehler in email.php, wenn ich versuche, Swiftmailer der Objekte zu erstellen:PHP - Swiftmailer Autoloader nicht funktioniert
Warning: require_once(Swift/SmtpTransport.php): failed to open stream: No such file or directory in C:\xampp\htdocs\Tutorials\E-commerce\inc\autoload.php on line 13
Fatal error: require_once(): Failed opening required 'Swift/SmtpTransport.php' (include_path='C:\xampp\htdocs\Tutorials\E-commerce\classes;C:\xampp\htdocs\Tutorials\E-commerce\pages;C:\xampp\htdocs\Tutorials\E-commerce\mod;C:\xampp\htdocs\Tutorials\E-commerce\inc;C:\xampp\htdocs\Tutorials\E-commerce\template;C:\xampp\php\PEAR') in C:\xampp\htdocs\Tutorials\E-commerce\inc\autoload.php on line 13
Die Sache ist , Ich habe die Autoloader von Composer und Swiftmailer (separat) hinzugefügt, damit sie die Klassen finden kann. Ich habe einen benutzerdefinierten Autoloader, aber wenn ich den Autoloader von swiftmailer direkt einschließe, selbst wenn mein Autoloader die Klassen nicht findet, sollte die Include-Anweisung ausgelöst werden und sie richtig finden? Ich kann es zur Arbeit bringen, wenn ich jede Klasse einzeln einschließen, aber das ist nicht sehr praktisch.
Das ist mein dirs Struktur:
index.php
inc
config.php
autoload.php
classes
SwiftMailer
vendor
composer.json
composer.lock
Url.php
Core.php
Email.php
Login.php
etc
pages
login.php
basket.php
etc
etc
email.php:
<?php
// I tried including them separately (also, php has no problem in finding them):
require_once 'SwiftMailer/vendor/autoload.php';
require_once 'SwiftMailer/vendor/swiftmailer/swiftmailer/lib/swift_required.php';
class Email {
public function __construct() {
$this->objTransport = Swift_SmtpTransport::newInstance();
etc
autoload.php:
<?php
require_once('config.php');
function generic_autoloader($class_name) {
$class = explode("_", $class_name);
$path = implode('/', $class) . '.php';
require_once($path);
}
spl_autoload_register('generic_autoloader');
config.php:
It's a file where I define several constants (eg: classes directory, pages directory, root path..) and at the end I have this:
set_include_path(implode(PATH_SEPARATOR, array(
realpath(ROOT_PATH.DS.CLASSES_DIR),
realpath(ROOT_PATH.DS.PAGES_DIR),
realpath(ROOT_PATH.DS.MOD_DIR),
realpath(ROOT_PATH.DS.INC_DIR),
realpath(ROOT_PATH.DS.TEMPLATE_DIR),
get_include_path()
)));
Ich bin mir nicht sicher, ob das etwas mit dem Problem zu tun hat oder nicht (ich folge einem Tutorial und ich habe diesen Teil des Codes noch nicht verstanden), also werde ich es hier lassen:
index.php:
<?php
require_once('inc/autoload.php');
$core = new Core();
$core->run();
core.php:
<?php
class Core {
public function run() {
ob_start();
require_once(Url::getPage()); // Url::getPage just returns the path of the current page ($_GET['page'])
ob_get_flush();
}
}
Vielen Dank im Voraus!
Mögliches Duplikat [Fehlerhaft sollten beinhalten Strom öffnen: No such Datei oder Verzeichnis] (http://stackoverflow.com/questions/36577020/failed-to-open-stream-no-such-file-or-directory) –
Haben Sie tatsächlich SwiftMailer installiert? Es erscheint nicht in Ihrer Verzeichnisstruktur –
Ja, ich habe es mit Composer installiert. Der Ordner "swiftmailer" befindet sich in meinem Klassenordner. Es gibt dort 2 Dateien (composer.json und composer.lock), sowie den Ordner 'vendor' (der zwei Verzeichnisse hat, composer und swiftmailer und die Datei autoload.php). PHP zeigte keine Fehler beim Versuch, die Dateien einzuschließen ... – Acla