我正在尝试使用swiftmailer发送交易电子邮件,但是当我尝试创建swiftmailer的对象时,我总是在Email.php中收到以下错误:
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()
)));
我不确定这是否与问题有关(我正在学习教程,我还没有完全理解这部分代码),所以我会把它留在这里:< / p>
的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();
}
}
提前致谢!
答案 0 :(得分:0)
如果右侧文件夹中确实存在SmtpTransport.php文件,则错误似乎正是它所说的错误:文件名错误。
你应该替换
$this->objTransport = Swift_SmtpTransport::newInstance();
通过
$this->objTransport = SwiftMailer_SmtpTransport::newInstance();
您还应该包含作曲家的自动加载文件(供应商内部的自动加载文件)