mysql — BIRT 4.5 — отключить сохранение connectstring внутри report.rptdesign, PHP для назначения connectstring

Я использую Birt 4.5 и PHP / MYSQL.
Я могу запускать отчеты Birt с php. Я включил tomcat и скопировал birt-runtime-4_5_0 / WebViewerExample в tomcat / webapps и переименовал его в birt.

Так что я могу запустить Birt Viewer с помощью PHP;

<?php
$fname = "report/test.rptdesign&__showtitle=false";
$dest = "http://localhost:8081/birt/frameset?__report=";
$dest .= $fname;
header("Location: $dest" );
?>

Выше код работает нормально. Но коннекторная строка отчета уже сохранена в файле test.rptdesign.
Я хочу удалить учетные данные для входа в БД из файла test.rptdesign и назначить их при открытии отчета с помощью PHP.

Я пробовал с параметрами отчета. Но все параметры будут отображаться в адресной строке браузера.

Есть ли безопасный способ сделать это? Это очень важно, когда нам нужно изменить местоположение базы данных. Очень трудно изменить источник данных для каждого файла .rptdesign.

Благодарю вас,
Supun

2

Решение

Я не верю, что использование параметров отчета для обработки соединения с базой данных является правильным способом. В дополнение к проблеме адресной строки, о которой вы упомянули, это вызовет неожиданные проблемы: например, вы не сможете использовать эту базу данных для подачи набора данных другого параметра отчета.
С Tomcat лучше всего подойти к подключению базы данных в пул соединений: легко, надежно, и отчеты могут работать значительно быстрее

В качестве альтернативы источник данных может быть выведен в библиотеку BIRT (.rptlibrary) и доступен для всех проектов отчетов: таким образом, при изменении местоположения базы данных необходимо обновлять только библиотеку.

2

Другие решения

Я согласен с Домиником, что отправка параметров базы данных с помощью запроса, скорее всего, является неуместным решением — и вы не дали никакого объяснения того, является ли это требованием системы.

Но это довольно тривиально, чтобы прокси-запрос через PHP и украсить URL с необходимыми параметрами, что-то вроде …

<?php

$_GET['__showtitle']=$_GET['__showtitle'] ? $_GET['__showtitle'] : 'false';
$_GET['__report']=$fname;  // NB this should be NULL in your code!
$_GET['dbuser']='a_db_user';
$_GET['passwd']='s3cr3t';

$qry=http_build_query($_GET);
$url="http://localhost:8081/birt/frameset?" . $qry;

// if its simply returning HTML, then just....
$fin=fopen($url, 'r');
while ($l=fgets($fin)) {
print $l;
}
exit;

Если возвращаемый контент содержит относительные ссылки, вам нужно переписать выходной поток. Если тип содержимого необычен или вы хотите проецировать другие заголовки (например, для кэширования) в браузер, то вам нужно будет использовать Curl, захватывать заголовки и передавать их.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector