|  | Posted by Paul on 04/02/07 13:54 
"Steve" <no.one@example.com> wrote in message news:ttaPh.10$EN4.8@newsfe12.lga...
 >
 > "Paul" <lof@invalid.com> wrote in message
 > news:8h9Ph.28132$Wc.13392@bignews3.bellsouth.net...
 > |I am taking over an existing app and having trouble understanding their
 > | references.
 > |
 > | They have encapsulated Pear packages in the directory structure like:
 > | /site
 > | /site/html/Pear.php
 > | /site/html/Sigma.php
 > | /site/html/Common.php
 > | /site/html/Quickform.php
 > | /site/html/Quickform/
 > | /site/Mail/mail.php
 > | /pages/page1.php
 > |
 > | At the top of /site/html/Quickform.php they put:
 > |    ini_set('include_path','.:..');
 > |    ...
 > |    require_once('HTML/Common.php');
 >
 > dude paul, i could have sworn i gave you a fix for this! just edit the php
 > ini file. you need to create a file called 'relative.path.php'. and put it
 > in your php include path (that you are soon to quick fucking around with
 > using ini_set). that file has this code in it:
 >
 > <?
 > $parsedUri        = dirname($_SERVER['PHP_SELF']);
 > $parsedUri       .= substr($parsedUri, -1) != '/' ? '/' : '';
 > $relativeUri      = str_replace('/', '', $parsedUri);
 > $relativePath     = strlen($parsedUri) - strlen($relativeUri) - 1;
 > if ($relativePath < 0){ $relativePath = 0; }
 > $relativePath     = str_repeat('../', $relativePath);
 > if (!$relativePath){ $relativePath = './'; }
 > ?>
 >
 > then i'd put this at the beginning of *EVERY* php file your site has:
 >
 > <?
 > require_once 'relative.path.php';
 > ?>
 >
 > i'd remove every instance of ini_set('include_path', '.:..') that i saw.
 > that is a horrible way to get the desired effect and the programmer should
 > summarily be drawn and quartered. this method requires that the file
 > *always* be a relative distance for what you're including. it could also
 > severly fuck up a script that includes another and then tries to include
 > another...because each is setting the include_path! further, it doesn't
 > allow you to reuse the known relativity to call other folders for
 > inclusion
 > like classes, common functions, whatever. this scenario requires *all*
 > includes to be in one folder. not very flexible, is it!
 >
 > you'll notice that 'relative.path.php' creates a variable called
 > $relativePath. you'll also notice that it is compatible with all versions
 > of
 > php...such that you can use it on a server that runs both php 4 or php 5.
 > the variable points to the root of your web application. once you know
 > that,
 > you can merrily jump about. anyway, your code would become:
 >
 > <?
 > require_once 'relative.path.php';
 > require_once $relativePath . 'HTML/Common.php';
 > ?>
 >
 > now it doesn't matter where your script is put in your directory
 > structure.
 > as it is, your code doesn't work because ini_set('include_path','.:..')
 > isn't setting a valid path. the best solution would be to further abstract
 > your directory structure. here's what i put at the top of *EVERY* script
 > of
 > my own:
 >
 > <?
 > $pageTitle        = "Welcome";
 > $fullHeader       = true;
 > $securityEnabled  = true;
 > require_once 'relative.path.php';
 > require_once $relativePath . 'site.cfg.php';
 > require_once site::$includeDirectory . 'head.inc.php';
 > ?>
 >
 > notice the use of the static site::$includeDirectory interface?
 > 'site.cfg.php' configures the path. if i had a common header that should
 > be
 > shown on a page (as i have in the above ficticious page), i could now
 > include it no matter where either the header nor the including page
 > existed.
 > get the idea?
 >
 > i have a configuration script called 'site.cfg.php'. it sets paths into
 > variables. so, when you implement the site, you can put your files all
 > over
 > the gawd damned place and manage it all in one spot. the rest of your
 > scripts couldn't care less how crazy you go. they reference variables.
 > here's my site.cfg.php script:
 >
 > <?
 > ini_set('display_errors'      ,     true                  );
 > ini_set('error_reporting'     ,     E_ALL & E_ERROR & E_WARNING   );
 > ini_set('max_execution_time'  ,     0                     );
 > ini_set('memory_limit'        ,     '100M'                );
 >
 > session_start();
 >
 > // site basic information
 >
 > $rootDirectory              = '/var/www/html/dev/';
 >
 > require_once $rootDirectory . 'classes/site.class.php';
 >
 > site::initialize();
 >
 > site::$rootDirectory        = $rootDirectory;
 > site::$uri                  = 'http'    . ($securityEnabled ? 's' : '') .
 > '://' . $_SERVER['HTTP_HOST'];
 > site::$uri                  = 'http://' . $_SERVER['HTTP_HOST'] . '/';
 > site::$uploadBaseDirectory  = site::$rootDirectory . 'data/';
 > site::$mailDropDirectory    = site::$rootDirectory . 'data/mail/';
 > site::$adminEmail           = Web Site Administrator
 > <no.one@example.com>';
 >
 > site::$title                = 'SAMPLE WEB SITE;
 > site::$description          = 'A SIMPLE PROVING GROUND';
 >
 > site::$currentPage          = basename($_SERVER['PHP_SELF']);
 >
 > site::$classDirectory       = site::$rootDirectory . 'classes/';
 > site::$cssDirectory         = site::$uri . 'css/';
 > site::$host                 = 'tccc';
 > site::$errorLogFile         = site::$rootDirectory . site::$host .
 > '.errors.log';
 > site::$fontDirectory        = '/var/www/fonts/';
 > site::$homePage             = site::$uri . 'index.php';
 > site::$htdocsDirectory      = site::$rootDirectory;
 > site::$imagesDirectory      = site::$uri . 'images/';
 > site::$includeDirectory     = site::$rootDirectory . 'inc/';
 > site::$jscriptDirectory     = site::$uri . 'jscript/';
 > site::$logo                 = site::$imagesDirectory . 'logo.jpg';
 > site::$popUpAttributes      = 'addressbar=0, channelmode=0, dependent=1,
 > directories=0, fullscreen=0, location=0, menubar=0, resizable=1, status=0,
 > titlebar=0, toolbar=0';
 >
 > // common php functionality
 >
 > require_once site::$includeDirectory . 'functions.inc.php';
 >
 > // source code security (disables 'view source' from right-click)
 >
 > $enableContextMenu = true;
 >
 > // site database information
 >
 > require_once site::$classDirectory . 'db.class.php';
 > try
 > {
 >  db::connect('localhost', 'user', 'password', 'db');
 > } catch (exception $ex) {
 >  print "<pre>\r\n" . $ex->getMessage() . "\r\n" .
 >        ' in file ' . $ex->getFile()    . "\r\n" .
 >        ' on line ' . $ex->getLine()    . "\r\n" .
 >        '</pre>';
 > }
 >
 > // site notifcations
 >
 > $emailNotify['TO']  = site::$adminEmail;
 > $emailNotify['CC']  = site::$adminEmail;
 > $emailNotify['BCC'] = '';
 >
 > // get relative font sizes for the browser
 >
 > require_once site::$classDirectory . 'browser.class.php';
 >
 > $browser      = browser::getInstance();
 > $sessionFonts = $browser->getFonts();
 >
 > // user interaction
 >
 > require_once site::$classDirectory . 'user.class.php';
 >
 > $logOut = isset($_REQUEST['logOut']);
 >
 > if ($logOut)
 > {
 >  user::reset();
 >  session_unset();
 >  session_destroy();
 >  header('location:' . site::$uri);
 >  exit;
 > }
 > ?>
 >
 > i'm using php 5, so if you are using a prior version, just adjust the
 > static
 > interfaces on the site class appropriately. don't know what i mean? post
 > that as another question here. here is my site object:
 >
 > <?
 > class site
 > {
 >  public static $adminEmail           = '';
 >  public static $classDirectory       = '';
 >  public static $cssDirectory         = '';
 >  public static $currentPage          = '';
 >  public static $description          = '';
 >  public static $errorLogFile         = '';
 >  public static $fontDirectory        = '';
 >  public static $homePage             = '';
 >  public static $host                 = '';
 >  public static $htdocsDirectory      = '';
 >  public static $imagesDirectory      = '';
 >  public static $includeDirectory     = '';
 >  public static $jscriptDirectory     = '';
 >  public static $lastSecurityCode     = '';
 >  public static $logo                 = '';
 >  public static $mailDropDirectory    = '';
 >  public static $popUpAttributes      = '';
 >  public static $rootDirectory        = '';
 >  public static $securityCode         = '';
 >  public static $title                = '';
 >  public static $uploadBaseDirectory  = '';
 >  public static $uri                  = '';
 >
 >  private function __clone(){}
 >
 >  private function __construct(){}
 >
 >  private static function getSecurityCode()
 >  {
 >    $alphabet           = '2347ACEFHJKLMNPRTWXYZ'; // removed those that
 > look too similar
 >    $alphabetLength     = strlen($alphabet) - 1;
 >    self::$securityCode = '';
 >    for ($i = 0; $i < 6; $i++)
 >    {
 >      self::$securityCode .= $alphabet[mt_rand(0, $alphabetLength)];
 >    }
 >    $_SESSION['securityCode'] = self::$securityCode;
 >    if (!self::$lastSecurityCode){ self::$lastSecurityCode =
 > self::$securityCode; }
 >  }
 >
 >  public static function initialize()
 >  {
 >    self::$lastSecurityCode = $_SESSION['securityCode'];
 >    self::getSecurityCode();
 >  }
 > }
 > ?>
 >
 > the other classes mentioned in the site.cfg.php are one's that i won't get
 > in to. i included this one so you could see how i set my important paths
 > and
 > how easy this all is to maintain. it is light-weight, manageable,
 > scaleable,
 > and highly flexible.
 >
 > hth,
 >
 > me
 
 Steve:
 
 Can I just put 'relative.path.php' in php.ini for the auto_prepend_file?
 That would save a lot of time.
  Navigation: [Reply to this message] |