diff --git a/README-EN.md b/README-EN.md index 4dfbb769..0f8290e6 100644 --- a/README-EN.md +++ b/README-EN.md @@ -20,9 +20,9 @@ Complete PT website building solution. Based on NexusPHP + Laravel Framework + E - .... ## System Requirements -- PHP: 8.0, must have extensions: bcmath, ctype, fileinfo, json, mbstring, openssl, pdo_mysql, tokenizer, xml, mysqli, gd +- PHP: 8.0, must have extensions: bcmath, ctype, fileinfo, json, mbstring, openssl, pdo_mysql, tokenizer, xml, mysqli, gd, redis - Mysql: 5.7 latest version or above -- Redis:optional +- Redis:1.0.0 or above ## More information Blog:[https://nexusphp.org](https://nexusphp.org/) diff --git a/README.md b/README.md index be4700fc..f267a42f 100644 --- a/README.md +++ b/README.md @@ -19,9 +19,9 @@ - .... ## 系统要求 -- PHP: 8.0,必须扩展:bcmath, ctype, fileinfo, json, mbstring, openssl, pdo_mysql, tokenizer, xml, mysqli, gd +- PHP: 8.0,必须扩展:bcmath, ctype, fileinfo, json, mbstring, openssl, pdo_mysql, tokenizer, xml, mysqli, gd, redis - Mysql: 5.7最新版或以上版本 -- Redis:可选 +- Redis:1.0.0或以上版本 ## 捐赠 此程序由个人维护,如果对你有帮助,可以请我喝杯咖啡。感谢以下捐赠者: diff --git a/classes/class_cache_redis.php b/classes/class_cache_redis.php index 2a5e7e06..7d01f607 100644 --- a/classes/class_cache_redis.php +++ b/classes/class_cache_redis.php @@ -21,8 +21,10 @@ class class_cache_redis { function __construct() { $success = $this->connect(); // Connect to Redis if ($success) { + do_log("Redis is enabled!"); $this->isEnabled = 1; } else { + do_log("Redis is disabled!"); $this->isEnabled = 0; } } @@ -61,6 +63,7 @@ class class_cache_redis { } return $connectResult; } catch (\Exception $exception) { + do_log("Redis connect fail: " . $exception->getMessage(), 'error'); return false; } } diff --git a/composer.json b/composer.json index cc79d594..5551b7be 100644 --- a/composer.json +++ b/composer.json @@ -29,6 +29,7 @@ "ext-mysqli": "*", "ext-xml": "*", "ext-bcmath": "*", + "ext-redis": "*", "doctrine/dbal": "^3.1", "fideloper/proxy": "^4.4", "fruitcake/laravel-cors": "^2.0", diff --git a/include/cleanup_cli.php b/include/cleanup_cli.php index eaa5cabb..30686d8e 100644 --- a/include/cleanup_cli.php +++ b/include/cleanup_cli.php @@ -10,8 +10,10 @@ require "bittorrent.php"; $fd = fopen(sprintf('%s/nexus_cleanup_cli.lock', sys_get_temp_dir()), 'w+'); if (!flock($fd, LOCK_EX|LOCK_NB)) { do_log("can not get lock, skip!"); + exit(); } register_shutdown_function(function () use ($fd) { + flock($fd, LOCK_UN); fclose($fd); }); diff --git a/include/functions.php b/include/functions.php index b3aa73d1..8fc0deb7 100644 --- a/include/functions.php +++ b/include/functions.php @@ -1009,7 +1009,7 @@ function begin_compose($title = "",$type="new", $body="", $hassubject=true, $sub print("\n"); if ($hassubject) print("" . -"\n"); +"\n"); print(""); diff --git a/nexus/Install/Install.php b/nexus/Install/Install.php index 3dbe863d..4aa56010 100644 --- a/nexus/Install/Install.php +++ b/nexus/Install/Install.php @@ -126,7 +126,7 @@ class Install public function listRequirementTableRows() { $gdInfo = function_exists('gd_info') ? gd_info() : []; - $extensions = ['ctype', 'fileinfo', 'json', 'mbstring', 'openssl', 'pdo_mysql', 'tokenizer', 'xml', 'mysqli', 'gd', 'bcmath']; + $extensions = ['ctype', 'fileinfo', 'json', 'mbstring', 'openssl', 'pdo_mysql', 'tokenizer', 'xml', 'mysqli', 'bcmath', 'redis', 'gd']; $tableRows = []; $tableRows[] = [ 'label' => 'PHP version', @@ -160,12 +160,6 @@ class Install 'current' => $gdInfo['GIF Read Support'] ?? '', 'result' => $this->yesOrNo($gdInfo['GIF Read Support'] ?? ''), ]; - $tableRows[] = [ - 'label' => 'PHP extension redis', - 'required' => 'optional', - 'current' => extension_loaded('redis'), - 'result' => $this->yesOrNo(extension_loaded('redis')), - ]; $fails = array_filter($tableRows, function ($value) {return in_array($value['required'], ['true', 'enabled']) && $value['result'] == 'NO';}); $pass = empty($fails); @@ -434,15 +428,13 @@ class Install $this->doLog("[CREATE ENV] final newData: " . json_encode($newData)); unset($key, $value); mysql_connect($newData['DB_HOST'], $newData['DB_USERNAME'], $newData['DB_PASSWORD'], $newData['DB_DATABASE'], $newData['DB_PORT']); - if (extension_loaded('redis') && !empty($newData['REDIS_HOST'])) { - $redis = new \Redis(); - $redis->connect($newData['REDIS_HOST'], $newData['REDIS_PORT'] ?: 6379); - if (isset($newData['REDIS_DB'])) { - if (!ctype_digit($newData['REDIS_DB']) || $newData['REDIS_DB'] < 0 || $newData['REDIS_DB'] > 15) { - throw new \InvalidArgumentException("invalid redis database: " . $newData['REDIS_DB']); - } - $redis->select($newData['REDIS_DB']); + $redis = new \Redis(); + $redis->connect($newData['REDIS_HOST'], $newData['REDIS_PORT'] ?: 6379); + if (isset($newData['REDIS_DB'])) { + if (!ctype_digit($newData['REDIS_DB']) || $newData['REDIS_DB'] < 0 || $newData['REDIS_DB'] > 15) { + throw new \InvalidArgumentException("invalid redis database: " . $newData['REDIS_DB']); } + $redis->select($newData['REDIS_DB']); } $content = ""; foreach ($newData as $key => $value) { diff --git a/nexus/Install/install/install.php b/nexus/Install/install/install.php index bf65a7c6..b68ee22f 100644 --- a/nexus/Install/install/install.php +++ b/nexus/Install/install/install.php @@ -173,7 +173,6 @@ if (!empty($error)) { echo $install->renderTable($header, $requirements['table_rows']); } elseif ($currentStep == 2) { echo $install->renderTable($header, $tableRows); - echo '
若 Redis 不启用,相关项目留空
'; echo $install->renderForm($envFormControls); } elseif ($currentStep == 3) { diff --git a/nexus/Install/update/update.php b/nexus/Install/update/update.php index e2bd3bd8..df6676f6 100644 --- a/nexus/Install/update/update.php +++ b/nexus/Install/update/update.php @@ -200,7 +200,7 @@ if (!empty($error)) { echo $update->renderTable($header, $requirements['table_rows']); } elseif ($currentStep == 3) { echo $update->renderTable($header, $tableRows); - echo '
若 Redis 不启用,相关项目留空
'; + echo '
下一步之前,请确保在根目录执行了 composer install 更新了依赖。
'; echo $update->renderForm($envFormControls); } elseif ($currentStep == 2) { diff --git a/public/amountbonus.php b/public/amountbonus.php index 3a2da942..01946547 100644 --- a/public/amountbonus.php +++ b/public/amountbonus.php @@ -4,11 +4,27 @@ dbconn(); loggedinorreturn(); if (get_user_class() < UC_MODERATOR) stderr("Error", "Access denied."); +$seedBonusAll = [ + 1 => 100, + 2 => 1000, + 3 => 10000, +]; +$selectName = 'seed_bonus_type'; +$select = ''; + if ($_SERVER["REQUEST_METHOD"] == "POST") { - if ($_POST['doit'] == 'yes') { - sql_query("UPDATE users SET seedbonus = seedbonus + 25.0 WHERE status='confirmed'"); - stderr("Bonus", "25.0 bonus point is sent to everyone..."); + if (isset($_POST['doit']) && $_POST['doit'] == 'yes') { + if (empty($_POST[$selectName]) || !isset($seedBonusAll[$_POST[$selectName]])) { + stderr("Error", "Invalid form data: $selectName."); + } + $seedBonusIncrease = $seedBonusAll[$_POST[$selectName]]; + sql_query("UPDATE users SET seedbonus = seedbonus + $seedBonusIncrease WHERE status='confirmed'"); + stderr("Bonus", "$seedBonusIncrease bonus point is sent to everyone..."); die; } @@ -40,14 +56,19 @@ print("
".$lang_functions['row_subject']."
".$lang_functions['row_body']."
"); textbbcode("compose","body", $body, false); print("
\n"); - +
- - + + + + + + + $announce_wait) && (TIMENOW - $torrent['ts']) >= ($anninterthreeage * 86400)) @@ -172,17 +171,16 @@ if ($compact == 1) { //check ReAnnounce $params = $_GET; unset($params['key']); -$lockKey = implode('', $params); -$fp = fopen($lockKey, 'w+'); -if (!fopen($fp, LOCK_EX|LOCK_NB)) { +$lockKey = md5(http_build_query($params)); +$redis = $Cache->getRedis(); +if (!$redis->setnx($lockKey, $announce_wait, TIMENOW)) { do_log('ReAnnounce'); benc_resp($rep_dict); - fclose($fp); exit(); } unset($self); - +$res = sql_query($peerlistsql); if (isset($event) && $event == "stopped") { // Don't fetch peers for stopped event } else { @@ -494,8 +492,5 @@ if(count($USERUPDATESET) && $userid) { sql_query("UPDATE users SET " . join(",", $USERUPDATESET) . " WHERE id = ".$userid); } - -flock($fp, LOCK_UN); -fclose($fp); benc_resp($rep_dict); ?>
-Are you sure you want to give all confirmed users 25.0 extra bonus point?

- -
Bonus
+ + +