Question

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.

Was it helpful?

Solution 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.

OTHER TIPS

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.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top