Skip to content

Commit

Permalink
fix: extract duplicate config loading (#4242)
Browse files Browse the repository at this point in the history
Also fix a problem with bin/cache-prune and FileCache and its enable_purge option
  • Loading branch information
dvikan committed Aug 30, 2024
1 parent 9f48370 commit 3e1a8b2
Show file tree
Hide file tree
Showing 8 changed files with 36 additions and 80 deletions.
4 changes: 3 additions & 1 deletion actions/DisplayAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,9 @@ public function __invoke(Request $request): Response
$this->cache->set($cacheKey, $response, 60 * 15);
}

if (rand(1, 100) === 2) {
// For 1% of requests, prune cache
if (rand(1, 100) === 1) {
// This might be resource intensive!
$this->cache->prune();
}

Expand Down
11 changes: 1 addition & 10 deletions bin/cache-clear
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,7 @@
*/

require __DIR__ . '/../lib/bootstrap.php';

$config = [];
if (file_exists(__DIR__ . '/../config.ini.php')) {
$config = parse_ini_file(__DIR__ . '/../config.ini.php', true, INI_SCANNER_TYPED);
if (!$config) {
http_response_code(500);
exit("Error parsing config.ini.php\n");
}
}
Configuration::loadConfiguration($config, getenv());
require __DIR__ . '/../lib/config.php';

$container = require __DIR__ . '/../lib/dependencies.php';

Expand Down
20 changes: 10 additions & 10 deletions bin/cache-prune
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,19 @@
*/

require __DIR__ . '/../lib/bootstrap.php';

$config = [];
if (file_exists(__DIR__ . '/../config.ini.php')) {
$config = parse_ini_file(__DIR__ . '/../config.ini.php', true, INI_SCANNER_TYPED);
if (!$config) {
http_response_code(500);
exit("Error parsing config.ini.php\n");
}
}
Configuration::loadConfiguration($config, getenv());
require __DIR__ . '/../lib/config.php';

$container = require __DIR__ . '/../lib/dependencies.php';

/** @var CacheInterface $cache */
$cache = $container['cache'];

if (
Configuration::getConfig('cache', 'type') === 'file'
&& !Configuration::getConfig('FileCache', 'enable_purge')
) {
// Override enable_purge for this execution
Configuration::setConfig('FileCache', 'enable_purge', true);
}

$cache->prune();
11 changes: 1 addition & 10 deletions bin/test
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,7 @@
*/

require __DIR__ . '/../lib/bootstrap.php';

$config = [];
if (file_exists(__DIR__ . '/../config.ini.php')) {
$config = parse_ini_file(__DIR__ . '/../config.ini.php', true, INI_SCANNER_TYPED);
if (!$config) {
http_response_code(500);
exit("Error parsing config.ini.php\n");
}
}
Configuration::loadConfiguration($config, getenv());
require __DIR__ . '/../lib/config.php';

$container = require __DIR__ . '/../lib/dependencies.php';

Expand Down
2 changes: 2 additions & 0 deletions caches/FileCache.php
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,10 @@ public function prune(): void
}
$expiration = $item['expiration'] ?? time();
if ($expiration === 0 || $expiration > time()) {
// Cached forever, or not expired yet
continue;
}
// Expired, so delete file
unlink($cacheFile);
}
}
Expand Down
13 changes: 2 additions & 11 deletions index.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,17 +5,8 @@
exit("RSS-Bridge requires minimum PHP version 7.4\n");
}

require_once __DIR__ . '/lib/bootstrap.php';

$config = [];
if (file_exists(__DIR__ . '/config.ini.php')) {
$config = parse_ini_file(__DIR__ . '/config.ini.php', true, INI_SCANNER_TYPED);
if (!$config) {
http_response_code(500);
exit("Error parsing config.ini.php\n");
}
}
Configuration::loadConfiguration($config, getenv());
require __DIR__ . '/lib/bootstrap.php';
require __DIR__ . '/lib/config.php';

$container = require __DIR__ . '/lib/dependencies.php';

Expand Down
42 changes: 4 additions & 38 deletions lib/Configuration.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,43 +15,6 @@ private function __construct()
{
}

public static function checkInstallation(): array
{
$errors = [];

// OpenSSL: https://www.php.net/manual/en/book.openssl.php
if (!extension_loaded('openssl')) {
$errors[] = 'openssl extension not loaded';
}

// libxml: https://www.php.net/manual/en/book.libxml.php
if (!extension_loaded('libxml')) {
$errors[] = 'libxml extension not loaded';
}

// Multibyte String (mbstring): https://www.php.net/manual/en/book.mbstring.php
if (!extension_loaded('mbstring')) {
$errors[] = 'mbstring extension not loaded';
}

// SimpleXML: https://www.php.net/manual/en/book.simplexml.php
if (!extension_loaded('simplexml')) {
$errors[] = 'simplexml extension not loaded';
}

// Client URL Library (curl): https://www.php.net/manual/en/book.curl.php
// Allow RSS-Bridge to run without curl module in CLI mode without root certificates
if (!extension_loaded('curl') && !(php_sapi_name() === 'cli' && empty(ini_get('curl.cainfo')))) {
$errors[] = 'curl extension not loaded';
}

// JavaScript Object Notation (json): https://www.php.net/manual/en/book.json.php
if (!extension_loaded('json')) {
$errors[] = 'json extension not loaded';
}
return $errors;
}

public static function loadConfiguration(array $customConfig = [], array $env = [])
{
if (!file_exists(__DIR__ . '/../config.default.ini.php')) {
Expand Down Expand Up @@ -204,7 +167,10 @@ public static function getConfig(string $section, string $key, $default = null)
return self::$config[strtolower($section)][strtolower($key)] ?? $default;
}

private static function setConfig(string $section, string $key, $value): void
/**
* @internal Please avoid usage
*/
public static function setConfig(string $section, string $key, $value): void
{
self::$config[strtolower($section)][strtolower($key)] = $value;
}
Expand Down
13 changes: 13 additions & 0 deletions lib/config.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?php

declare(strict_types=1);

$config = [];
if (file_exists(__DIR__ . '/../config.ini.php')) {
$config = parse_ini_file(__DIR__ . '/../config.ini.php', true, INI_SCANNER_TYPED);
if (!$config) {
http_response_code(500);
exit("Error parsing config.ini.php\n");
}
}
Configuration::loadConfiguration($config, getenv());

0 comments on commit 3e1a8b2

Please sign in to comment.