require redis and use reids to check ReAnnounce

This commit is contained in:
xiaomlove
2022-02-19 23:19:09 +08:00
parent 80bf8a29ff
commit f2f873e1e7
11 changed files with 53 additions and 40 deletions

View File

@@ -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
- Redisoptional
- Redis1.0.0 or above
## More information
Blog[https://nexusphp.org](https://nexusphp.org/)

View File

@@ -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可选
- Redis1.0.0或以上版本
## 捐赠
此程序由个人维护,如果对你有帮助,可以请我喝杯咖啡。感谢以下捐赠者:

View File

@@ -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;
}
}

View File

@@ -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",

View File

@@ -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);
});

View File

@@ -1009,7 +1009,7 @@ function begin_compose($title = "",$type="new", $body="", $hassubject=true, $sub
print("<table class=\"main\" width=\"100%\" border=\"1\" cellspacing=\"0\" cellpadding=\"5\">\n");
if ($hassubject)
print("<tr><td class=\"rowhead\">".$lang_functions['row_subject']."</td>" .
"<td class=\"rowfollow\" align=\"left\"><input type=\"text\" style=\"width: 650px;\" name=\"subject\" maxlength=\"".$maxsubjectlength."\" value=\"".$subject."\" /></td></tr>\n");
"<td class=\"rowfollow\" align=\"left\"><input type=\"text\" style=\"width: 650px;\" name=\"subject\" maxlength=\"".$maxsubjectlength."\" value=\"".htmlspecialchars($subject)."\" /></td></tr>\n");
print("<tr><td class=\"rowhead\" valign=\"top\">".$lang_functions['row_body']."</td><td class=\"rowfollow\" align=\"left\"><span style=\"display: none;\" id=\"previewouter\"></span><div id=\"editorouter\">");
textbbcode("compose","body", $body, false);
print("</div></td></tr>");

View File

@@ -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) {

View File

@@ -173,7 +173,6 @@ if (!empty($error)) {
echo $install->renderTable($header, $requirements['table_rows']);
} elseif ($currentStep == 2) {
echo $install->renderTable($header, $tableRows);
echo '<div class="text-gray-700 p-4 text-red-400">若 Redis 不启用,相关项目留空</div>';
echo $install->renderForm($envFormControls);
} elseif ($currentStep == 3) {

View File

@@ -200,7 +200,7 @@ if (!empty($error)) {
echo $update->renderTable($header, $requirements['table_rows']);
} elseif ($currentStep == 3) {
echo $update->renderTable($header, $tableRows);
echo '<div class="text-gray-700 p-4 text-red-400">若 Redis 不启用,相关项目留空</div>';
echo '<div class="text-gray-700 p-4 text-red-400">下一步之前,请确保在根目录执行了 composer install 更新了依赖。</div>';
echo $update->renderForm($envFormControls);
} elseif ($currentStep == 2) {

View File

@@ -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 = '<select name="' . $selectName . '">';
foreach ($seedBonusAll as $key => $value) {
$select .= sprintf('<option value="%s">%s</option>', $key, $value);
}
$select .= '</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("<table width=100% border=1 cellspacing=0 cellpadding=5>\n");
<?php end_table();?>
</form>
<?php end_main_frame();?>
<?php begin_main_frame("Send 25.0 bonus point to everyone",false,30);?>
<?php begin_main_frame("Send bonus point to everyone",false,30);?>
<form action="amountbonus.php" method="post">
<table width=100% border=1 cellspacing=0 cellpadding=5>
<tr><td class="rowfollow" width="100%">
Are you sure you want to give all confirmed users 25.0 extra bonus point?<br /><br /></td></tr>
<tr><td class="toolbox" align="center"><input type = "hidden" name = "doit" value = "yes" />
<input type="submit" class="btn" value="Yes" />
</td></tr>
<tr>
<td class="rowhead">Bonus</td>
<td class="rowfollow"><?php echo $select?></td>
</tr>
<tr>
<td class="toolbox" align="center" colspan="2">
<input type = "hidden" name = "doit" value = "yes" />
<input type="submit" class="btn" value="Okay" />
</td>
</tr>
<?php end_table();?>
</form>
<?php

View File

@@ -147,7 +147,6 @@ $fields = "seeder, peer_id, ip, port, uploaded, downloaded, (".TIMENOW." - UNIX_
* @since 1.6.0-beta12
*/
$peerlistsql = "SELECT ".$fields." FROM peers WHERE torrent = " . $torrentid . $only_leech_query . $limit;
$res = sql_query($peerlistsql);
$real_annnounce_interval = $announce_interval;
if ($anninterthreeage && ($anninterthree > $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);
?>