一个新问题-我需要将PHP生成的文件(具体为tcpdf)的文件名设置为变量$number。目前,我已经写了它,每次放置相同的文件名。
-
如何将下载的文件名设置为generaterreport .php中设置的变量?
-
我如何通过变量从报告。php报告。php?
有两个文件:
generaterreport .php创建报告
reports.php接收来自网页的请求并提供生成的下载文件
下面是我的代码:在generaterreport .php中,这是使用tcpdf生成的文件
$string = $pdf->Output(’Site '.$number.' '.$date.'.pdf', 'S');
return $string;
在report.php: function downloadFile($data,$name) {
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Disposition: attachment; filename=$name");
header("Content-Type: mime/type");
header("Content-Transfer-Encoding: binary");
// UPDATE: Add the below line to show file size during download.
header('Content-Length: ' . strlen($data));
echo $data;
}
if (isset($_GET['reportType'])) {
switch ($_GET['reportType']) {
case 'report3':
downloadFile(reports::report3($_GET['id']),"report.pdf");
break;
case 'report1':
downloadFile(reports::xlsReport1($_GET['id']),"report1.xlsx");
break;
}
}
谢谢!
你可以试试这样做…
修改generatereport.php
返回一个包含两个元素的数组,第一个是文件名,第二个是数据:
$filename = 'Site '.$number.' '.$date.'.pdf';
$string = $pdf->Output($filename, 'S');
return array($string, $filename);
然后修改report.php
中的第二段代码来处理新的返回类型:
if (isset($_GET['reportType'])) {
switch ($_GET['reportType']) {
case 'report3':
list($data, $filename) = reports::report3($_GET['id']);
downloadFile($data, $filename);
break;
case 'report1':
list($data, $filename) = reports::xlsReport1($_GET['id']);
downloadFile($data, $filename);
break;
}
}
这假定您更改了XLS生成函数,使其返回一个包含数据和文件名的数组。
我不是100%清楚你的代码结构,但解决你的问题的基本元素是返回一个数组的想法,而不是从报告生成函数的字符串,其中数组的一个元素包含数据和其他元素包含文件名。
在处理这类问题无数次之后,我还可以提出另外两个可能需要改进的地方。
第一个是文件路径。除非应用程序的每个文件都在同一个文件夹中,包括临时文件(这将是一个非常糟糕的主意),否则您将希望传递回包含一些路径信息的文件名(例如。"临时/reportfiles/report3.pdf")。但是,当您在输出头中设置名称时,您将只需要文件名部分,例如。report3.pdf。因此,您可能想要更改downloadFile()
方法中的一行代码,如下所示:
header("Content-Disposition: attachment; filename=" . basename($name));
最后,当您设置MIME类型时,您需要将其设置为实际类型。有许多方法可以确定MIME类型,但我倾向于使用以下帮助函数:
function getMimeType( $filename )
{
switch( pathinfo( $filename, PATHINFO_EXTENSION ))
{
case 'csv':
return 'text/csv';
case 'pptx':
return 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
case 'pdf':
return 'application/pdf';
case 'xls':
return 'application/vnd.ms-excel';
case 'png':
case 'jpg':
case 'jpeg':
case 'gif':
return 'application/image';
case 'zip':
return 'application/zip';
default:
return 'application/octet-stream';
}
}
您需要更改downloadFile()
中的以下行以使用此函数:
header("Content-Type: " . getMimeType($name));
我希望所有的帮助。祝你好运!