Temat: file_exists i APC
Sprawdziłem i musisz :) Zresztą to by było dziwne gdybyś dał require lub include do nieistniejącego pliku i nie wywołałoby to błędu, mój testowy autoloader:
namespace dmf;
const DIR_ROOT = 'c:\Projekty\DMFramework\www-example';
const DIR_SHARED = 'c:\Projekty\DMFramework\dmf-shared-dir';
const DIR_LOCAL = 'c:\Projekty\DMFramework\www-example\dmf-local-dir';
const URL_ROOT = 'http://dmf.dom';
const URLS_ROOT = 'http://dmf.dom';
const DOMAIN_WWW = 'dmf.dom';
// Temporary/debug
ini_set("log_errors", true);
ini_set("error_log", \dmf\DIR_ROOT.'/error-log.txt');
ini_set("log_errors_max_len", 5000);
/**
* Autoloader PSR0 compatible, see: http://groups.google.com/group/php-standards/web/psr-0-final-proposal
*/
class Autoloader
{
/**
* Class name to file name converter.
*
* @param string $className
* @return string
*/
public static function &getFilename($className)
{
$className = ltrim($className, '\\');
$fileName = '';
$namespace = '';
if ($lastNsPos = strripos($className, '\\'))
{
$namespace = substr($className, 0, $lastNsPos);
$className = substr($className, $lastNsPos + 1);
$fileName = str_replace('\\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR;
}
$fileName .= str_replace('_', DIRECTORY_SEPARATOR, $className) . '.php';
return $fileName;
}
/**
* Load class from local dir.
*
* @param string $className
* @return boolean - true: success
*/
public static function autoloadLocal($className)
{
if (!\file_exists( \dmf\DIR_LOCAL.'/class/'.\dmf\Autoloader::getFilename($className))) return false;
try
{
require \dmf\DIR_LOCAL.'/class/'.\dmf\Autoloader::getFilename($className);
}
catch (Exception $e) { \trigger_error($e->getMessage()); }
return true;
}
/**
* Load class from shared dir.
*
* @param string $className
* @return boolean - true: success
*/
public static function autoloadShared($className)
{
require_once \dmf\DIR_SHARED.'/class/'.\dmf\Autoloader::getFilename($className);
return true;
}
}
////////////
// Registering autoloaders
\spl_autoload_register('\dmf\Autoloader::autoloadLocal');
\spl_autoload_register('\dmf\Autoloader::autoloadShared');
I teraz jak sobie wkleisz ten kod do edytora: i zlikwidujesz linię numer 52, to próba załadowania nieistniejącej klasy z lokalnego katalogu zakończy się "fatal error" i błędem HTTP 500.
Tomasz Zadora edytował(a) ten post dnia 16.07.11 o godzinie 15:41