uawdijnntqw1x1x1
IP : 216.73.216.155
Hostname : vm5018.vps.agava.net
Kernel : Linux vm5018.vps.agava.net 3.10.0-1127.8.2.vz7.151.14 #1 SMP Tue Jun 9 12:58:54 MSK 2020 x86_64
Disable Function : None :)
OS : Linux
PATH:
/
var
/
www
/
iplanru
/
data
/
www
/
i-plan.ru
/
32e79
/
..
/
libraries
/
phpmorphy
/
src
/
storage.php
/
/
<?php /** * This file is part of phpMorphy library * * Copyright c 2007-2008 Kamaev Vladimir <heromantor@users.sourceforge.net> * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the * Free Software Foundation, Inc., 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ define('PHPMORPHY_STORAGE_FILE', 'file'); define('PHPMORPHY_STORAGE_MEM', 'mem'); define('PHPMORPHY_STORAGE_SHM', 'shm'); abstract class phpMorphy_Storage { protected $file_name, $resource; function __construct($fileName) { $this->file_name = $fileName; $this->resource = $this->open($fileName); } function getFileName() { return $this->file_name; } function getResource() { return $this->resource; } function getTypeAsString() { return $this->getType(); } function read($offset, $len, $exactLength = true) { if($offset >= $this->getFileSize()) { throw new phpMorphy_Exception("Can`t read $len bytes beyond end of '" . $this->getFileName() . "' file, offset = $offset, file_size = " . $this->getFileSize()); } try { $result = $this->readUnsafe($offset, $len); } catch (Exception $e) { throw new phpMorphy_Exception("Can`t read $len bytes at $offset offset, from '" . $this->getFileName() . "' file: " . $e->getMessage()); } if($exactLength && $GLOBALS['__phpmorphy_strlen']($result) < $len) { throw new phpMorphy_Exception("Can`t read $len bytes at $offset offset, from '" . $this->getFileName() . "' file"); } return $result; } abstract function readUnsafe($offset, $len); abstract function getFileSize(); abstract function getType(); abstract protected function open($fileName); }; class phpMorphy_Storage_Proxy extends phpMorphy_Storage { protected $file_name, $type, $factory; function __construct($type, $fileName, $factory) { $this->file_name = $fileName; $this->type = $type; $this->factory = $factory; } function getFileName() { return $this->__obj->getFileName(); } function getResource() { return $this->__obj->getResource(); } function getFileSize() { return $this->__obj->getFileSize(); } function getType() { return $this->__obj->getType(); } function readUnsafe($offset, $len) { return $this->__obj->readUnsafe($offset, $len); } protected function open($fileName) { return $this->__obj->open($fileName); } function __get($propName) { if($propName === '__obj') { $this->__obj = $this->factory->open($this->type, $this->file_name, false); unset($this->file_name); unset($this->type); unset($this->factory); return $this->__obj; } throw new phpMorphy_Exception("Unknown '$propName' property"); } } class phpMorphy_Storage_File extends phpMorphy_Storage { function getType() { return PHPMORPHY_STORAGE_FILE; } function getFileSize() { if(false === ($stat = fstat($this->resource))) { throw new phpMorphy_Exception('Can`t invoke fstat for ' . $this->file_name . ' file'); } return $stat['size']; } function readUnsafe($offset, $len) { if(0 !== fseek($this->resource, $offset)) { throw new phpMorphy_Exception("Can`t seek to $offset offset"); } return fread($this->resource, $len); } function open($fileName) { if(false === ($fh = fopen($fileName, 'rb'))) { throw new phpMorphy_Exception("Can`t open $this->file_name file"); } return $fh; } } class phpMorphy_Storage_Mem extends phpMorphy_Storage { function getType() { return PHPMORPHY_STORAGE_MEM; } function getFileSize() { return $GLOBALS['__phpmorphy_strlen']($this->resource); } function readUnsafe($offset, $len) { return $GLOBALS['__phpmorphy_substr']($this->resource, $offset, $len); } function open($fileName) { if(false === ($string = file_get_contents($fileName))) { throw new phpMorphy_Exception("Can`t read $fileName file"); } return $string; } } class phpMorphy_Storage_Shm extends phpMorphy_Storage { protected $descriptor; function __construct($fileName, $shmCache) { $this->cache = $shmCache; parent::__construct($fileName); } function getFileSize() { return $this->descriptor->getFileSize(); } function getType() { return PHPMORPHY_STORAGE_SHM; } function readUnsafe($offset, $len) { return shmop_read($this->resource['shm_id'], $this->resource['offset'] + $offset, $len); } function open($fileName) { $this->descriptor = $this->cache->get($fileName); return array( 'shm_id' => $this->descriptor->getShmId(), 'offset' => $this->descriptor->getOffset() ); } } class phpMorphy_Storage_Factory { protected $shm_cache, $shm_options; function __construct($shmOptions = array()) { $this->shm_options = $shmOptions; } function getShmCache() { if(!isset($this->shm_cache)) { $this->shm_cache = $this->createShmCache($this->shm_options); } return $this->shm_cache; } function open($type, $fileName, $lazy) { switch($type) { case PHPMORPHY_STORAGE_FILE: case PHPMORPHY_STORAGE_MEM: case PHPMORPHY_STORAGE_SHM: break; default: throw new phpMorphy_Exception("Invalid storage type $type specified"); } if($lazy) { return new phpMorphy_Storage_Proxy($type, $fileName, $this); } $clazz = 'phpMorphy_Storage_' . ucfirst($GLOBALS['__phpmorphy_strtolower']($type)); if($type != PHPMORPHY_STORAGE_SHM) { return new $clazz($fileName); } else { return new $clazz($fileName, $this->getShmCache()); } } protected function createShmCache($options) { require_once(PHPMORPHY_DIR . '/shm_utils.php'); return new phpMorphy_Shm_Cache($options, !empty($options['clear_on_create'])); } }
/var/www/iplanru/data/www/i-plan.ru/32e79/../libraries/phpmorphy/src/storage.php