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 заработал с первого раза 😁

ну вот... после небольших манипуляций получился красивый результат:

Отправить
Поделиться
Запинить