[ Index ]
 

Code source de Typo3 4.1.3

Accédez au Source d'autres logiciels libres

Classes | Fonctions | Variables | Constantes | Tables

title

Body

[fermer]

/t3lib/ -> class.t3lib_timetrack.php (source)

   1  <?php
   2  /***************************************************************
   3  *  Copyright notice
   4  *
   5  *  (c) 1999-2006 Kasper Skaarhoj (kasperYYYY@typo3.com)
   6  *  All rights reserved
   7  *
   8  *  This script is part of the TYPO3 project. The TYPO3 project is
   9  *  free software; you can redistribute it and/or modify
  10  *  it under the terms of the GNU General Public License as published by
  11  *  the Free Software Foundation; either version 2 of the License, or
  12  *  (at your option) any later version.
  13  *
  14  *  The GNU General Public License can be found at
  15  *  http://www.gnu.org/copyleft/gpl.html.
  16  *  A copy is found in the textfile GPL.txt and important notices to the license
  17  *  from the author is found in LICENSE.txt distributed with these scripts.
  18  *
  19  *
  20  *  This script is distributed in the hope that it will be useful,
  21  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  22  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  23  *  GNU General Public License for more details.
  24  *
  25  *  This copyright notice MUST APPEAR in all copies of the script!
  26  ***************************************************************/
  27  /**
  28  * Contains class with time tracking functions
  29  *
  30  * $Id: class.t3lib_timetrack.php 1611 2006-07-07 19:27:05Z mundaun $
  31  * Revised for TYPO3 3.6 July/2003 by Kasper Skaarhoj
  32  * XHTML compliant
  33  *
  34  * @author  Kasper Skaarhoj <kasperYYYY@typo3.com>
  35  */
  36  /**
  37   * [CLASS/FUNCTION INDEX of SCRIPT]
  38   *
  39   *
  40   *
  41   *   88: class t3lib_timeTrack
  42   *
  43   *              SECTION: Logging parsing times in the scripts
  44   *  144:     function start()
  45   *  164:     function push($tslabel, $value='')
  46   *  189:     function pull($content='')
  47   *  207:     function setTSlogMessage($content,$num=0)
  48   *  221:     function setTSselectQuery($query,$msg)
  49   *  234:     function incStackPointer()
  50   *  245:     function decStackPointer()
  51   *  255:     function mtime()
  52   *  265:     function convertMicrotime($microtime)
  53   *
  54   *              SECTION: Printing the parsing time information (for Admin Panel)
  55   *  298:     function printTSlog()
  56   *  447:     function fixContent(&$arr, $content, $depthData='', $first=0, $vKey='')
  57   *  511:     function fixCLen($c,$v)
  58   *  527:     function fw($str)
  59   *  541:     function createHierarchyArray(&$arr,$pointer,$uniqueId)
  60   *  561:     function debug_typo3PrintError($header,$text,$js,$baseUrl='')
  61   *
  62   * TOTAL FUNCTIONS: 15
  63   * (This index is automatically created/updated by the extension "extdeveval")
  64   *
  65   */
  66  
  67  
  68  
  69  
  70  
  71  
  72  
  73  
  74  
  75  
  76  
  77  /**
  78   * Frontend Timetracking functions
  79   *
  80   * Is used to register how much time is used with operations in TypoScript
  81   * Used by index_ts
  82   *
  83   * @author  Kasper Skaarhoj <kasperYYYY@typo3.com>
  84   * @package TYPO3
  85   * @subpackage t3lib
  86   * @see t3lib_tsfeBeUserAuth, tslib_fe, tslib_cObj, TSpagegen
  87   */
  88  class t3lib_timeTrack {
  89      var $starttime = 0;             // Is loaded with the millisecond time when this object is created
  90  
  91      var $LR = 1;                    // Log Rendering flag. If set, ->push() and ->pull() is called from the cObj->cObjGetSingle(). This determines whether or not the TypoScript parsing activity is logged. But it also slows down the rendering
  92      var $printConf=array(
  93          'showParentKeys' => 1,
  94          'contentLength' => 10000,       // Determines max lenght of displayed content before it gets cropped.
  95          'contentLength_FILE' => 400,    // Determines max lenght of displayed content FROM FILE cObjects before it gets cropped. Reason is that most FILE cObjects are huge and often used as template-code.
  96          'flag_tree' => 1,
  97          'flag_messages' => 1,
  98          'flag_queries' => 0,
  99          'flag_content' => 0,
 100          'allTime' => 0,
 101          'keyLgd' => 40,
 102          'factor' => 10,
 103          'col' => '#D9D5C9'
 104      );
 105  
 106      var $wrapError =array(
 107          0 => array('',''),
 108          1 => array('<b>','</b>'),
 109          2 => array('<b><font color="#ff6600">','</font></b>'),
 110          3 => array('<b><font color="#ff0000">','</font></b>')
 111      );
 112      var $wrapIcon =array(
 113          0 => '',
 114          1 => '<img src="typo3/gfx/icon_note.gif" width="18" height="16" align="absmiddle" alt="" />',
 115          2 => '<img src="typo3/gfx/icon_warning.gif" width="18" height="16" align="absmiddle" alt="" />',
 116          3 => '<img src="typo3/gfx/icon_fatalerror.gif" width="18" height="16" align="absmiddle" alt="" />'
 117      );
 118  
 119      var $uniqueCounter=0;
 120      var $tsStack = array(array());
 121      var $tsStackLevel = 0;
 122      var $tsStackLevelMax=array();
 123      var $tsStackLog = array();
 124      var $tsStackPointer=0;
 125      var $currentHashPointer=array();
 126  
 127  
 128  
 129  
 130  
 131  
 132      /*******************************************
 133      *
 134      * Logging parsing times in the scripts
 135      *
 136      *******************************************/
 137  
 138      /**
 139       * Constructor
 140       * Sets the starting time
 141       *
 142       * @return    void
 143       */
 144  	function start()    {
 145          $this->wrapIcon =array(
 146              0 => '',
 147              1 => '<img src="'.TYPO3_mainDir.'gfx/icon_note.gif" width="18" height="16" align="absmiddle" alt="" />',
 148              2 => '<img src="'.TYPO3_mainDir.'gfx/icon_warning.gif" width="18" height="16" align="absmiddle" alt="" />',
 149              3 => '<img src="'.TYPO3_mainDir.'gfx/icon_fatalerror.gif" width="18" height="16" align="absmiddle" alt="" />'
 150          );
 151  
 152          $this->starttime=0;
 153          $this->starttime=$this->mtime();
 154      }
 155  
 156      /**
 157       * Pushes an element to the TypoScript tracking array
 158       *
 159       * @param    string        Label string for the entry, eg. TypoScript property name
 160       * @param    string        Additional value(?)
 161       * @return    void
 162       * @see tslib_cObj::cObjGetSingle(), pull()
 163       */
 164  	function push($tslabel, $value='')  {
 165          array_push($this->tsStack[$this->tsStackPointer], $tslabel);
 166          array_push($this->currentHashPointer, 'timetracker_'.$this->uniqueCounter++);
 167  
 168          $this->tsStackLevel++;
 169          $this->tsStackLevelMax[] = $this->tsStackLevel;
 170  
 171              // setTSlog
 172          $k = end($this->currentHashPointer);
 173          $this->tsStackLog[$k] = array(
 174              'level' => $this->tsStackLevel,
 175              'tsStack' => $this->tsStack,
 176              'value' => $value,
 177              'starttime' => microtime(),
 178              'stackPointer' => $this->tsStackPointer
 179          );
 180      }
 181  
 182      /**
 183       * Pulls an element from the TypoScript tracking array
 184       *
 185       * @param    string        The content string generated within the push/pull part.
 186       * @return    void
 187       * @see tslib_cObj::cObjGetSingle(), push()
 188       */
 189  	function pull($content='')  {
 190          $k = end($this->currentHashPointer);
 191          $this->tsStackLog[$k]['endtime'] =  microtime();
 192          $this->tsStackLog[$k]['content'] = $content;
 193  
 194          $this->tsStackLevel--;
 195          array_pop($this->tsStack[$this->tsStackPointer]);
 196          array_pop($this->currentHashPointer);
 197      }
 198  
 199      /**
 200       * Logs the TypoScript entry
 201       *
 202       * @param    string        The message string
 203       * @param    integer        Message type: 0: information, 1: message, 2: warning, 3: error
 204       * @return    void
 205       * @see tslib_cObj::CONTENT()
 206       */
 207  	function setTSlogMessage($content,$num=0)   {
 208          end($this->currentHashPointer);
 209          $k = current($this->currentHashPointer);
 210  
 211          $this->tsStackLog[$k]['message'][] = $this->wrapIcon[$num].$this->wrapError[$num][0].htmlspecialchars($content).$this->wrapError[$num][1];
 212      }
 213  
 214      /**
 215       * Set TSselectQuery - for messages in TypoScript debugger.
 216       *
 217       * @param    string        Query string
 218       * @param    string        Message/Label to attach
 219       * @return    void
 220       */
 221  	function setTSselectQuery($query,$msg)  {
 222          end($this->currentHashPointer);
 223          $k = current($this->currentHashPointer);
 224  
 225          $this->tsStackLog[$k]['selectQuery'][] = array('query'=>$query,'msg'=>$msg);
 226      }
 227  
 228      /**
 229       * Increases the stack pointer
 230       *
 231       * @return    void
 232       * @see decStackPointer(), TSpagegen::renderContent(), tslib_cObj::cObjGetSingle()
 233       */
 234  	function incStackPointer()  {
 235          $this->tsStackPointer++;
 236          $this->tsStack[$this->tsStackPointer]=array();
 237      }
 238  
 239      /**
 240       * Decreases the stack pointer
 241       *
 242       * @return    void
 243       * @see incStackPointer(), TSpagegen::renderContent(), tslib_cObj::cObjGetSingle()
 244       */
 245  	function decStackPointer()  {
 246          unset($this->tsStack[$this->tsStackPointer]);
 247          $this->tsStackPointer--;
 248      }
 249  
 250      /**
 251       * Returns the current time in milliseconds
 252       *
 253       * @return    integer
 254       */
 255  	function mtime()    {
 256          return $this->convertMicrotime(microtime())-$this->starttime;
 257      }
 258  
 259      /**
 260       * Returns microtime input to milliseconds
 261       *
 262       * @param    string        PHP microtime string
 263       * @return    integer
 264       */
 265  	function convertMicrotime($microtime)   {
 266          $parts = explode(' ',$microtime);
 267          return round(($parts[0]+$parts[1])*1000);
 268      }
 269  
 270  
 271  
 272  
 273  
 274  
 275  
 276  
 277  
 278  
 279  
 280  
 281  
 282  
 283  
 284  
 285  
 286      /*******************************************
 287      *
 288      * Printing the parsing time information (for Admin Panel)
 289      *
 290      *******************************************/
 291  
 292      /**
 293       * Print TypoScript parsing log
 294       *
 295       * @return    string        HTML table with the information about parsing times.
 296       * @see t3lib_tsfeBeUserAuth::extGetCategory_tsdebug()
 297       */
 298  	function printTSlog()   {
 299              // Calculate times and keys for the tsStackLog
 300          $preEndtime=0;
 301          foreach($this->tsStackLog as $uniqueId=>$data)    {
 302              $this->tsStackLog[$uniqueId]['endtime'] = $this->convertMicrotime($this->tsStackLog[$uniqueId]['endtime'])-$this->starttime;
 303              $this->tsStackLog[$uniqueId]['starttime'] = $this->convertMicrotime($this->tsStackLog[$uniqueId]['starttime'])-$this->starttime;
 304              $this->tsStackLog[$uniqueId]['deltatime'] = $this->tsStackLog[$uniqueId]['endtime']-$this->tsStackLog[$uniqueId]['starttime'];
 305              $this->tsStackLog[$uniqueId]['key'] = implode($this->tsStackLog[$uniqueId]['stackPointer']?'.':'/', end($data['tsStack']));
 306              $preEndtime = $this->tsStackLog[$uniqueId]['endtime'];
 307          }
 308  
 309              // Create hierarchical array of keys pointing to the stack
 310          $arr = array();
 311          reset($this->tsStackLog);
 312          while(list($uniqueId,$data)=each($this->tsStackLog))    {
 313              $this->createHierarchyArray($arr,$data['level'], $uniqueId);
 314          }
 315              // Parsing the registeret content and create icon-html for the tree
 316          $this->tsStackLog[$arr['0.'][0]]['content'] = $this->fixContent($arr['0.']['0.'], $this->tsStackLog[$arr['0.'][0]]['content'], '', 0, $arr['0.'][0]);
 317  
 318              // Displaying the tree:
 319          reset($this->tsStackLog);
 320          $out='<tr>
 321              <td bgcolor="#ABBBB4" align="center"><b>'.$this->fw('TypoScript Key').'</b></td>
 322              <td bgcolor="#ABBBB4" align="center"><b>'.$this->fw('Value').'</b></td>';
 323          if ($this->printConf['allTime'])    {
 324              $out.='
 325              <td bgcolor="#ABBBB4" align="center"><b>'.$this->fw('Time').'</b></td>
 326              <td bgcolor="#ABBBB4" align="center"><b>'.$this->fw('Own').'</b></td>
 327              <td bgcolor="#ABBBB4" align="center"><b>'.$this->fw('Sub').'</b></td>
 328              <td bgcolor="#ABBBB4" align="center"><b>'.$this->fw('Total').'</b></td>';
 329          } else {
 330              $out.='
 331              <td bgcolor="#ABBBB4" align="center"><b>'.$this->fw('Own').'</b></td>';
 332          }
 333  
 334          $out.='
 335              <td bgcolor="#ABBBB4" align="center"><b>'.$this->fw('Details').'</b></td>
 336              </tr>';
 337  
 338  
 339  
 340          $flag_tree=$this->printConf['flag_tree'];
 341          $flag_messages=$this->printConf['flag_messages'];
 342          $flag_content=$this->printConf['flag_content'];
 343          $flag_queries=$this->printConf['flag_queries'];
 344          $keyLgd=$this->printConf['keyLgd'];
 345          $factor=$this->printConf['factor'];
 346          $col=$this->printConf['col'];
 347  
 348          $c=0;
 349          while(list($uniqueId,$data)=each($this->tsStackLog))    {
 350              $bgColor = ' bgcolor="'.($c%2 ? t3lib_div::modifyHTMLColor($col,$factor,$factor,$factor) : $col).'"';
 351              $item='';
 352              if (!$c)    {   // If first...
 353                  $data['icons']='';
 354                  $data['key']= 'Script Start';
 355                  $data['value'] = '';
 356              }
 357  
 358  
 359                  // key label:
 360              $keyLabel='';
 361              if (!$flag_tree && $data['stackPointer'])   {
 362                  $temp=array();
 363                  reset($data['tsStack']);
 364                  while(list($k,$v)=each($data['tsStack']))   {
 365                      $temp[]=t3lib_div::fixed_lgd_pre(implode($v,$k?'.':'/'),$keyLgd);
 366                  }
 367                  array_pop($temp);
 368                  $temp = array_reverse($temp);
 369                  array_pop($temp);
 370                  if (count($temp))   {
 371                      $keyLabel='<br /><font color="#999999">'.implode($temp,'<br />').'</font>';
 372                  }
 373              }
 374              if ($flag_tree)    {
 375                  $tmp = t3lib_div::trimExplode('.',$data['key'],1);
 376                  $theLabel = end($tmp);
 377              } else {
 378                  $theLabel = $data['key'];
 379              }
 380              $theLabel = t3lib_div::fixed_lgd_pre($theLabel, $keyLgd);
 381              $theLabel = $data['stackPointer'] ? '<font color="maroon">'.$theLabel.'</font>' : $theLabel;
 382              $keyLabel=$theLabel.$keyLabel;
 383              $item.='<td valign="top" nowrap="nowrap"'.$bgColor.'>'.($flag_tree?$data['icons']:'').$this->fw($keyLabel).'</td>';
 384  
 385                  // key value:
 386              $keyValue=$data['value'];
 387              $item.='<td valign="top" nowrap="nowrap"'.$bgColor.'>'.$this->fw(htmlspecialchars($keyValue)).'</td>';
 388  
 389              if ($this->printConf['allTime'])    {
 390                      // deltatime:
 391                  $item.='<td valign="top" align="right" nowrap="nowrap"'.$bgColor.'>'.$this->fw($data['starttime']).'</td>';
 392                  $item.='<td valign="top" align="right" nowrap="nowrap"'.$bgColor.'>'.$this->fw($data['owntime']).'</td>';
 393                  $item.='<td valign="top" align="right" nowrap="nowrap"'.$bgColor.'>'.$this->fw($data['subtime'] ? '+'.$data['subtime'] : '').'</td>';
 394                  $item.='<td valign="top" align="right" nowrap="nowrap"'.$bgColor.'>'.$this->fw($data['subtime'] ? '='.$data['deltatime'] : '').'</td>';
 395              } else {
 396                      // deltatime:
 397                  $item.='<td valign="top" align="right" nowrap="nowrap"'.$bgColor.'>'.$this->fw($data['owntime']).'</td>';
 398              }
 399  
 400  
 401                  // messages:
 402              $msgArr=array();
 403              $msg='';
 404              if ($flag_messages && is_array($data['message']))   {
 405                  reset($data['message']);
 406                  while(list(,$v)=each($data['message'])) {
 407                      $msgArr[]=nl2br($v);
 408                  }
 409              }
 410              if ($flag_queries && is_array($data['selectQuery']))    {
 411                  reset($data['selectQuery']);
 412                  while(list(,$v)=each($data['selectQuery'])) {
 413                      $res = $GLOBALS['TYPO3_DB']->sql_query('EXPLAIN '.$v['query']);
 414                      $v['mysql_error'] = $GLOBALS['TYPO3_DB']->sql_error();
 415                      if (!$GLOBALS['TYPO3_DB']->sql_error()) {
 416                          while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))   {
 417                              $v['explain'][]=$row;
 418                          }
 419                      }
 420                      $msgArr[]=t3lib_div::view_array($v);
 421                  }
 422              }
 423              if ($flag_content && strcmp($data['content'],''))   {
 424                  $msgArr[]='<font color="#000066">'.nl2br($data['content']).'</font>';
 425              }
 426              if (count($msgArr)) {
 427                  $msg=implode($msgArr,'<hr />');
 428              }
 429              $item.='<td valign="top"'.$bgColor.'>'.$this->fw($msg).'</td>';
 430              $out.='<tr>'.$item.'</tr>';
 431              $c++;
 432          }
 433          $out='<table border="0" cellpadding="0" cellspacing="0">'.$out.'</table>';
 434          return $out;
 435      }
 436  
 437      /**
 438       * Recursively generates the content to display
 439       *
 440       * @param    array        Array which is modified with content. Reference
 441       * @param    string        Current content string for the level
 442       * @param    string        Prefixed icons for new PM icons
 443       * @param    boolean        Set this for the first call from outside.
 444       * @param    string        Seems to be the previous tsStackLog key
 445       * @return    string        Returns the $content string generated/modified. Also the $arr array is modified!
 446       */
 447  	function fixContent(&$arr, $content, $depthData='', $first=0, $vKey='') {
 448          $ac=0;
 449          $c=0;
 450              // First, find number of entries
 451          reset($arr);
 452          while(list($k,$v)=each($arr))   {
 453              if (t3lib_div::testInt($k)) {
 454                  $ac++;
 455              }
 456          }
 457              // Traverse through entries
 458          $subtime=0;
 459          reset($arr);
 460          while(list($k,$v)=each($arr))   {
 461              if (t3lib_div::testInt($k)) {
 462                  $c++;
 463  
 464                  $deeper = is_array($arr[$k.'.']) ? 1 : 0;
 465                  $PM = 'join';
 466                  $LN = ($ac==$c)?'blank':'line';
 467                  $BTM = ($ac==$c)?'bottom':'';
 468                  $PM = is_array($arr[$k.'.']) ? ($deeper ? 'minus':'plus') : 'join';
 469                  $this->tsStackLog[$v]['icons']=$depthData.($first?'':'<img src="'.TYPO3_mainDir.'gfx/ol/'.$PM.$BTM.'.gif" width="18" height="16" align="top" border="0" alt="" />');
 470  
 471                  if (strlen($this->tsStackLog[$v]['content']))   {
 472                      $content = str_replace($this->tsStackLog[$v]['content'],$v, $content);
 473                  }
 474                  if (is_array($arr[$k.'.'])) {
 475                      $this->tsStackLog[$v]['content'] = $this->fixContent($arr[$k.'.'], $this->tsStackLog[$v]['content'], $depthData.($first?'':'<img src="'.TYPO3_mainDir.'gfx/ol/'.$LN.'.gif" width="18" height="16" align="top" border="0" alt="" />'), 0, $v);
 476                  } else {
 477                      $this->tsStackLog[$v]['content'] = $this->fixCLen($this->tsStackLog[$v]['content'], $this->tsStackLog[$v]['value']);
 478                      $this->tsStackLog[$v]['subtime']='';
 479                      $this->tsStackLog[$v]['owntime']=$this->tsStackLog[$v]['deltatime'];
 480                  }
 481                  $subtime+=$this->tsStackLog[$v]['deltatime'];
 482              }
 483          }
 484              // Set content with special chars
 485          if (isset($this->tsStackLog[$vKey]))    {
 486              $this->tsStackLog[$vKey]['subtime']=$subtime;
 487              $this->tsStackLog[$vKey]['owntime']=$this->tsStackLog[$vKey]['deltatime']-$subtime;
 488          }
 489          $content=$this->fixCLen($content, $this->tsStackLog[$vKey]['value']);
 490  
 491              // Traverse array again, this time substitute the unique hash with the red key
 492          reset($arr);
 493          while(list($k,$v)=each($arr))   {
 494              if (t3lib_div::testInt($k)) {
 495                  if (strlen($this->tsStackLog[$v]['content']))   {
 496                      $content = str_replace($v, '<font color="red"><b>['.$this->tsStackLog[$v]['key'].']</b></font>', $content);
 497                  }
 498              }
 499          }
 500              // return the content
 501          return $content;
 502      }
 503  
 504      /**
 505       * Wraps the input content string in green colored font-tags IF the length o fthe input string exceeds $this->printConf['contentLength'] (or $this->printConf['contentLength_FILE'] if $v == "FILE"
 506       *
 507       * @param    string        The content string
 508       * @param    string        Command: If "FILE" then $this->printConf['contentLength_FILE'] is used for content length comparison, otherwise $this->printConf['contentLength']
 509       * @return    string
 510       */
 511  	function fixCLen($c,$v) {
 512          $len = $v=='FILE'?$this->printConf['contentLength_FILE']:$this->printConf['contentLength'];
 513          if (strlen($c)>$len)    {
 514              $c='<font color="green">'.htmlspecialchars(t3lib_div::fixed_lgd($c,$len)).'</font>';
 515          } else {
 516              $c=htmlspecialchars($c);
 517          }
 518          return $c;
 519      }
 520  
 521      /**
 522       * Wraps input string in a <font> tag with verdana, black and size 1
 523       *
 524       * @param    string        The string to be wrapped
 525       * @return    string
 526       */
 527      function fw($str)   {
 528          return '<font face="verdana" color="black" size="1" style="color:black;">'.$str.'&nbsp;</font>';
 529      }
 530  
 531      /**
 532       * Helper function for internal data manipulation
 533       *
 534       * @param    array        Array (passed by reference) and modified
 535       * @param    integer        Pointer value
 536       * @param    string        Unique ID string
 537       * @return    void
 538       * @access private
 539       * @see printTSlog()
 540       */
 541  	function createHierarchyArray(&$arr,$pointer,$uniqueId) {
 542          if (!is_array($arr))    $arr=array();
 543          if ($pointer>0) {
 544              end($arr);
 545              $k=key($arr);
 546              $this->createHierarchyArray($arr[intval($k).'.'],$pointer-1,$uniqueId);
 547          } else {
 548              $arr[] = $uniqueId;
 549          }
 550      }
 551  
 552      /**
 553       * This prints out a TYPO3 error message.
 554       *
 555       * @param    string        Header string
 556       * @param    string        Message string
 557       * @param    boolean        If set, then this will produce a alert() line for inclusion in JavaScript.
 558       * @param    string        URL for the <base> tag (if you want it)
 559       * @return    string
 560       */
 561  	function debug_typo3PrintError($header,$text,$js,$baseUrl='')   {
 562          if ($js)    {
 563              echo"alert('".t3lib_div::slashJS($header."\n".$text)."');";
 564          } else {
 565              echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
 566                      "http://www.w3.org/TR/xhtml1/DTD/xhtml11.dtd">
 567                  <?xml version="1.0" encoding="utf-8"?>
 568                  <html>
 569                      <head>
 570                          '.($baseUrl ? '<base href="'.htmlspecialchars($baseUrl).'" />' : '').'
 571                          <title>Error!</title>
 572                          <style type="text/css"><!--/*--><![CDATA[/*><!--*/
 573                              body { font-family: verdana,arial,helvetica; font-size: 90%; text-align: center; background-color: #ffffff; }
 574                              h1 { font-size: 1.2em; margin: 0 0 1em 0; }
 575                              p { margin: 0; text-align: left; }
 576                              img { border: 0; margin: 10px 0; }
 577                              div.center div { margin: 0 auto; }
 578                              .errorBox { width: 400px; padding: 0.5em; border: 1px solid black; background-color: #F4F0E8; }
 579                          /*]]>*/--></style>
 580                      </head>
 581                      <body>
 582                          <div class="center">
 583                              <img src="'.TYPO3_mainDir.'gfx/typo3logo.gif" width="123" height="34" alt="" />
 584                              <div class="errorBox">
 585                                  <h1>'.$header.'</h1>
 586                                  <p>'.$text.'</p>
 587                              </div>
 588                          </div>
 589                      </body>
 590                  </html>';
 591          }
 592      }
 593  }
 594  ?>


Généré le : Sun Nov 25 17:13:16 2007 par Balluche grâce à PHPXref 0.7
  Clicky Web Analytics