<?php
##
## loading dynamic library(shared object file, extension modules)
## san2(at)linuxchannel.net
## 2002.10.19
##
## $mod = array() or string(file path)
## example :
##   new ext_load('./4.2.3/mbstring.so');
##   or
##   new ext_load(array('4.2.3/mbstring.so','4.2.3/korean.so'));
##   or
##   new ext_load('/any/path/to/korean.so')
##

class ext_load
{
  function 
ext_load($mod$debug=0)
  {
    if(!
ini_get('enable_dl') || !$mod) {
        if(
$debug) echo 'can not use the dl() function';
        return 
0;
      }

    
$dir[e] = ini_get('extension_dir');
    
$dir[u] = dirname($_SERVER[PATH_TRANSLATED]).'/'// script file directory
    
$dir[ut] = preg_replace(';[^/]+;','..',$dir[u]);

    if(
preg_match(';^/;',$dir[e])) {
        
$dir[e] = preg_replace(';[^/]+;','..',$dir[e]);
    }
    else 
$dir[e] = '';

    if(
is_array($mod)) {
        foreach(
$mod AS $v) {
            
$file $this->get_file($dir,$v);
            
$this->to_load($file,$debug);
        }
      } else {
        
$file $this->get_file($dir,$mod);
        
$this->to_load($file,$debug);
    }
  }

  function 
get_file($dir$v)
  {
    if(
preg_match(';^/;',$v)) {
        if(!
$dir[e]) return $dir[ut] . $v;
        else return 
$dir[e] . $v;
    } else {
        if(!
$dir[e]) return $v;
        else return 
$dir[e] . $dir[u] . $v;
    }
  }

  function 
to_load($file$debug=0)
  {
    if(
is_file($file)) {
        
$ext str_replace('.so','',basename($file));
        if(!
extension_loaded($ext)) {
            @
dl($file);
            if(!
extension_loaded($ext)) {
                echo 
"to loading ${ext}.so : fail<BR>\n";
            } else if(
$debug) {
                echo 
"to loading ${ext}.so : loaded<BR>\n";
            }
        }
        else if(
$debug) echo "alredy, loaded ${ext}.so<BR>\n";
    }
    else if(
$debug) echo "not found $file<BR>\n";
  }
// end of class


/***
## example
##
$useto = array('calendar.so','dba.so','dio.so','ftp.so','gd.so','gettext.so',
    'mbstring.so','sockets.so','sysvsem.so','sysvshm.so','korean.so');
foreach($useto AS $v) $mod[] = $_SERVER[DOCUMENT_ROOT] . '/ext/' . PHP_VERSION .'/'.$v;

new ext_load($mod,1); // debuging mode
phpinfo();
***/

?>