PHP swiftmailer autoloader funktioniert nicht

Ich versuche zu verwenden, swiftmailer zum senden von Transaktions-E-Mails, aber ich bekomme immer die folgende Fehlermeldung in Email.php wenn ich versuche zu erstellen swiftmailer Objekte:

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 die, ich eingeschlossen, Komponisten und swiftmailer ist Autoloadern (separat), so sollten die Klassen. Ich habe einen eigene autoloader hat, die aber, wenn ich auch swiftmailer der autoloader direkt, auch wenn mein autoloader nicht die Klassen, die include-Anweisung ausgelöst werden soll und finden Sie genau?
Kann ich es auf der Arbeit, wenn ich auch jede Klasse einzeln, aber das ist nicht sehr praktisch.

Dies 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 dies hat nichts mit dem problem zu tun oder nicht (ich bin nach einem tutorial, und ich habe noch nicht ganz verstanden, dass dieser Teil des Codes noch nicht), also lasse ich es hier:

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ögliche Duplikate von Fehler beim open stream : Keine solche Datei oder Verzeichnis
  • Haben Sie eigentlich SwiftMailer installiert ? es erscheint nicht in Ihrer Verzeichnis-Struktur
  • Ja, ich habe es installiert mit dem Komponisten. Der swiftmailer-Ordner in meinem Ordner classes. Es hat 2 Dateien (Komponist.json und die composer.Sperre), sowie die ‚Anbieter‘ – Ordner (der hat zwei Verzeichnisse, Komponist und swiftmailer, und die autoload.php Datei). PHP zeigten keine Fehler versucht, die Dateien…
  • habe meine Antwort Ihr problem lösen ?
  • Sorry für die Verspätung! Leider Nein :/ Es ist in der Tat ein SmtpTransport.php Datei in einem Ordner namens „Swift“, so der name der Datei kann nicht falsch sein. Auch, anfangs habe ich mir kopiert, den Pfad der Datei, habe versucht, einschließlich manuell und es hat funktioniert, aber dann gab es eine weitere „wrong filename/fehlende Verzeichnis‘ Fehler in Bezug auf eine andere Klasse. Ich wollte zu enthalten, dass die Klasse‘ Datei manuell auch, aber ich konnte das nicht tun das gleiche für alle anderen Dateien, denn es ist nicht effizient…
  • Ich verwende PHPMailer im moment, weil ich war in der Lage, mit Ihren autoloader, aber ich bin immer noch neugierig, warum ich diese Probleme mit dem SwiftMailer.. ps: das kommentieren doppelt, weil die Zeichen “ limit

InformationsquelleAutor Acla | 2016-06-05



One Reply
  1. 0

    Wenn es in der Tat eine SmtpTransport.php Datei in den richtigen Ordner, es scheint, dass der Fehler genau ist, was es sagt, es ist : eine falsche Datei-Namen.

    Ersetzen Sie

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

    durch

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

    Sollten Sie auch composer autoload-Datei (die autoload-Datei im vendor)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.