2017-04-06 38 views
1

我有一個網站,我希望用戶能夠下載一些數據作爲文本文件,而不永久保存在我的服務器上的文件。我嘗試的方法是使用JavaScript發送POST,使用PHP來生成並保存文本文件。一旦成功,JavaScript將在單獨的窗口中打開該文件。延遲幾秒後,它將發送一個POST文件以刪除。試圖生成一個臨時的txt文件,然後刪除它

我大部分工作,但由於某種原因,當我嘗試刪除文件時,我不斷收到錯誤 - 沒有這樣的文件或目錄。我不知道爲什麼,特別是因爲使用測試文件刪除在同一目錄中工作正常。下面是我使用的JavaScript端的內容:

////CREATE FILE 
    function exportGroup() { 

$.post("../Modules/Export_Mod/export_mod.php", 
{ submit:'export', 
    groupIndex: groupSelect.value, 
    userRole: 'admin', 
    serial: <?php echo $serial;?> 
}, 
function(data,status){ 

//open created file in new window 
window.open("../Modules/Export_Mod/"+data); 

removeExport(data); 
}); 

}; 



//////REMOVE FILE 
    function removeExport(filename) { 
///After 1 second, send post to delete file 
setTimeout(function() { 
      $.post("../Modules/Export_Mod/export_mod.php", 
      { submit:'removeExport', 
       file: filename 


      }, 
      function(data,status){ 
      data; 

      }); 
}, 1000); 

} 

和我的PHP:

//I'm creating the file successfully with this 
... 
$filename = $groupName."_group_export.txt"; 
$content = $header.$dataStr; 
$strlength = strlen($content); 
$create = fopen($filename, "w"); 
$write = fwrite($create, $content, $strlength); 
$close = fclose($create); 

但是,當我試圖刪除第二個(或以上)以後通過此:

if (($_POST)&&($_POST['submit']=='removeExport')){ 

$file = $_POST['file']; 

unlink($file); ///works when using an already-existing file in the same directory ... unlink('test.txt'); 

} 

我得到錯誤。我想知道的第一件事是如果我以正確的方式接近這一點。如果沒有,有沒有更好的方法來做到這一點?然後我想知道的第二件事是爲什麼我得到這個錯誤,以及爲了使它工作需要改變。

+0

您編寫的代碼允許刪除任何文件,包括具有此代碼的腳本。 – Augwa

+0

有沒有另一種方法來生成一個txt文件,允許用戶下載它,然後刪除它? – Sadie

+0

我不明白你爲什麼需要存儲任何文件。 – Augwa

回答

0

我會檢查服務器的權限,看看正在運行的php腳本是否能夠刪除創建的文件。如果你是一個基於UNIX腳本我會運行您所存儲的文件的目錄,

ls -l /usr/var/ 

命令,看看有什麼權限已被分配給他們。

0

我已經做了類似的事情,其中​​一個文件被創建,然後在一段時間後刪除,在我的情況下24小時。但是我所做的是設置一個cron作業來查找超過一段時間的文件,然後刪除它們。這樣我就不必依賴瀏覽器回發刪除請求。

另一種方法是設置一個自定義會話處理程序,在會話結束時刪除與會話相關的文件。儘管如果用戶沒有正式註銷,這可能會導致謊言。

,你可以繼續在MySQL中的CLOB文件數據,然後建立了一個時期後,殺死他們的查詢。如果你想使用Cassandra,你可以在一行上設置一個TTL,它會奇蹟般的消失。

請勿鎖定到操作系統文件。您可以控制網頁提供的數據,因此如果要發回數據並將其稱爲「文件」,用戶將永遠不會知道它實際上是數據庫條目。

相關問題