Verzeichnisstruktur phpBB-3.3.15


Veröffentlicht
28.08.2024

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

config.php

Zuletzt modifiziert: 02.04.2025, 15:02 - Dateigröße: 10.92 KiB


001  <?php
002  /**
003   *
004   * This file is part of the phpBB Forum Software package.
005   *
006   * @copyright (c) phpBB Limited <https://www.phpbb.com>
007   * @license GNU General Public License, version 2 (GPL-2.0)
008   *
009   * For full copyright and license information, please see
010   * the docs/CREDITS.txt file.
011   *
012   */
013   
014  namespace phpbb\install\helper;
015   
016  use phpbb\install\exception\installer_config_not_writable_exception;
017   
018  /**
019   * Stores common settings and installation status
020   */
021  class config
022  {
023      /**
024       * @var \phpbb\filesystem\filesystem_interface
025       */
026      protected $filesystem;
027   
028      /**
029       * Array which contains config settings for the installer
030       *
031       * The array will also store all the user input, as well as any
032       * data that is passed to other tasks by a task.
033       *
034       * @var array
035       */
036      protected $installer_config;
037   
038      /**
039       * @var string
040       */
041      protected $install_config_file;
042   
043      /**
044       * @var \bantu\IniGetWrapper\IniGetWrapper
045       */
046      protected $php_ini;
047   
048      /**
049       * @var string
050       */
051      protected $phpbb_root_path;
052   
053      /**
054       * Array containing progress information
055       *
056       * @var array
057       */
058      protected $progress_data;
059   
060      /**
061       * Array containing system information
062       *
063       * The array contains run time and memory limitations.
064       *
065       * @var array
066       */
067      protected $system_data;
068   
069      /**
070       * Array containing navigation bar information
071       *
072       * @var array
073       */
074      protected $navigation_data;
075   
076      /**
077       * Flag indicating that config file should be cleaned up
078       *
079       * @var bool
080       */
081      protected $do_clean_up;
082   
083      /**
084       * Constructor
085       */
086      public function __construct(\phpbb\filesystem\filesystem_interface $filesystem, \bantu\IniGetWrapper\IniGetWrapper $php_ini, $phpbb_root_path)
087      {
088          $this->filesystem        = $filesystem;
089          $this->php_ini            = $php_ini;
090          $this->phpbb_root_path    = $phpbb_root_path;
091          $this->do_clean_up        = false;
092   
093          // Set up data arrays
094          $this->navigation_data    = array();
095          $this->installer_config    = array();
096          $this->system_data        = array();
097          $this->progress_data    = array(
098              'last_task_module_name'        => '', // Stores the service name of the latest finished module
099              'last_task_module_index'    => 0, // Stores the index of the latest finished module
100              'last_task_index'            => 0, // Stores the index of the latest finished task
101              'max_task_progress'            => 0,
102              'current_task_progress'        => 0,
103              '_restart_points'            => array(),
104              'use_restart_point'            => false,
105          );
106   
107          $this->install_config_file = $this->phpbb_root_path . 'store/install_config.php';
108   
109          $this->setup_system_data();
110      }
111   
112      /**
113       * Returns data for a specified parameter
114       *
115       * @param    string    $param_name    Name of the parameter to return
116       * @param    mixed    $default    Default value to return when the specified data
117       *                                 does not exist.
118       *
119       * @return     mixed    value of the specified parameter or the default value if the data
120       *                     cannot be recovered.
121       */
122      public function get($param_name, $default = false)
123      {
124          return (isset($this->installer_config[$param_name])) ? $this->installer_config[$param_name] : $default;
125      }
126   
127      /**
128       * Sets a parameter in installer_config
129       *
130       * @param    string    $param_name    Name of the parameter
131       * @param    mixed    $value        Values to set the parameter
132       */
133      public function set($param_name, $value)
134      {
135          $this->installer_config = array_merge($this->installer_config, array(
136              $param_name => $value,
137          ));
138      }
139   
140      /**
141       * Returns system parameter
142       *
143       * @param string    $param_name    Name of the parameter
144       *
145       * @return mixed    Returns system parameter if it is defined, false otherwise
146       */
147      public function system_get($param_name)
148      {
149          return (isset($this->system_data[$param_name])) ? $this->system_data[$param_name] : false;
150      }
151   
152      /**
153       * Returns remaining time until the run time limit
154       *
155       * @return int    Remaining time until the run time limit in seconds
156       */
157      public function get_time_remaining()
158      {
159          if ($this->system_data['max_execution_time'] <= 0)
160          {
161              return PHP_INT_MAX;
162          }
163   
164          return ($this->system_data['start_time'] + $this->system_data['max_execution_time']) - microtime(true);
165      }
166   
167      /**
168       * Returns remaining memory available for PHP
169       *
170       * @return int    Remaining memory until reaching the limit
171       */
172      public function get_memory_remaining()
173      {
174          if ($this->system_data['memory_limit'] <= 0)
175          {
176              return 1;
177          }
178   
179          if (function_exists('memory_get_usage'))
180          {
181              return ($this->system_data['memory_limit'] - memory_get_usage());
182          }
183   
184          // If we cannot get the information then just return a positive number (and cross fingers)
185          return 1;
186      }
187   
188      /**
189       * Saves the latest executed task
190       *
191       * @param int    $task_service_index    Index of the installer task service in the module
192       */
193      public function set_finished_task($task_service_index)
194      {
195          $this->progress_data['last_task_index']    = $task_service_index;
196      }
197   
198      /**
199       * Set active module
200       *
201       * @param string    $module_service_name    Name of the installer module service
202       * @param int        $module_service_index    Index of the installer module service
203       */
204      public function set_active_module($module_service_name, $module_service_index)
205      {
206          $this->progress_data['last_task_module_name']    = $module_service_name;
207          $this->progress_data['last_task_module_index']    = $module_service_index;
208      }
209   
210      /**
211       * Getter for progress data
212       *
213       * @return array
214       */
215      public function get_progress_data()
216      {
217          return $this->progress_data;
218      }
219   
220      /**
221       * Recovers install configuration from file
222       */
223      public function load_config()
224      {
225          if (!$this->filesystem->exists($this->install_config_file))
226          {
227              return;
228          }
229   
230          $file_content = @file_get_contents($this->install_config_file);
231          $serialized_data = trim(substr($file_content, 8));
232   
233          $installer_config = array();
234          $progress_data = array();
235          $navigation_data = array();
236   
237          if (!empty($serialized_data))
238          {
239              $unserialized_data = json_decode($serialized_data, true);
240   
241              $installer_config = (is_array($unserialized_data['installer_config'])) ? $unserialized_data['installer_config'] : array();
242              $progress_data = (is_array($unserialized_data['progress_data'])) ? $unserialized_data['progress_data'] : array();
243              $navigation_data = (is_array($unserialized_data['navigation_data'])) ? $unserialized_data['navigation_data'] : array();
244          }
245   
246          $this->installer_config = array_merge($this->installer_config, $installer_config);
247          $this->progress_data = array_merge($this->progress_data, $progress_data);
248          $this->navigation_data = array_merge($this->navigation_data, $navigation_data);
249      }
250   
251      /**
252       * Creates a progress restart point
253       *
254       * Restart points can be used to repeat certain tasks periodically.
255       * You need to call this method from the first task you want to repeat.
256       *
257       * @param string    $name    Name of the restart point
258       */
259      public function create_progress_restart_point($name)
260      {
261          $tmp_progress_data = $this->progress_data;
262          unset($tmp_progress_data['_restart_points']);
263   
264          $this->progress_data['_restart_points'][$name] = $tmp_progress_data;
265      }
266   
267      /**
268       * Set restart point to continue from
269       *
270       * @param string    $name    Name of the restart point
271       *
272       * @return bool    Returns false if the restart point name does not exist, otherwise true
273       */
274      public function jump_to_restart_point($name)
275      {
276          if (!isset($this->progress_data['_restart_points'][$name]) || empty($this->progress_data['_restart_points'][$name]))
277          {
278              return false;
279          }
280   
281          foreach ($this->progress_data['_restart_points'][$name] as $key => $value)
282          {
283              $this->progress_data[$key] = $value;
284          }
285   
286          return true;
287      }
288   
289      /**
290       * Returns whether a restart point with a given name exists or not
291       *
292       * @param string    $name Name of the restart point
293       *
294       * @return bool
295       */
296      public function has_restart_point($name)
297      {
298          return isset($this->progress_data['_restart_points'][$name]);
299      }
300   
301      /**
302       * Dumps install configuration to disk
303       */
304      public function save_config()
305      {
306          if ($this->do_clean_up)
307          {
308              @unlink($this->install_config_file);
309              return;
310          }
311   
312          // Create array to save
313          $save_array = array(
314              'installer_config'    => $this->installer_config,
315              'progress_data'        => $this->progress_data,
316              'navigation_data'    => $this->navigation_data,
317          );
318   
319          // Create file content
320          $file_content = '<?php // ';
321          $file_content .= json_encode($save_array);
322          $file_content .= "\n";
323   
324          // Dump file_content to disk
325          $fp = @fopen($this->install_config_file, 'w');
326          if (!$fp)
327          {
328              throw new installer_config_not_writable_exception();
329          }
330   
331          fwrite($fp, $file_content);
332          fclose($fp);
333          // Enforce 0600 permission for install config
334          $this->filesystem->chmod([$this->install_config_file], 0600);
335      }
336   
337      /**
338       * Increments the task progress
339       *
340       * @param int    $increment_by    The amount to increment by
341       */
342      public function increment_current_task_progress($increment_by = 1)
343      {
344          $this->progress_data['current_task_progress'] += $increment_by;
345   
346          if ($this->progress_data['current_task_progress'] > $this->progress_data['max_task_progress'])
347          {
348              $this->progress_data['current_task_progress'] = $this->progress_data['max_task_progress'];
349          }
350      }
351   
352      /**
353       * Sets the task progress to a specific number
354       *
355       * @param int    $task_progress    The task progress number to be set
356       */
357      public function set_current_task_progress($task_progress)
358      {
359          $this->progress_data['current_task_progress'] = $task_progress;
360      }
361   
362      /**
363       * Sets the number of tasks belonging to the installer in the current mode.
364       *
365       * @param int    $task_progress_count    Number of tasks
366       */
367      public function set_task_progress_count($task_progress_count)
368      {
369          $this->progress_data['max_task_progress'] = $task_progress_count;
370      }
371   
372      /**
373       * Returns the number of the current task being executed
374       *
375       * @return int
376       */
377      public function get_current_task_progress()
378      {
379          return $this->progress_data['current_task_progress'];
380      }
381   
382      /**
383       * Returns the number of tasks belonging to the installer in the current mode.
384       *
385       * @return int
386       */
387      public function get_task_progress_count()
388      {
389          return $this->progress_data['max_task_progress'];
390      }
391   
392      /**
393       * Marks stage as completed in the navigation bar
394       *
395       * @param array    $nav_path    Array to the navigation elem
396       */
397      public function set_finished_navigation_stage($nav_path)
398      {
399          if (isset($this->navigation_data['finished']) && in_array($nav_path, $this->navigation_data['finished']))
400          {
401              return;
402          }
403   
404          $this->navigation_data['finished'][] = $nav_path;
405      }
406   
407      /**
408       * Marks stage as active in the navigation bar
409       *
410       * @param array    $nav_path    Array to the navigation elem
411       */
412      public function set_active_navigation_stage($nav_path)
413      {
414          $this->navigation_data['active'] = $nav_path;
415      }
416   
417      /**
418       * Returns navigation data
419       *
420       * @return array
421       */
422      public function get_navigation_data()
423      {
424          return $this->navigation_data;
425      }
426   
427      /**
428       * Removes install config file
429       */
430      public function clean_up_config_file()
431      {
432          $this->do_clean_up = true;
433          @unlink($this->install_config_file);
434      }
435   
436      /**
437       * Filling up system_data array
438       */
439      protected function setup_system_data()
440      {
441          // Query maximum runtime from php.ini
442          $execution_time = $this->php_ini->getNumeric('max_execution_time');
443          $execution_time = min(15, $execution_time / 2);
444          $this->system_data['max_execution_time'] = $execution_time;
445   
446          // Set start time
447          $this->system_data['start_time'] = microtime(true);
448   
449          // Get memory limit
450          $this->system_data['memory_limit'] = $this->php_ini->getBytes('memory_limit');
451      }
452  }
453