我有一个php scipt,它接受一个日期作为输入,从mysql表中获取数据,并显示与页面上检索到的数据有关的各种参数的摘要。它还生成包含格式化数据的文本文件,并为其提供donload链接。
我担心的是,每次调用此页面时,都会为该日期创建一个文本文件并存储在服务器中。我必须手动删除它。相反,我想动态创建文本文件,并在用户下载后将其删除。脚本如下。
<?php
$db=mysql_select_db($database_met,$met) or die("could not connect");
if(isset($_POST['from'])){
$newdate = strtotime ( '-1 day' , strtotime ( $_POST['stddate'] ) ) ;
$fromdate= date('Y-m-d', $newdate)." 01:00:00";
$todate=$_POST['stddate']." 00:00:00";
//echo $fromdate."</br>".$todate;
//$datetime=$_POST['stddate']."00:00";
$result=mysql_query(" SELECT Max(temp_max_60) as maxtemp60, Min(temp_min_60) as mintemp60, Max(temp_max_10) as maxtemp10, Min(temp_min_10) as mintemp10, Max(rh_max) as maxrh, Min(rh_min) as minrh, Max(speed_max_60) as maxspeed60, sum(case when speed_avg_60 < 0.83 then 1 else 0 end) as calm, count(*) as readings from tower_log where date between '$fromdate' and '$todate'");
$pdr=mysql_query(" SELECT dir_avg_60 from tower_log where date between '$fromdate' and '$todate'");
}
else{
$newdate = strtotime ( '-1 day' , strtotime ( $altto ) ) ;
$fromdate= date('Y-m-d', $newdate)." 01:00:00";
$todate=$altto." 00:00:00";
$result=mysql_query(" SELECT Max(temp_max_60) as maxtemp60, Min(temp_min_60) as mintemp60, Max(temp_max_10) as maxtemp10, Min(temp_min_10) as mintemp10, Max(rh_max) as maxrh, Min(rh_min) as minrh, Max(speed_max_60) as maxspeed60, sum(case when speed_avg_60 < 0.83 then 1 else 0 end) as calm, count(*) as readings from tower_log where date between '$fromdate' and '$todate'");
$pdr=mysql_query(" SELECT dir_avg_60 from tower_log where date between '$fromdate' and '$todate'");
}
$fd=array();
$fd = array(
array(
'sector' => 'N',
'freq' => 0
),
array(
'sector' => 'NNE',
'freq' => 0),
array(
'sector' => 'NE',
'freq' => 0),
array(
'sector' => 'ENE',
'freq' => 0),
array(
'sector' => 'E',
'freq' => 0),
array(
'sector' => 'ESE',
'freq' => 0),
array(
'sector' => 'SE',
'freq' => 0),
array(
'sector' => 'SSE',
'freq' => 0),
array(
'sector' => 'S',
'freq' => 0),
array(
'sector' => 'SSW',
'freq' => 0),
array(
'sector' => 'SW',
'freq' => 0),
array(
'sector' => 'WSW',
'freq' => 0),
array(
'sector' => 'W',
'freq' => 0),
array(
'sector' => 'WNW',
'freq' => 0),
array(
'sector' => 'NW',
'freq' => 0),
array(
'sector' => 'NNW',
'freq' => 0),
);
$a=$b=$c=$d=$e=$f=$g=$h=$i=$j=$k=$l=$m=$n=$o=$p=0;
while($result_pdr=mysql_fetch_array($pdr)){
$dir=$result_pdr['dir_avg_60'];
switch ($dir){
case ($dir<11.25 || $dir>348.75):
$fd[0]['freq']++;
break;
case ($dir>=11.25 && $dir<33.75):
$fd[1]['freq']++;
break;
case ($dir>=33.75 && $dir<56.25):
$fd[2]['freq']++;
break;
case ($dir>=56.25 && $dir<78.75):
$fd[3]['freq']++;
break;
case ($dir>=78.75 && $dir<101.25):
$fd[4]['freq']++;
break;
case ($dir>=101.25 && $dir<123.75):
$fd[5]['freq']++;
break;
case ($dir>=123.75 && $dir<146.25):
$fd[6]['freq']++;
break;
case ($dir>=146.25 && $dir<168.75):
$fd[7]['freq']++;
break;
case ($dir>=168.75 && $dir<191.25):
$fd[8]['freq']++;
break;
case ($dir>=191.25 && $dir<213.75):
$fd[9]['freq']++;
break;
case ($dir>=213.75 && $dir<236.25):
$fd[10]['freq']++;
break;
case ($dir>=236.25 && $dir<258.75):
$fd[11]['freq']++;
break;
case ($dir>=258.75 && $dir<281.25):
$fd[12]['freq']++;
break;
case ($dir>=281.25 && $dir<303.75):
$fd[13]['freq']++;
break;
case ($dir>=303.75 && $dir<326.25):
$fd[14]['freq']++;
break;
case ($dir>=326.25 && $dir<348.75):
$fd[15]['freq']++;
break;
}
}
function get_highest($arr)
{
foreach($arr as $key => $val)
{
if ( is_array($val) ) $arr[$key] = get_highest( $val );
}
sort($arr);
return array_pop($arr);
}
$num_records=mysql_num_rows($result);
//echo $newdate;
$record=mysql_fetch_array($result);
echo "<div></br></br></br>";
if(isset($_POST['from'])){
echo "Date:".date('d-m-Y', $newdate)."</br>";}
else{"Date:".date('d.m.Y',strtotime("-1 days"))."</br>";}
echo "No. of readings".$record['readings']."</br></br></br>";
echo "</div>";
echo "<table class='altrowstable'>";
echo "<tr><th rowspan='2'>Max. Wind Speed m.s<sup>-1</sup></th><th rowspan='2'>Calm(%)</th><th colspan='2'>Temp. 10m</th><th colspan='2'>Temp. 60m</th><th colspan='2'>Humidity</th></tr><tr><th>Min</th><th>Max</th><th>Min</th><th>Max</th><th>Min</th><th>Max</th</tr>";
echo "<tr><td>".$record['maxspeed60']."</td><td>".number_format($record['calm']*100/$record['readings'],1)."</td>";
//echo "</table>";
//echo "<br/><table class='altrowstable'>";
//echo "<tr><th></th><th>Max. </sup></th><th>Min</th></tr>";
echo "<td>".$record['maxtemp10']."</td><td>".$record['mintemp10']."</td>";
echo "<td>".$record['maxtemp60']."</td><td>".$record['mintemp60']."</td>";
echo "<td>".$record['maxrh']."</td><td>".$record['minrh']."</td></tr>";
echo "</table></br>";
$highval= get_highest($fd);
ksort($fd);
echo "<table class='altrowstable'>";
echo "<tr><td>Sector</td>";
foreach ($fd as $key => $value) {
if($fd[$key]['freq']==$highval){echo "<td class='pdr'>";} else { echo "<td>";}
echo $fd[$key]['sector']."</td>";
}
echo "</tr><tr><td>No.of Occurances</td>";
foreach ($fd as $key => $value) {
if($fd[$key]['freq']==$highval){echo "<td class='pdr'>";} else { echo "<td>";}
echo $fd[$key]['freq']."</td>";
}
echo "</tr></table>";
$knt=mysql_query("SELECT *from tower_log where date between '$fromdate' and '$todate' ");
$new_knt="reports/".substr($fromdate,0,4).substr($fromdate,5,2).substr($fromdate,8,2).".knt";
$knt_handle=fopen($new_knt,"w");
while ($knt_rec=mysql_fetch_array($knt)){
$datestring= "DD".substr($knt_rec['date'],8,2).substr($knt_rec['date'],5,2).substr($knt_rec['date'],0,4).substr($knt_rec['date'],11,2)."00";
$line=$datestring." ". sprintf('%03d',$knt_rec[1])." ".sprintf('%03d',$knt_rec[2])." ".sprintf('%03d',$knt_rec[3])." ".sprintf('%03d',$knt_rec[4])." ".sprintf('%03d',$knt_rec[5])." ".sprintf('%03d',$knt_rec[6])." ".sprintf('%03d',$knt_rec[7])." ".sprintf('%03d',$knt_rec[8])." "." ".sprintf('%04.1f',$knt_rec[9])." ".sprintf('%04.1f',$knt_rec[10])." ".sprintf('%04.1f',$knt_rec[11])." ".sprintf('%04.1f',$knt_rec[12])." ".sprintf('%04.1f',$knt_rec[13])." ".sprintf('%04.1f',$knt_rec[14])." ".sprintf('%04.1f',$knt_rec[15])." ".sprintf('%04.1f',$knt_rec[16])." ".sprintf('%04.1f',$knt_rec[17])." ".sprintf('%04.1f',$knt_rec[18])." ".sprintf('%04.1f',$knt_rec[19])." ".sprintf('%04.1f',$knt_rec[20])." ".sprintf('%04.1f',$knt_rec[21])." ".sprintf('%04.1f',$knt_rec[22])." ".sprintf('%04.1f',$knt_rec[23])." ".sprintf('%04.1f',$knt_rec[24])." ".sprintf('%04.1f',$knt_rec[25])." ".sprintf('%04.1f',$knt_rec[26])." ".sprintf('%04.1f',$knt_rec[27])." ".sprintf('%04.1f',$knt_rec[28])." ".sprintf('%04.1f',$knt_rec[29])." ".sprintf('%04.1f',$knt_rec[30])." ".sprintf('%04.1f',$knt_rec[31])." ".sprintf('%04.1f',$knt_rec[32])." ".sprintf('%04.1f',$knt_rec[33])." ".sprintf('%04.1f',$knt_rec[34])." ".sprintf('%04.1f',$knt_rec[35])." ".sprintf('%04.1f',$knt_rec[36])." ".sprintf('%04.1f',$knt_rec[37])." ".sprintf('%04.1f',$knt_rec[38])." ".sprintf('%04.1f',$knt_rec[39])." ".sprintf('%04.1f',$knt_rec[40])." ".sprintf('%04.1f',$knt_rec[41])." ".sprintf('%04.1f',$knt_rec[42])." ".sprintf('%04.1f',$knt_rec[43])." ".sprintf('%04.1f',$knt_rec[44])." ".sprintf('%04.1f',$knt_rec[45]);
$new_line=$line."\r\n";
fwrite($knt_handle,$new_line);
}
echo '<br/><br/><a href="/Dept/esl/'.$new_knt.'">Download KNT File</a>';
?>
我怀疑我的问题是否存在歧义。已使用fopen行创建文本文件。我想删除该文件或需要另一种方式来下载数据
答案 0 :(得分:0)
也许使用unlink('Path_of_your_text_file')?
当您的用户点击“下载”时,将文件的路径存储在某处,如果只是一个简单的文本,请在5分钟后删除您的文件?与CRON或不知道...
编辑:
尝试此代码(并适应您的代码):
header('Content-type: application/zip');
header('Content-Length: ' . filesize($file));
header("Content-Disposition: attachment; filename="file.zip");
readfile($file);
ignore_user_abort(true);
if (connection_aborted()) {
unlink('YOUR_FILE');
}
答案 1 :(得分:0)
您可以尝试下载文件
header ("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename='".$filename."'");
header("Content-Transfer-Encoding: binary");
@readfile($filepath);