| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 | <?php/* * This file is part of the Symfony package. * * (c) Fabien Potencier <fabien@symfony.com> * * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */namespace Symfony\Component\HttpFoundation\Session\Storage;/** * MockFileSessionStorage is used to mock sessions for * functional testing when done in a single PHP process. * * No PHP session is actually started since a session can be initialized * and shutdown only once per PHP execution cycle and this class does * not pollute any session related globals, including session_*() functions * or session.* PHP ini directives. * * @author Drak <drak@zikula.org> */class MockFileSessionStorage extends MockArraySessionStorage{    /**     * @var string     */    private $savePath;    /**     * Constructor.     *     * @param string $savePath Path of directory to save session files.     * @param string $name     Session name.     */    public function __construct($savePath = null, $name = 'MOCKSESSID')    {        if (null === $savePath) {            $savePath = sys_get_temp_dir();        }        if (!is_dir($savePath)) {            mkdir($savePath, 0777, true);        }        $this->savePath = $savePath;        parent::__construct($name);    }    /**     * {@inheritdoc}     */    public function start()    {        if ($this->started) {            return true;        }        if (!$this->id) {            $this->id = $this->generateId();        }        $this->read();        $this->started = true;        return true;    }    /**     * {@inheritdoc}     */    public function regenerate($destroy = false)    {        if ($destroy) {            $this->destroy();        }        $this->id = $this->generateId();        return true;    }    /**     * {@inheritdoc}     */    public function save()    {        file_put_contents($this->getFilePath(), serialize($this->data));    }    /**     * Deletes a session from persistent storage.     * Deliberately leaves session data in memory intact.     */    private function destroy()    {        if (is_file($this->getFilePath())) {            unlink($this->getFilePath());        }    }    /**     * Calculate path to file.     *     * @return string File path     */    private function getFilePath()    {        return $this->savePath.'/'.$this->id.'.mocksess';    }    /**     * Reads session from storage and loads session.     */    private function read()    {        $filePath = $this->getFilePath();        $this->data = is_readable($filePath) && is_file($filePath) ? unserialize(file_get_contents($filePath)) : array();        $this->loadSession();    }}
 |