2017-04-06 5 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:

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

$file = $_POST['file']; 

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

} 

//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); 

しかし、私は、後でこれを使用して、第2の(またはそれ以上)を削除しようとすると、

エラーが発生します。最初に私がこれに正しい方法で近づいているのが不思議です。そうでない場合は、より良い方法がありますか?次に、私がこのエラーを受けている理由と、それを機能させるために変更する必要があるのか​​と思います。

+0

あなたが書いたコードは、このコードを持つスクリプトを含むすべてのファイルを削除できるようにしています。 – Augwa

+0

別の方法でtxtファイルを生成し、ユーザーがダウンロードして削除できるようにしますか? – Sadie

+0

なぜファイルを保存する必要があるのか​​分かりません。 – Augwa

答えて

0

私は実行中のPHPスクリプトが作成されたファイルを削除できるかどうかを確認するサーバーのアクセス許可を確認します。あなたは、UNIXベースのスクリプト上にある場合、私はあなたがアクセス権がそれらに割り当てられているかを確認するために、中にファイルを格納しているディレクトリに

ls -l /usr/var/ 

コマンドを実行します。

0

私は、ファイルが作成されてから、後で私の場合24時間で削除されるようなことをしました。しかし、私がやったのは、ある期間よりも古いファイルを見つけて削除するためのcronジョブを設定することでした。そうすれば、削除要求をポストバックするブラウザに依存する必要はありません。

もう1つの方法は、セッションの終了時にセッションに関連付けられたファイルを削除するカスタムセッションハンドラを設定することです。ユーザーが正式にログアウトしていないと、それによって嘘が残ることがあります。

また、ファイルデータをMySQLのCLOBに保存しておいて、ある期間後にそれらを強制終了するクエリを設定することもできます。

カサンドラを使用したいと思えば、行にTTLを設定すると魔法のように消えます。

オペレーティングシステムファイルにロックインされないでください。自分のページで提供されるデータを制御するので、データを返信して「ファイル」と呼ぶ場合、ユーザーは実際にはデータベースエントリであることを知らないでしょう。

関連する問題