Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 class BaseException extends Exception
00014 {
00015 public function __toString()
00016 {
00017 return
00018 "[$this->message] in: \n".
00019 $this->getTraceAsString();
00020 }
00021 }
00022
00031 function __autoload($classname)
00032 {
00033 static $path = null;
00034 static $checksum = null;
00035 static $included = array();
00036
00037 if (strpos($classname, "\0") !== false) {
00038
00039 return;
00040 }
00041
00042 $currentPath = get_include_path();
00043
00044 if ($currentPath != $path) {
00045 $checksum = crc32($currentPath.ONPHP_VERSION);
00046 $path = $currentPath;
00047 }
00048
00049 $cacheFile = ONPHP_CLASS_CACHE.$checksum.'.occ';
00050
00051 if (!isset($included[$cacheFile])) {
00052 try {
00053 include $cacheFile;
00054 $included[$cacheFile] = true;
00055 } catch (BaseException $e) {
00056
00057 }
00058 }
00059
00060 if (!class_exists($classname)) {
00061 static $pid = null;
00062
00063 if (!$pid) {
00064 $pid = getmypid();
00065
00066 register_shutdown_function('__autoload_cleanup');
00067 }
00068
00069 try {
00070 $classPath = null;
00071
00072 foreach (
00073 explode(PATH_SEPARATOR, get_include_path())
00074 as $directory
00075 ) {
00076 $location = $directory.'/'.$classname.EXT_CLASS;
00077
00078 if (is_readable($location)) {
00079 $classPath = $location;
00080 break;
00081 }
00082 }
00083
00084 if (!$classPath)
00085 throw new BaseException('failed to find requested class');
00086
00087 $class = file_get_contents($classPath);
00088
00089 eval('?>'.$class);
00090 } catch (BaseException $e) {
00091 return __autoload_failed($classname, $e->getMessage());
00092 }
00093
00094 file_put_contents($cacheFile.'-'.$pid, $class, FILE_APPEND);
00095
00096 $included[$cacheFile] = true;
00097 }
00098 }
00099
00100 function __autoload_cleanup()
00101 {
00102 $pid = getmypid();
00103
00104 if ($paths = glob(ONPHP_CLASS_CACHE.'*-'.$pid, GLOB_NOSORT)) {
00105 foreach ($paths as $file) {
00106 rename($file, ONPHP_CLASS_CACHE.basename($file, '-'.$pid));
00107 }
00108 }
00109 }
00110 ?>