mirror of
https://github.com/e107inc/e107.git
synced 2025-08-05 14:17:49 +02:00
e_file_inspector_json_phar: Smaller core image
e_file_inspector_json_phar is an extended implementation of e_file_inspector_json that encapsulates a JSON core image into a gzip-compressed phar. This results in space savings of over 60% compared to plain JSON.
This commit is contained in:
@@ -13,12 +13,20 @@ require_once("CoreImage.php");
|
|||||||
|
|
||||||
class JsonCoreImage extends CoreImage
|
class JsonCoreImage extends CoreImage
|
||||||
{
|
{
|
||||||
private $checksums = [];
|
protected $checksums = [];
|
||||||
|
|
||||||
public function __construct($exportFolder, $tempFolder, $currentVersion, $imageFile)
|
public function __construct($exportFolder, $tempFolder, $currentVersion, $imageFile)
|
||||||
{
|
{
|
||||||
$this->create_image($exportFolder, $tempFolder, $currentVersion);
|
$this->create_image($exportFolder, $tempFolder, $currentVersion);
|
||||||
|
|
||||||
|
$this->saveImage($imageFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param $imageFile
|
||||||
|
*/
|
||||||
|
protected function saveImage($imageFile)
|
||||||
|
{
|
||||||
$json_result = json_encode($this->checksums, JSON_PRETTY_PRINT);
|
$json_result = json_encode($this->checksums, JSON_PRETTY_PRINT);
|
||||||
$json_string_result = var_export($json_result, true);
|
$json_string_result = var_export($json_result, true);
|
||||||
$data = $this->generateStub();
|
$data = $this->generateStub();
|
||||||
|
41
.github/workflows/build-release/JsonPharCoreImage.php
vendored
Normal file
41
.github/workflows/build-release/JsonPharCoreImage.php
vendored
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* e107 website system
|
||||||
|
*
|
||||||
|
* Copyright (C) 2008-2020 e107 Inc (e107.org)
|
||||||
|
* Released under the terms and conditions of the
|
||||||
|
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once("JsonCoreImage.php");
|
||||||
|
|
||||||
|
class JsonPharCoreImage extends JsonCoreImage
|
||||||
|
{
|
||||||
|
protected function saveImage($imageFile)
|
||||||
|
{
|
||||||
|
$imagePharFile = "$imageFile.phar";
|
||||||
|
$phar = new Phar($imagePharFile);
|
||||||
|
|
||||||
|
$json_result = json_encode($this->checksums);
|
||||||
|
|
||||||
|
$imageJsonFile = "$imageFile.json";
|
||||||
|
$fp = fopen($imageJsonFile, 'w');
|
||||||
|
fwrite($fp, $json_result);
|
||||||
|
fclose($fp);
|
||||||
|
|
||||||
|
$phar->startBuffering();
|
||||||
|
$phar->setStub($this->generateStub());
|
||||||
|
$phar->addFile($imageJsonFile, "core_image.json");
|
||||||
|
$phar->compressFiles(Phar::GZ);
|
||||||
|
$phar->stopBuffering();
|
||||||
|
rename($imagePharFile, $imageFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected function generateStub()
|
||||||
|
{
|
||||||
|
$data = parent::generateStub();
|
||||||
|
$data .= "__HALT_COMPILER();";
|
||||||
|
|
||||||
|
return $data;
|
||||||
|
}
|
||||||
|
}
|
@@ -9,7 +9,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
require_once("OsHelper.php");
|
require_once("OsHelper.php");
|
||||||
require_once("JsonCoreImage.php");
|
require_once("JsonPharCoreImage.php");
|
||||||
|
|
||||||
$builder = new e107Build();
|
$builder = new e107Build();
|
||||||
$builder->makeBuild();
|
$builder->makeBuild();
|
||||||
@@ -505,7 +505,7 @@ class e107Build
|
|||||||
$imageFile = $this->tempDir . "core_image.php";
|
$imageFile = $this->tempDir . "core_image.php";
|
||||||
|
|
||||||
$this->status("Creating new core_image.php file ({$imageFile})", true);
|
$this->status("Creating new core_image.php file ({$imageFile})", true);
|
||||||
new JsonCoreImage($this->exportDir, $this->tempDir, $this->version, $imageFile);
|
new JsonPharCoreImage($this->exportDir, $this->tempDir, $this->version, $imageFile);
|
||||||
|
|
||||||
$dir = "{$this->config['baseDir']}/target/{$this->config['main']['name']}/export";
|
$dir = "{$this->config['baseDir']}/target/{$this->config['main']['name']}/export";
|
||||||
$this->changeDir($dir);
|
$this->changeDir($dir);
|
||||||
|
Binary file not shown.
@@ -193,7 +193,7 @@ class e107
|
|||||||
'e_bb_base' => '{e_HANDLER}bbcode_handler.php',
|
'e_bb_base' => '{e_HANDLER}bbcode_handler.php',
|
||||||
'e_customfields' => '{e_HANDLER}e_customfields_class.php',
|
'e_customfields' => '{e_HANDLER}e_customfields_class.php',
|
||||||
'e_file' => '{e_HANDLER}file_class.php',
|
'e_file' => '{e_HANDLER}file_class.php',
|
||||||
'e_file_inspector' => '{e_HANDLER}e_file_inspector_json.php',
|
'e_file_inspector' => '{e_HANDLER}e_file_inspector_json_phar.php',
|
||||||
'e_form' => '{e_HANDLER}form_handler.php',
|
'e_form' => '{e_HANDLER}form_handler.php',
|
||||||
'e_jshelper' => '{e_HANDLER}js_helper.php',
|
'e_jshelper' => '{e_HANDLER}js_helper.php',
|
||||||
'e_media' => '{e_HANDLER}media_class.php',
|
'e_media' => '{e_HANDLER}media_class.php',
|
||||||
|
@@ -11,7 +11,7 @@ require_once("e_file_inspector.php");
|
|||||||
|
|
||||||
class e_file_inspector_json extends e_file_inspector
|
class e_file_inspector_json extends e_file_inspector
|
||||||
{
|
{
|
||||||
private $coreImage;
|
protected $coreImage;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $jsonFilePath string Absolute path to the file inspector database
|
* @param $jsonFilePath string Absolute path to the file inspector database
|
||||||
@@ -72,7 +72,7 @@ class e_file_inspector_json extends e_file_inspector
|
|||||||
* @copyright Copyright (c) Taylor Otwell
|
* @copyright Copyright (c) Taylor Otwell
|
||||||
* @license https://github.com/illuminate/support/blob/master/LICENSE.md MIT License
|
* @license https://github.com/illuminate/support/blob/master/LICENSE.md MIT License
|
||||||
*/
|
*/
|
||||||
private static function array_slash($array, $prepend = '')
|
protected static function array_slash($array, $prepend = '')
|
||||||
{
|
{
|
||||||
$results = array();
|
$results = array();
|
||||||
|
|
||||||
|
53
e107_handlers/e_file_inspector_json_phar.php
Normal file
53
e107_handlers/e_file_inspector_json_phar.php
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* e107 website system
|
||||||
|
*
|
||||||
|
* Copyright (C) 2008-2020 e107 Inc (e107.org)
|
||||||
|
* Released under the terms and conditions of the
|
||||||
|
* GNU General Public License (http://www.gnu.org/licenses/gpl.txt)
|
||||||
|
*/
|
||||||
|
|
||||||
|
require_once("e_file_inspector_json.php");
|
||||||
|
|
||||||
|
class e_file_inspector_json_phar extends e_file_inspector_json
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param $jsonPharFilePath string Absolute path to the file inspector database
|
||||||
|
*/
|
||||||
|
public function __construct($jsonPharFilePath = null)
|
||||||
|
{
|
||||||
|
parent::__construct($jsonPharFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @inheritDoc
|
||||||
|
*/
|
||||||
|
public function loadDatabase()
|
||||||
|
{
|
||||||
|
Phar::loadPhar($this->database, "core_image.phar");
|
||||||
|
$tmpFile = tmpfile();
|
||||||
|
$tmpFilePath = stream_get_meta_data($tmpFile)['uri'];
|
||||||
|
$this->copyUrlToResource("phar://core_image.phar/core_image.json", $tmpFile);
|
||||||
|
$this->coreImage = json_decode(file_get_contents($tmpFilePath), true);
|
||||||
|
if (!is_array($this->coreImage)) $this->coreImage = [];
|
||||||
|
$this->coreImage = self::array_slash($this->coreImage);
|
||||||
|
if (!$this->coreImage) $this->coreImage = [];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Copy file to destination with low memory footprint
|
||||||
|
* @param $source string URL of the source
|
||||||
|
* @param $destination resource File pointer of the destination
|
||||||
|
*/
|
||||||
|
private function copyUrlToResource($source, $destination)
|
||||||
|
{
|
||||||
|
$dbFile = fopen($source, "r");
|
||||||
|
while (!feof($dbFile))
|
||||||
|
{
|
||||||
|
$buffer = fread($dbFile, 4096);
|
||||||
|
fwrite($destination, $buffer);
|
||||||
|
}
|
||||||
|
unset($buffer);
|
||||||
|
fclose($dbFile);
|
||||||
|
}
|
||||||
|
}
|
@@ -89,7 +89,6 @@ class e_file_inspector_sqlphar extends e_file_inspector
|
|||||||
return $this->currentVersion = $statement->fetchColumn();
|
return $this->currentVersion = $statement->fetchColumn();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Copy file to destination with low memory footprint
|
* Copy file to destination with low memory footprint
|
||||||
* @param $source string URL of the source
|
* @param $source string URL of the source
|
||||||
|
@@ -16,9 +16,9 @@ class e_file_inspectorTest extends \Codeception\Test\Unit
|
|||||||
|
|
||||||
public function _before()
|
public function _before()
|
||||||
{
|
{
|
||||||
require_once(e_HANDLER . "e_file_inspector_json.php");
|
require_once(e_HANDLER . "e_file_inspector_json_phar.php");
|
||||||
require_once(e_HANDLER . "e_file_inspector_sqlphar.php");
|
// TODO: Make test databases; don't hard-code e107_admin/core_image.php and hope it has the expected content.
|
||||||
$this->e_integrity = new e_file_inspector_json();
|
$this->e_integrity = new e_file_inspector_json_phar(e_ADMIN . "core_image.php");
|
||||||
}
|
}
|
||||||
|
|
||||||
public function testGetChecksums()
|
public function testGetChecksums()
|
||||||
|
Reference in New Issue
Block a user