Файловый менеджер - Редактировать - /var/www/html/mediawiki-1.43.1/includes/historyblob/ConcatenatedGzipHistoryBlob.php
Ðазад
<?php /** * Efficient concatenated text storage. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * * @file */ /** * Concatenated gzip (CGZ) storage * Improves compression ratio by concatenating like objects before gzipping * * WARNING: Objects of this class are serialized and permanently stored in the DB. * Do not change the name or visibility of any property! */ class ConcatenatedGzipHistoryBlob implements HistoryBlob { /** @var int */ public $mVersion = 0; /** @var bool */ public $mCompressed = false; /** @var string[]|string Array if uncompressed, string if compressed */ public $mItems = []; /** @var string */ public $mDefaultHash = ''; /** @var int */ public $mSize = 0; /** @var int */ public $mMaxSize = 10_000_000; /** @var int */ public $mMaxCount = 100; public function __construct() { if ( !function_exists( 'gzdeflate' ) ) { throw new RuntimeException( "Need zlib support to read or write this " . "kind of history object (ConcatenatedGzipHistoryBlob)\n" ); } } /** * @param string $text * @return string */ public function addItem( $text ) { $this->uncompress(); $hash = md5( $text ); if ( !isset( $this->mItems[$hash] ) ) { $this->mItems[$hash] = $text; $this->mSize += strlen( $text ); } return $hash; } /** * @param string $hash * @return string|false */ public function getItem( $hash ) { $this->uncompress(); if ( array_key_exists( $hash, $this->mItems ) ) { return $this->mItems[$hash]; } else { return false; } } /** * @param string $text * @return void */ public function setText( $text ) { $this->uncompress(); $this->mDefaultHash = $this->addItem( $text ); } /** * @return string|false */ public function getText() { $this->uncompress(); return $this->getItem( $this->mDefaultHash ); } /** * Remove an item * * @param string $hash */ public function removeItem( $hash ) { $this->mSize -= strlen( $this->mItems[$hash] ); unset( $this->mItems[$hash] ); } /** * Compress the bulk data in the object */ public function compress() { if ( !$this->mCompressed ) { $this->mItems = gzdeflate( serialize( $this->mItems ) ); $this->mCompressed = true; } } /** * Uncompress bulk data */ public function uncompress() { if ( $this->mCompressed ) { $this->mItems = HistoryBlobUtils::unserializeArray( gzinflate( $this->mItems ) ); $this->mCompressed = false; } } /** * @return array */ public function __sleep() { $this->compress(); return [ 'mVersion', 'mCompressed', 'mItems', 'mDefaultHash' ]; } public function __wakeup() { $this->uncompress(); } /** * Helper function for compression jobs * Returns true until the object is "full" and ready to be committed * * @return bool */ public function isHappy() { return $this->mSize < $this->mMaxSize && count( $this->mItems ) < $this->mMaxCount; } } // Blobs generated by MediaWiki < 1.5 on PHP 4 were serialized with the // class name coerced to lowercase. We can improve efficiency by adding // autoload entries for the lowercase variants of these classes (T166759). // The code below is never executed, but it is picked up by the AutoloadGenerator // parser, which scans for class_alias() calls. /* class_alias( ConcatenatedGzipHistoryBlob::class, 'concatenatedgziphistoryblob' ); */
| ver. 1.1 | |
.
| PHP 8.4.18 | Ð“ÐµÐ½ÐµÑ€Ð°Ñ†Ð¸Ñ Ñтраницы: 0 |
proxy
|
phpinfo
|
ÐаÑтройка