如何使用PHP脚本

如何使用PHP脚本

问题描述:

IM产生从PHP脚本的每日报告下载特定文件(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 

和IM发送我的用户链接的电子邮件下载时,一旦他们点击下载链接,下载脚本触发并准备下载。它目前将所有文件放到一个数组中并对其进行排序并找到最新的下载内容,

此方法在其中有一个流,即使您转到旧的电子邮件2周并点击下载链接,它会给你最新的报告,而不是给出两周前的报告。

所以,有人可以告诉我一种方式发送我的电子邮件中的下载链接与其对应文件的关系吗?

电子邮件的脚本

$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"; 
    } 

下载脚本

$basePath = "$download/dailyReport/"; 
$csvFiles = glob($basePath."/*.csv"); 
if(count($csvFiles)){ 
    array_multisort($csvFiles, SORT_DESC); 
    $csvFile = $csvFiles[0]; 
}else{ 
    exit("Server error!"); 
} 

$h = fopen($csvFile, "r"); 
$contents = fread($h, filesize($csvFile)); 
+0

向包含报告日期的URL添加一个参数,并在下载脚本中使用该参数,而不是仅返回最新的参数。 – Barmar 2015-03-03 06:28:22

+0

我用它..人们说它不安全!这可能会对我的服务器造成注入攻击 – 2015-03-03 06:30:49

+0

检查参数的格式,确保它只是日期,没有别的。 – Barmar 2015-03-03 06:39:42

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

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

+0

我用它..人们说它不安全!这可能会对我的服务器造成注入攻击 – 2015-03-03 06:31:30

+0

您不存储在查询参数中发送的信息或将它存储在任何地方。你只是用它来解决报告。所以我不明白这会如何导致注入攻击。 – Akhilesh 2015-03-03 06:35:01

+0

好吧然后等待虐待尝试..谢谢你的回复 – 2015-03-03 06:41:02

你可以使用类似的东西作为下载脚本。我做只是minum变化得到它的工作:

$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文件之一。

+0

感谢您的答复..虐待和让我们knw – 2015-03-03 06:55:34