BIRT 4.5 - 禁止在 report.rptdesign、PHP 内保存连接字符串以分配连接字符串
BIRT 4.5 - Disable saving connectstring inside report.rptdesign, PHP to assign connectstring
我正在使用 Birt 4.5 和 PHP/MYSQL.
我可以 运行 与 php 进行 birt 报告。我已启用 tomcat 并将 'birt-runtime-4_5_0/WebViewerExample' 复制到 tomcat/webapps 并将其重命名为 birt.
所以我可以 运行 birt 查看器 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 文件的数据源。
谢谢,
苏朋
我不认为使用报表参数来处理数据库连接是正确的方法。除了你提到的地址栏问题,它还会导致意想不到的问题:例如你将无法使用此数据库来提供另一个报表参数的数据集。
使用 Tomcat 最好的方法是在 connection pool 中外部化数据库连接:简单、健壮,并且报告可能 运行 明显更快。
或者,数据源可以在 BIRT 库 (.rptlibrary) 中外部化并在所有报表设计中共享:因此,当数据库位置发生变化时,只需要更新库。
我同意 Dominique 的观点,即通过查询发送数据库参数很可能是一个不合适的解决方案 - 您没有给出任何解释这是否是系统的要求。
但是通过 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;
如果返回的内容包含相关链接,您将需要重写输出流。如果内容类型不常见或者您想将其他 headers(例如用于缓存)投射到浏览器,那么您将需要使用 Curl,捕获 headers 并转发它们。
我正在使用 Birt 4.5 和 PHP/MYSQL.
我可以 运行 与 php 进行 birt 报告。我已启用 tomcat 并将 'birt-runtime-4_5_0/WebViewerExample' 复制到 tomcat/webapps 并将其重命名为 birt.
所以我可以 运行 birt 查看器 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 文件的数据源。
谢谢,
苏朋
我不认为使用报表参数来处理数据库连接是正确的方法。除了你提到的地址栏问题,它还会导致意想不到的问题:例如你将无法使用此数据库来提供另一个报表参数的数据集。
使用 Tomcat 最好的方法是在 connection pool 中外部化数据库连接:简单、健壮,并且报告可能 运行 明显更快。
或者,数据源可以在 BIRT 库 (.rptlibrary) 中外部化并在所有报表设计中共享:因此,当数据库位置发生变化时,只需要更新库。
我同意 Dominique 的观点,即通过查询发送数据库参数很可能是一个不合适的解决方案 - 您没有给出任何解释这是否是系统的要求。
但是通过 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;
如果返回的内容包含相关链接,您将需要重写输出流。如果内容类型不常见或者您想将其他 headers(例如用于缓存)投射到浏览器,那么您将需要使用 Curl,捕获 headers 并转发它们。