public function prepare()
    {
        // clear just in case settings changed and cache is out of date
        $this->externalMacroTemplatesCache = array();

        // find the template source file and update function name
        $this->setCodeFile();

        if (!function_exists($this->getFunctionName())) {
            // parse template if php generated code does not exists or template
            // source file modified since last generation or force reparse is set
            if ($this->getForceReparse() || !file_exists($this->getCodePath())) {

                // i'm not sure where that belongs, but not in normal path of execution
                // because some sites have _a lot_ of files in temp
                if ($this->getCachePurgeFrequency() && mt_rand()%$this->getCachePurgeFrequency() == 0) {
                    $this->cleanUpGarbage();
                }

                $result = $this->parse();

                if (!file_put_contents($this->getCodePath(), $result)) {
                    throw new PHPTAL_IOException('Unable to open '.$this->getCodePath().' for writing');
                }

                // the awesome thing about eval() is that parse errors don't stop PHP.
                // when PHP dies during eval, fatal error is printed and
                // can be captured with output buffering
                ob_start();
                try {
                    eval("?>\n".$result);
                }
                catch(ParseError $parseError) {
                    ob_end_clean();
                    throw new PHPTAL_TemplateException(
                        'Parse error: ' . $parseError->getMessage(),
                        $this->getCodePath(),
                        $parseError->getLine(),
                        $parseError
                    );
                }
                catch(Exception $e) {
                    ob_end_clean();
                    throw $e;
                }

                if (!function_exists($this->getFunctionName())) {
                    $msg = str_replace('eval()\'d code', $this->getCodePath(), ob_get_clean());

                    // greedy .* ensures last match
                    if (preg_match('/.*on line (\d+)$/m', $msg, $m)) $line=$m[1]; else $line=0;
                    throw new PHPTAL_TemplateException(trim($msg), $this->getCodePath(), $line);
                }
                ob_end_clean();

            } else {
                // eval trick is used only on first run,
                // just in case it causes any problems with opcode accelerators
                require $this->getCodePath();
            }
        }

        $this->_prepared = true;
        return $this;
    }
public function prepare()
    {
        // clear just in case settings changed and cache is out of date
        $this->externalMacroTemplatesCache = array();

        // find the template source file and update function name
        $this->setCodeFile();

        if (!function_exists($this->getFunctionName())) {
            // parse template if php generated code does not exists or template
            // source file modified since last generation or force reparse is set
            if ($this->getForceReparse() || !file_exists($this->getCodePath())) {

                // i'm not sure where that belongs, but not in normal path of execution
                // because some sites have _a lot_ of files in temp
                if ($this->getCachePurgeFrequency() && mt_rand()%$this->getCachePurgeFrequency() == 0) {
                    $this->cleanUpGarbage();
                }

                $result = $this->parse();

                if (!file_put_contents($this->getCodePath(), $result)) {
                    throw new PHPTAL_IOException('Unable to open '.$this->getCodePath().' for writing');
                }

                // the awesome thing about eval() is that parse errors don't stop PHP.
                // when PHP dies during eval, fatal error is printed and
                // can be captured with output buffering
                ob_start();
                try {
                    eval("?>\n".$result);
                }
                catch(ParseError $parseError) {
                    ob_end_clean();
                    throw new PHPTAL_TemplateException(
                        'Parse error: ' . $parseError->getMessage(),
                        $this->getCodePath(),
                        $parseError->getLine(),
                        $parseError
                    );
                }
                catch(Exception $e) {
                    ob_end_clean();
                    throw $e;
                }

                if (!function_exists($this->getFunctionName())) {
                    $msg = str_replace('eval()\'d code', $this->getCodePath(), ob_get_clean());

                    // greedy .* ensures last match
                    if (preg_match('/.*on line (\d+)$/m', $msg, $m)) $line=$m[1]; else $line=0;
                    throw new PHPTAL_TemplateException(trim($msg), $this->getCodePath(), $line);
                }
                ob_end_clean();

            } else {
                // eval trick is used only on first run,
                // just in case it causes any problems with opcode accelerators
                require $this->getCodePath();
            }
        }

        $this->_prepared = true;
        return $this;
    }
public function prepare ( ) { // clear just in case settings changed and cache is out of date $ this -> externalMacroTemplatesCache = array ( ) ; // find the template source file and update function name $ this -> setCodeFile ( ) ; if ( ! function_exists ( $ this -> getFunctionName ( ) ) ) { // parse template if php generated code does not exists or template // source file modified since last generation or force reparse is set if ( $ this -> getForceReparse ( ) || ! file_exists ( $ this -> getCodePath ( ) ) ) { // i'm not sure where that belongs, but not in normal path of execution // because some sites have _a lot_ of files in temp if ( $ this -> getCachePurgeFrequency ( ) && mt_rand ( ) % $ this -> getCachePurgeFrequency ( ) == 0 ) { $ this -> cleanUpGarbage ( ) ; } $ result = $ this -> parse ( ) ; if ( ! file_put_contents ( $ this -> getCodePath ( ) , $ result ) ) { throw new PHPTAL_IOException ( 'Unable to open ' . $ this -> getCodePath ( ) . ' for writing' ) ; } // the awesome thing about eval() is that parse errors don't stop PHP. // when PHP dies during eval, fatal error is printed and // can be captured with output buffering ob_start ( ) ; try { eval ( "?>\n" . $ result ) ; } catch ( ParseError $ parseError ) { ob_end_clean ( ) ; throw new PHPTAL_TemplateException ( 'Parse error: ' . $ parseError -> getMessage ( ) , $ this -> getCodePath ( ) , $ parseError -> getLine ( ) , $ parseError ) ; } catch ( Exception $ e ) { ob_end_clean ( ) ; throw $ e ; } if ( ! function_exists ( $ this -> getFunctionName ( ) ) ) { $ msg = str_replace ( 'eval()\'d code' , $ this -> getCodePath ( ) , ob_get_clean ( ) ) ; // greedy .* ensures last match if ( preg_match ( '/.*on line (\d+)$/m' , $ msg , $ m ) ) $ line = $ m [ 1 ] ; else $ line = 0 ; throw new PHPTAL_TemplateException ( trim ( $ msg ) , $ this -> getCodePath ( ) , $ line ) ; } ob_end_clean ( ) ; } else { // eval trick is used only on first run, // just in case it causes any problems with opcode accelerators require $ this -> getCodePath ( ) ; } } $ this -> _prepared = true ; return $ this ; }
Prepare template without executing it.
Prepare template without executing it .