如何使用php脚本下载特定文件(csv)

如何使用php脚本下载特定文件(csv),php,csv,download,Php,Csv,Download,我从一个php脚本生成一份每日报告,它位于一个文件夹中,如下所示 report_2015_02_15.csv report_2015_02_16.csv report_2015_02_17.csv report_2015_02_18.csv report_2015_02_19.csv 我会给我的用户发送一封包含下载链接的电子邮件,一旦他们点击下载链接,下载脚本就会触发并准备下载。它当前将所有文件放入一个数组中,对其进行排序并查找最新的下载文件 这种方法有一个流程,即使你打开一封两周前的电子邮件

我从一个php脚本生成一份每日报告,它位于一个文件夹中,如下所示

report_2015_02_15.csv
report_2015_02_16.csv
report_2015_02_17.csv
report_2015_02_18.csv
report_2015_02_19.csv
我会给我的用户发送一封包含下载链接的电子邮件,一旦他们点击下载链接,下载脚本就会触发并准备下载。它当前将所有文件放入一个数组中,对其进行排序并查找最新的下载文件

这种方法有一个流程,即使你打开一封两周前的电子邮件并点击下载链接,它也会给你最新的报告,而不是两周前的报告

那么,有人能告诉我一种方法来发送电子邮件中的下载链接,并与相应的文件建立关系吗?

电子邮件脚本

$down_link = Config_Reader::readProjectConfig('tad')->base_url.'CSVDownload.php;

$mail = new Zend_Mail ();
$sentFromEmail = $config->sentFromrec;
$tr = new Zend_Mail_Transport_Sendmail ( '-f' . $sentFromEmail );
Zend_Mail::setDefaultTransport ( $tr );
$mail->setReturnPath($sentFromEmail);
$mail->setFrom ( $sentFromEmail, 'Reporting' );

$email_body = "Hi,<br /><br />Download the weekly details of adtracker projects, by clicking the link below.
<br /> <a href=".$down_link.">Report</a><br /><br />Thank You.";

$mail->setBodyHtml ( $email_body );
$mail->addTo ( $weeklyReportRec);
$mail->setSubject ( "Report" );

try {
        $mail->send ();
    } catch ( Exception $e ) {
        echo "Mail sending failed.\n";
    }

您可以在下载链接上使用指示报告日期的查询参数/CSCDownload.php?日期=2015/02/17


这将允许您从可用列表中选择相应的报告。

您可以使用类似的内容作为下载脚本。为了让它工作,我只做了几分钟的更改:

$date = $_GET['date'];
$basePath = "$download/dailyReport/";
$csvFiles = glob($basePath."/*.csv");

$file = $basePath . 'report_' . $date . '.csv';
$found = false;

foreach($csvFiles as $csvFile){
    if($file === $csvFile){
        $found = $csvFile;
        // You have found the file, so you can stop searching
        break;
    }
}
if(false === $found){
    exit("Server error!");
}

$h = fopen($found, "r");
$contents = fread($h, filesize($found));

现在,您可以在浏览器中使用“example.com/getcsvfile.php?date=2015_02_15”调用脚本,而不用担心注入问题,因为您可以检查该文件是否为csv文件之一

在包含报告日期的URL中添加一个参数,并在下载脚本中使用该参数,而不是仅返回最新的参数。我使用了它。。人们说它不安全!!!这可能会对我的服务器造成注入攻击检查参数的格式,确保它只是日期,没有其他。是的,我理解,你的意思是将日期和数学文件名放在同一日期…谢谢你的回复。。我正在研究它我用过它。。人们说它不安全!!!这可能会对我的服务器发起注入攻击—您没有存储在查询参数中发送的信息,也没有将其存储在任何地方。你只是在用它来解决报告。所以我不认为这会导致注射攻击。
$date = $_GET['date'];
$basePath = "$download/dailyReport/";
$csvFiles = glob($basePath."/*.csv");

$file = $basePath . 'report_' . $date . '.csv';
$found = false;

foreach($csvFiles as $csvFile){
    if($file === $csvFile){
        $found = $csvFile;
        // You have found the file, so you can stop searching
        break;
    }
}
if(false === $found){
    exit("Server error!");
}

$h = fopen($found, "r");
$contents = fread($h, filesize($found));