我用PHP生成* .csv文件,效果很好。問題是,它包含一堆敏感數據。我已經非常仔細地完成了我的權限,所以如果不是正確的用戶,就無法進入下載鏈接或生成文件。 我碰到的問題是,在用戶下載文件後,文件需要立即刪除。機會是很小的,我知道,有人會坐在那裏掃描我的網站結構,但數據是足夠重要的地方,我想包括我的屁股:-)如何下載,然後用PHP刪除我的網站上的文件?
我有這個起初:
<a href="<?php echo base_path().$ourFileName ?>"><?=$ourFileName?></a>
這對於下載文件非常有用,但我很難用它做任何類型的動作,因爲如果您將PHP代碼嵌入到OnClick =「」中,它將在點擊發生之前執行,因爲所有PHP代碼在處理HTML和JAVASCRIPT之前呈現在服務器端......對嗎?我搜索了互聯網,它似乎沒有得到JavaScript來讓燙髮刪除文件......不過,我可能是錯的。
所以我把我的鏈接到一個表格:
<?PHP
if(isset($_POST['submit']))
{
header("Location: ".base_path().$ourFileName);
unlink(base_path().$ourFileName);
}?>
<form action="<? $PHP_SELF ?>" method="post">
<input type="submit" value="Submit" name="submit">
</form>
但很明顯,取消鏈接()將永遠不會到達,因爲頭的......至少我覺得... 有另一種方式除了header()將文件下載到它們? 我知道我可以只運行一個cron作業每分鐘或東西,只是:
rm -rf *.csv
而且,將採取這一問題的關心,但是如果用戶在下載文件和cron啓動的過程中會發生什麼跑步?或者頁面已生成,但由於某種原因,它們不會點擊鏈接一段時間?
也許有一些方法來配置我的.htaccess文件,所以你只能訪問該文件,如果從一個頁面鏈接?
我是否過分複雜呢?
interweb的任何創意大師?
--edit 每受歡迎的建議下,我工作的新報頭格式,使代碼看起來是這樣的:
<?PHP if(isset($_POST['submit']) && ($user->uid))
{
myroom_render_csv($ourFileName, $csv_string);
}?>
<form action="<? $PHP_SELF ?>" method="post">
<input type="submit" value="Submit" name="submit">
</form>
並在一個單獨的文件:
<?PHP function myroom_render_csv($file_name, $csv_string) {
header('Content-type: text/csv');
$header_string2="Content-Disposition: attachment; filename=\"".$file_name."\"";
header($header_string2);
echo $csv_string;
} ?>
,但我獲取完整HTML頁面和CSV數據的轉儲。想法?
請注意,「text/csv」的行爲並不像您期望的那樣普遍。我實際上並不記得它是以什麼方式圍繞它,而是ISTR,例如FF或IE以某種意想不到的方式行事,除非CSV數據以「text/plain」形式呈現。或者可能是'application/csv'。在多個瀏覽器中查看最適合您的內容。 –
如果數據量非常大(如果你問我的話,增加單個腳本的內存限制是一個壞主意),那麼轉儲完整變量可能會有問題 更好的方法是寫入'php:// out'與PHP 5.1 +你有[fputcsv](http://es.php.net/fputcsv),它爲你做的大部分工作 – rmontagud
我一直在努力實現你的功能的想法,我知道我必須做的有些愚蠢,因爲我無法得到它。 我很好地獲得了CSV數據,它的格式非常正確,但我也獲得了HTML頁面的完整轉儲。 應該如何調用? – TopherGopher