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); } }