コード例 #1
0
 function save($file_name = false, $use_backup = false, $suffix = false, $use_override = false, $only_modified = false)
 {
     $line_separator = sys::line_separator();
     $path_array = array();
     if ($file_name === false) {
         $file_name = $this->file_name;
     }
     $path_array[] = $this->root_dir;
     if ($use_override) {
         $path_array[] = 'override';
     }
     if (is_string($use_override) && $use_override == 'append') {
         $file_name .= '.append';
     }
     if ($suffix !== false) {
         $file_name .= $suffix;
     }
     $originalfile_name = $file_name;
     $backupfile_name = $originalfile_name . sys::backup_filename();
     $file_name .= '.tmp';
     $file_path = dir::path(array_merge($path_array, $file_name));
     $original_file_path = dir::path(array_merge($path_array, $originalfile_name));
     $backup_file_path = dir::path(array_merge($path_array, $backupfile_name));
     $fp = @fopen($file_path, 'w+');
     if (!$fp) {
         debug::write_error("Failed opening file '{$file_path}' for writing", __FILE__ . ' : ' . __LINE__ . ' : ' . __FUNCTION__);
         return false;
     }
     $write_ok = true;
     $written = fwrite($fp, "<?php /* #?ini charset=\"" . $this->charset . "\"?{$line_separator}{$line_separator}");
     if ($written === false) {
         $write_ok = false;
     }
     $i = 0;
     if ($write_ok) {
         foreach (array_keys($this->block_values) as $block_name) {
             if ($only_modified) {
                 $group_has_modified = false;
                 if (isset($this->modified_block_values[$block_name])) {
                     foreach ($this->modified_block_values[$block_name] as $modified_value) {
                         if ($modified_value) {
                             $group_has_modified = true;
                         }
                     }
                 }
                 if (!$group_has_modified) {
                     continue;
                 }
             }
             $written = 0;
             if ($i > 0) {
                 $written = fwrite($fp, "{$line_separator}");
             }
             if ($written === false) {
                 $write_ok = false;
                 break;
             }
             $written = fwrite($fp, "[{$block_name}]{$line_separator}");
             if ($written === false) {
                 $write_ok = false;
                 break;
             }
             foreach (array_keys($this->block_values[$block_name]) as $block_var) {
                 if ($only_modified) {
                     if (!isset($this->modified_block_values[$block_name][$block_var]) || !$this->modified_block_values[$block_name][$block_var]) {
                         continue;
                     }
                 }
                 $var_key = $block_var;
                 $var_value = $this->block_values[$block_name][$block_var];
                 if (is_array($var_value)) {
                     if (count($var_value) > 0) {
                         foreach ($var_value as $var_array_key => $var_array_value) {
                             if (is_string($var_array_key)) {
                                 $written = fwrite($fp, "{$var_key}" . "[{$var_array_key}]={$var_array_value}{$line_separator}");
                             } else {
                                 $written = fwrite($fp, "{$var_key}" . "[]={$var_array_value}{$line_separator}");
                             }
                             if ($written === false) {
                                 break;
                             }
                         }
                     } else {
                         $written = fwrite($fp, "{$var_key}" . "[]{$line_separator}");
                     }
                 } else {
                     $written = fwrite($fp, "{$var_key}={$var_value}{$line_separator}");
                 }
                 if ($written === false) {
                     $write_ok = false;
                     break;
                 }
             }
             if (!$write_ok) {
                 break;
             }
             ++$i;
         }
     }
     if ($write_ok) {
         $written = fwrite($fp, "*/ ?>");
         if ($written === false) {
             $write_ok = false;
         }
     }
     @fclose($fp);
     if (!$write_ok) {
         unlink($file_path);
         return false;
     }
     if (file_exists($backup_file_path)) {
         unlink($backup_file_path);
     }
     if ($use_backup && file_exists($original_file_path)) {
         if (!rename($original_file_path, $backup_file_path)) {
             return false;
         }
     }
     unlink($original_file_path);
     if (!rename($file_path, $original_file_path)) {
         if ($use_backup) {
             rename($backup_file_path, $original_file_path);
         }
         return false;
     }
     return true;
 }
コード例 #2
0
 function test_path()
 {
 	$this->assertEqual(dir :: path(array('test')), 'test');
 	$this->assertEqual(dir :: path(array('test', 'wow')), 'test' . dir :: separator() . 'wow');
 	$this->assertEqual(dir :: path(array('test', 'wow/')), 'test' . dir :: separator() . 'wow');
 	
 	$this->assertEqual(dir :: path(array('test'), true), 'test' . dir :: separator());
 	$this->assertEqual(dir :: path(array('test', 'wow'), true), 'test' . dir :: separator() . 'wow' . dir :: separator());
 }