Php 生成Crystal Reports的代码在CLI中运行良好,但是;“未找到数据源名称”;从浏览器访问时

Php 生成Crystal Reports的代码在CLI中运行良好,但是;“未找到数据源名称”;从浏览器访问时,php,com,crystal-reports,command,report,Php,Com,Crystal Reports,Command,Report,我正在尝试使用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 = n

我正在尝试使用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);
?>
在报告中,数据库连接是通过ODBC进行的,我无法使用它,因为任何其他标记为ODBC的驱动程序都拒绝工作



我看到您正在使用Wamp。这种行为很可能与运行web服务器(Apache)的用户有关

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


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

您可能需要设置一些环境变量。下面是为了使用不同的ODBC驱动程序(注意:在OSX上)而必须设置的内容



您正在危险地使用
$\u GET['id']
而没有进行验证:例如,如果我输入
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\foo
我可以从web根目录中退出。这仅用于开发目的,当它起作用时,我将添加所有条件以确保没有错误。但是谢谢你!水晶报告是魔鬼的产物。远离它:)从PHP本机生成报告有什么好的选择?提前感谢是与web服务器(Apache)在同一台计算机上的“来自命令行的脚本”?感谢您的回答Paolo,我尝试了它,但没有成功。@Logicbloke这可能是由于php.ini ODBC默认连接设置造成的。
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
<?php
    putenv("ODBCINSTINI=/path/to/odbcinst.ini");
    putenv("ODBCINI=/path/to/odbc.ini");
?>