Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

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

MockFileSessionStorage.php

Zuletzt modifiziert: 09.10.2024, 12:59 - Dateigröße: 3.27 KiB


 001  <?php
 002   
 003  /*
 004   * This file is part of the Symfony package.
 005   *
 006   * (c) Fabien Potencier <fabien@symfony.com>
 007   *
 008   * For the full copyright and license information, please view the LICENSE
 009   * file that was distributed with this source code.
 010   */
 011   
 012  namespace Symfony\Component\HttpFoundation\Session\Storage;
 013   
 014  /**
 015   * MockFileSessionStorage is used to mock sessions for
 016   * functional testing when done in a single PHP process.
 017   *
 018   * No PHP session is actually started since a session can be initialized
 019   * and shutdown only once per PHP execution cycle and this class does
 020   * not pollute any session related globals, including session_*() functions
 021   * or session.* PHP ini directives.
 022   *
 023   * @author Drak <drak@zikula.org>
 024   */
 025  class MockFileSessionStorage extends MockArraySessionStorage
 026  {
 027      /**
 028       * @var string
 029       */
 030      private $savePath;
 031   
 032      /**
 033       * Constructor.
 034       *
 035       * @param string      $savePath Path of directory to save session files.
 036       * @param string      $name     Session name.
 037       * @param MetadataBag $metaBag  MetadataBag instance.
 038       */
 039      public function __construct($savePath = null, $name = 'MOCKSESSID', MetadataBag $metaBag = null)
 040      {
 041          if (null === $savePath) {
 042              $savePath = sys_get_temp_dir();
 043          }
 044   
 045          if (!is_dir($savePath)) {
 046              mkdir($savePath, 0777, true);
 047          }
 048   
 049          $this->savePath = $savePath;
 050   
 051          parent::__construct($name, $metaBag);
 052      }
 053   
 054      /**
 055       * {@inheritdoc}
 056       */
 057      public function start()
 058      {
 059          if ($this->started) {
 060              return true;
 061          }
 062   
 063          if (!$this->id) {
 064              $this->id = $this->generateId();
 065          }
 066   
 067          $this->read();
 068   
 069          $this->started = true;
 070   
 071          return true;
 072      }
 073   
 074      /**
 075       * {@inheritdoc}
 076       */
 077      public function regenerate($destroy = false, $lifetime = null)
 078      {
 079          if (!$this->started) {
 080              $this->start();
 081          }
 082   
 083          if ($destroy) {
 084              $this->destroy();
 085          }
 086   
 087          return parent::regenerate($destroy, $lifetime);
 088      }
 089   
 090      /**
 091       * {@inheritdoc}
 092       */
 093      public function save()
 094      {
 095          if (!$this->started) {
 096              throw new \RuntimeException("Trying to save a session that was not started yet or was already closed");
 097          }
 098   
 099          file_put_contents($this->getFilePath(), serialize($this->data));
 100   
 101          // this is needed for Silex, where the session object is re-used across requests
 102          // in functional tests. In Symfony, the container is rebooted, so we don't have
 103          // this issue
 104          $this->started = false;
 105      }
 106   
 107      /**
 108       * Deletes a session from persistent storage.
 109       * Deliberately leaves session data in memory intact.
 110       */
 111      private function destroy()
 112      {
 113          if (is_file($this->getFilePath())) {
 114              unlink($this->getFilePath());
 115          }
 116      }
 117   
 118      /**
 119       * Calculate path to file.
 120       *
 121       * @return string File path
 122       */
 123      private function getFilePath()
 124      {
 125          return $this->savePath.'/'.$this->id.'.mocksess';
 126      }
 127   
 128      /**
 129       * Reads session from storage and loads session.
 130       */
 131      private function read()
 132      {
 133          $filePath = $this->getFilePath();
 134          $this->data = is_readable($filePath) && is_file($filePath) ? unserialize(file_get_contents($filePath)) : array();
 135   
 136          $this->loadSession();
 137      }
 138  }
 139