Synology chat bot (download)
сижу, допиливаю функцию, чтобы бот в ответ присылал пользователю файл...
файл, само собой, будет генериться на лету, за это отвечает скрипт php и будет выдавать примерно следующее:
header("Content-type: text/plain");
header("Content-Disposition: attachment; filename=список посещений офиса за ".$monthes[date('n', strtotime($_REQUEST['month']))]." ".date('Y', strtotime($_REQUEST['month'])).".log");
echo $log_str;
а в самом боте есть вызов этой url, когда-то давно написал функцию
function answer_file($user_id,$text,$file,$bot_token)
# $user_id - массив с id
# $text - комментарий к файлу
# $file - url на сам файл
# $bot_token - токен бота
{
$data = array (
'text' => $text,
'user_ids'=> $user_id,
'file_url'=> $file
);
$options = array(
'http' => array(
'method' => 'POST',
'content' => 'payload='.json_encode( $data ),
'header'=> "Content-Type: application/json\r\n" .
"Accept: application/json\r\n"
)
);
$context = stream_context_create( $options );
$result = file_get_contents( 'https://server/webapi/entry.cgi?api=SYNO.Chat.External&method=chatbot&version=2&token=%22'.$bot_token.'%22', false, $context );
$response = json_decode($result);
return $result;
}
ну, в целом работает, только я же запрашиваю не существующий файл, а скрипт с параметрами, типа:
https://server/bots/get_tabel.php?action=get_log&login=axl&month=2021-09
и получаю файл с именем get_tabel.php
не такого результата я хотел, ох не такого
Хорошо, переходим к радикальному методу... т. е. с nginx на apache и используем .htaccess
в результате нам надо получить url вида:
https://server/bots/logs/axl/2021-09/список посещений офиса за сентябрь 2021.log
приступим...
накидаем .htassess, учтем что нам надо использовать скрипт, только когда запрашивается папка logs
RewriteEngine On
RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^logs/.*$ ./parse.php [L]
я временно сделал parse.php чтобы отладить, потом, конечно же перенаправлю на основной скрипт
<?php
$path = $_SERVER['REQUEST_URI'];
$paths = explode('/', $path);
echo "<pre>";
print_r ($paths);
echo "</pre>";
?>
и результат запроса
Array
(
[0] =>
[1] => logs
[2] => axl
[3] => 2021-09
[4] => %D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%20%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B9%20%D0%BE%D1%84%D0%B8%D1%81%D0%B0%20%D0%B7%D0%B0%20%D1%81%D0%B5%D0%BD%D1%82%D1%8F%D0%B1%D1%80%D1%8C%202021.log
)
вы не поверите, самое крутое, что htassecc заработал с первого раза 😁
ну вот... после небольших манипуляций получился красивый результат: