mirror of
https://github.com/phpbb/phpbb.git
synced 2025-02-24 03:54:10 +01:00
129 lines
3.0 KiB
PHP
129 lines
3.0 KiB
PHP
<?php
|
|
/**
|
|
*
|
|
* @package phpBB3
|
|
* @copyright (c) 2005 phpBB Group
|
|
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
|
|
*
|
|
*/
|
|
|
|
/**
|
|
* @ignore
|
|
*/
|
|
if (!defined('IN_PHPBB'))
|
|
{
|
|
exit;
|
|
}
|
|
|
|
stream_filter_register('phpbb_template', 'phpbb_template_filter');
|
|
|
|
/**
|
|
* Extension of template class - Functions needed for compiling templates only.
|
|
*
|
|
* @package phpBB3
|
|
* @uses template_filter As a PHP stream filter to perform compilation of templates
|
|
*/
|
|
class phpbb_template_compile
|
|
{
|
|
/**
|
|
* Array of parameters to forward to template filter
|
|
*
|
|
* @var array
|
|
*/
|
|
private $filter_params;
|
|
|
|
/**
|
|
* Constructor.
|
|
*
|
|
* @param bool @allow_php Whether PHP code will be allowed in templates (inline PHP code, PHP tag and INCLUDEPHP tag)
|
|
* @param phpbb_style_resource_locator $locator Resource locator
|
|
* @param string $phpbb_root_path Path to phpBB root directory
|
|
*/
|
|
public function __construct($allow_php, $locator, $phpbb_root_path)
|
|
{
|
|
$this->filter_params = array(
|
|
'allow_php' => $allow_php,
|
|
'locator' => $locator,
|
|
'phpbb_root_path' => $phpbb_root_path
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Compiles template in $source_file and writes compiled template to
|
|
* cache directory
|
|
*
|
|
* @param string $handle Template handle to compile
|
|
* @param string $source_file Source template file
|
|
* @return bool Return true on success otherwise false
|
|
*/
|
|
public function compile_file_to_file($source_file, $compiled_file)
|
|
{
|
|
$source_handle = @fopen($source_file, 'rb');
|
|
$destination_handle = @fopen($compiled_file, 'wb');
|
|
|
|
if (!$source_handle || !$destination_handle)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
@flock($destination_handle, LOCK_EX);
|
|
|
|
$this->compile_stream_to_stream($source_handle, $destination_handle);
|
|
|
|
@fclose($source_handle);
|
|
@flock($destination_handle, LOCK_UN);
|
|
@fclose($destination_handle);
|
|
|
|
phpbb_chmod($compiled_file, CHMOD_READ | CHMOD_WRITE);
|
|
|
|
clearstatcache();
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Compiles a template located at $source_file.
|
|
*
|
|
* Returns PHP source suitable for eval().
|
|
*
|
|
* @param string $source_file Source template file
|
|
* @return string|bool Return compiled code on successful compilation otherwise false
|
|
*/
|
|
public function compile_file($source_file)
|
|
{
|
|
$source_handle = @fopen($source_file, 'rb');
|
|
$destination_handle = @fopen('php://temp' ,'r+b');
|
|
|
|
if (!$source_handle || !$destination_handle)
|
|
{
|
|
return false;
|
|
}
|
|
|
|
$this->compile_stream_to_stream($source_handle, $destination_handle);
|
|
|
|
@fclose($source_handle);
|
|
|
|
rewind($destination_handle);
|
|
$contents = stream_get_contents($destination_handle);
|
|
@fclose($dest_handle);
|
|
|
|
return $contents;
|
|
}
|
|
|
|
/**
|
|
* Compiles contents of $source_stream into $dest_stream.
|
|
*
|
|
* A stream filter is appended to $source_stream as part of the
|
|
* process.
|
|
*
|
|
* @param resource $source_stream Source stream
|
|
* @param resource $dest_stream Destination stream
|
|
* @return void
|
|
*/
|
|
private function compile_stream_to_stream($source_stream, $dest_stream)
|
|
{
|
|
stream_filter_append($source_stream, 'phpbb_template', null, $this->filter_params);
|
|
stream_copy_to_stream($source_stream, $dest_stream);
|
|
}
|
|
}
|