문제

I am trying to use the SwiftMailer php library with a program that I wrote. I have been using the spl_autoload_register() function just fine before including this library. However, prior to using this library I was explicitly defining the class extensions and locations using the spl functions:

set_include_path(get_include_path().[my include path]);
spl_autoload_extensions('.class.php');
spl_autoload_register();
session_start();

The problem I'm running into, is that now I'm trying to use a library that does not follow along the same naming conventions. Their own autoload class (built by the initial call to the library) looks like this.

public static function autoload($class)
{
//Don't interfere with other autoloaders
if (0 !== strpos($class, 'Swift_'))
{
  return;
}

$path = dirname(__FILE__).'/'.str_replace('_', '/', $class).'.php';

if (!file_exists($path))
{
  return;
}

if (self::$initPath && !self::$initialized)
{
  self::$initialized = true;
  require self::$initPath;
}

require $path;

}

When I try to simply run the program after calling their class I get:

Fatal error: spl_autoload() [<a href='function.spl-autoload'>
function.spl-autoload</a>]:Class Swift_MailTransport could not
be loaded in [my file] on line 30 

Line 30:

 $transport = Swift_MailTransport::newInstance();

I have tried using a custom autoload class modeled after theirs, however, all I get when I try:

var_dump(spl_autoload_functions());

results:

bool(false);

I know this has to be a fairly simple issue, something that I'm overlooking, but I can't find it.

Any help would be greatly appreciated.

도움이 되었습니까?

해결책 2

Ok, after knocking my head against the wall all day and getting nowhere, I got a great piece of feedback from my brother who is also a programmer.

The whole problem, stemmed from this one line:

require_once(SITE_ROOT.'/classes/lib/swift_required.php');

The SITE_ROOT variable was actually referencing the web location (i.e. http://), with my current host, this does not work, it needs to use the physical file location instead. After making this change, the included autoloader works as advertised.

다른 팁

Try removing this:

spl_autoload_register();

From the documentation:

[if] spl_autoload_register() is called without any parameters then 
  [spl_autoload(...)] functions will be used

Knowing that, it's only logical to think that spl_autoload does not know where to load your SwiftMailer classes because the errors you get say so. It then follows that SwiftMailer is not in your include path because spl_autoload tries to load from there.

Next step is to put your SwiftMailer classes in one of the include paths.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top