2016-06-05 16 views
0

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!

+0

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) –

+0

Haben Sie tatsächlich SwiftMailer installiert? Es erscheint nicht in Ihrer Verzeichnisstruktur –

+0

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

Antwort

0

Wenn es tatsächlich eine SmtpTransport.php Datei im richtigen Ordner gibt, scheint es, dass der Fehler genau das ist, was er sagt: ein falscher Dateiname.

Sie

ersetzen sollten
$this->objTransport = Swift_SmtpTransport::newInstance(); 

von

$this->objTransport = SwiftMailer_SmtpTransport::newInstance(); 

Sie auch Komponisten Autoload-Datei (die Autoload-Datei innerhalb Lieferanten)

Verwandte Themen