生成Crystal Reports报告的代码在CLI中工作正常,但从浏览器访问时"找不到数据源名称"

log*_*oke 6 php com command report crystal-reports

我正在尝试使用Crystal Reports生成PHP报告,代码似乎是正确的:

<?php
set_time_limit(0);
if(isset($_GET['id']))
{
$id = $_GET['id'];
} else {
die('Please specify an ID');
}

$path = "c:\\wamp\\www\\billing\\reports";
$file = $chemin."\\bill_".$id.".pdf";
$app_obj = new COM("CrystalRuntime.Application") or Die ("Did not open");
$report= $path."\\bill.rpt";

$rpt_obj= $app_obj->OpenReport($report,1);
$app_obj->LogOnServer("p2ssql.dll","host","bdd","userbd","passwordbd");
$rpt_obj->EnableParameterPrompting = FALSE;
$rpt_obj->RecordSelectionFormula = "{F_DOCLIGNE.DO_Piece}='$id'";

$rpt_obj->ExportOptions->DiskFileName =  $file;
$rpt_obj->ExportOptions->PDFExportAllPages = true;
$rpt_obj->ExportOptions->DestinationType = 1;
$rpt_obj->ExportOptions->FormatType = 31; 
$rpt_obj->Export(false);

header("Content-Type: application/pdf");
readfile($file);
?>
Run Code Online (Sandbox Code Playgroud)

如果我从命令行运行脚本,它运行正常,我在控制台中导出和解析PDF.

但是从浏览器的角度来看,故事是不同的,如果你通过Apache获得请求,我会得到以下异常:

com_exception: Source: Crystal Reports ActiveX Designer
Details : IM002:[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified in C:\wamp\www\facture\report.php on line 25
Run Code Online (Sandbox Code Playgroud)

在报告中,数据库连接是通过ODBC进行的,我无法使用它,因为任何其他驱动程序,标有ODBC拒绝工作.


Pao*_*fan 0

我看到你用的是Wamp。此行为很可能与运行 Web 服务器 (Apache) 的用户有关。

当您从 CLI 运行 PHP 时,PHP.exe 会继承您的用户配置文件(就数据库/网络/文件系统访问权限而言);另一方面,通常 Apache(以及 IIS)在不同的非特权凭据下运行,以防止黑客破坏和利用服务器。

在 Apache 中,您可以通过修改httpd.confApache 配置文件(在您的情况下它可能位于 下C:\wamp\apache\conf)、更改User和/或Groupconfig 指令来更改此行为。