Search code examples
phppearautoloader

Odd PHP Class autoloader Behavior - PEAR Related


I have a strange problem I can't figure out. I'm using PEAR to send mail from a PHP page. The Send_Mail class is working (sending mail using SMTP), but I'm getting this strange warning associated with my autoloader.

Warning: include(classes/LOGIN.php) 
[<a href='function.include'>function.include</a>]: 
failed to open stream: No such file or directory in 
C:\xampp\htdocs\mysite\initialize.php on line 46`

In my initialize.php file, I have this:

function autoloader($class) {
    include 'classes/' . $class . '.php';
}

spl_autoload_register('autoloader');

And in my header.php file I am loading several PHP classes for the site:

// autoload PHP classes for site
autoloader('Navigation');
autoloader('Validation');

The error referes to a LOGIN class which I don't have. But I searched my entire site folder, including php and found these two lines in C:\xampp\php\PEAR\Net\SMTP.php:

/* These standard authentication methods are always available. */
$this->setAuthMethod('LOGIN', array($this, '_authLogin'), false);
$this->setAuthMethod('PLAIN', array($this, '_authPlain'), false);

When I comment out the line containing LOGIN I get the same warning but for PLAIN and when I comment out both lines, the warnings go away (but then SMTP authentication fails).

Why is this happening?

UPDATE

Here is my new autoloader:

function autoloader($class) {

    if (file_exists('classes' . $class . '.php')) {
        include 'classes' . $class . '.php'; 
    }
}

When I echo 'classes' . $class . '.php', though, I get this:

classes/.php

And then if I change it back to not use the file_exists it works, but the echo still shows classes/.php


Solution

  • I reverted back to a simple autoloader and things seem to be working fine:

    function autoloader($class) {
        include 'classes/' . $class . '.php';
    }
    
    spl_autoload_register('autoloader');
    

    Thanks for suggestions.