mirror of
				https://github.com/smarty-php/smarty.git
				synced 2025-11-04 06:11:37 +01:00 
			
		
		
		
	
		
			
	
	
		
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
		
		
			
		
	
	
			48 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| 
								 | 
							
								<?php
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								* Smarty write file plugin
							 | 
						||
| 
								 | 
							
								* 
							 | 
						||
| 
								 | 
							
								* @package Smarty
							 | 
						||
| 
								 | 
							
								* @subpackage PluginsInternal
							 | 
						||
| 
								 | 
							
								* @author Monte Ohrt 
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								/**
							 | 
						||
| 
								 | 
							
								* Smarty Internal Write File Class
							 | 
						||
| 
								 | 
							
								*/
							 | 
						||
| 
								 | 
							
								class Smarty_Internal_Write_File extends Smarty_Internal_Base {
							 | 
						||
| 
								 | 
							
								    /**
							 | 
						||
| 
								 | 
							
								    * Writes file in a save way to disk
							 | 
						||
| 
								 | 
							
								    * 
							 | 
						||
| 
								 | 
							
								    * @param string $_filepath complete filepath
							 | 
						||
| 
								 | 
							
								    * @param string $_contents file content
							 | 
						||
| 
								 | 
							
								    * @return boolean true
							 | 
						||
| 
								 | 
							
								    */
							 | 
						||
| 
								 | 
							
								    public function writeFile($_filepath, $_contents)
							 | 
						||
| 
								 | 
							
								    {
							 | 
						||
| 
								 | 
							
								        $_dirpath = dirname($_filepath); 
							 | 
						||
| 
								 | 
							
								        // if subdirs, create dir structure
							 | 
						||
| 
								 | 
							
								        if ($_dirpath !== '.' && !file_exists($_dirpath)) {
							 | 
						||
| 
								 | 
							
								            mkdir($_dirpath, 0755, true);
							 | 
						||
| 
								 | 
							
								        } 
							 | 
						||
| 
								 | 
							
								        // write to tmp file, then move to overt file lock race condition
							 | 
						||
| 
								 | 
							
								        $_tmp_file = tempnam($_dirpath, 'wrt');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        if (!file_put_contents($_tmp_file, $_contents)) {
							 | 
						||
| 
								 | 
							
								            throw new Exception("unable to write file {$_tmp_file}");
							 | 
						||
| 
								 | 
							
								            return false;
							 | 
						||
| 
								 | 
							
								        } 
							 | 
						||
| 
								 | 
							
								        // remove original file
							 | 
						||
| 
								 | 
							
								        if (file_exists($_filepath))
							 | 
						||
| 
								 | 
							
								            unlink($_filepath); 
							 | 
						||
| 
								 | 
							
								        // rename tmp file
							 | 
						||
| 
								 | 
							
								        rename($_tmp_file, $_filepath); 
							 | 
						||
| 
								 | 
							
								        // set file permissions
							 | 
						||
| 
								 | 
							
								        chmod($_filepath, 0644);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								        return true;
							 | 
						||
| 
								 | 
							
								    } 
							 | 
						||
| 
								 | 
							
								} 
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								?>
							 |