Я пытаюсь использовать SwiftMailer для отправки транзакционных сообщений электронной почты, но я всегда получаю следующее сообщение об ошибке в email.php, когда я пытаюсь создать объекты SwiftMailer в:PHP - SwiftMailer автозагрузчик не работает
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
Дело в том, , Я включил автозагрузчики композитора и swiftmailer (отдельно), поэтому он должен найти классы. У меня есть собственный автозагрузчик, но если я включу автозагрузчик swiftmailer напрямую, даже если мой автозагрузчик не найдет классы, оператор include должен быть запущен и найти их правильно? Я могу заставить его работать, если я включу каждый класс отдельно, но это не очень практично.
Это моя структура каталоги:
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()
)));
Я не уверен, что это имеет какое-либо отношение к проблеме или нет (я следую учебнику, и я еще не совсем понял эту часть кода), поэтому я оставлю его здесь:
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();
}
}
заранее спасибо!
Возможный дубликат [Не удалось открыть поток: Нет такого файл или каталог] (http://stackoverflow.com/questions/36577020/failed-to-open-stream-no-such-file-or-directory) –
Действительно ли вы установили SwiftMailer? он не отображается в вашей структуре каталогов –
Да, я установил его с помощью композитора. Папка swiftmailer находится внутри моей папки классов. В нем есть 2 файла (composer.json и composer.lock), а также папка «vendor» (которая имеет два каталога, композитор и swiftmailer и файл autoload.php). PHP не показал ошибок, пытаясь включить файлы ... – Acla