PHP - 上传后删除文件

时间:2014-11-10 15:50:01

标签: php ajax file-upload

我开发了一个小工具,允许用户上传HTML文件。上传后,我运行一个Ajax请求,获取该HTML文件的内容并将其输出到textarea。

PHP:

if (move_uploaded_file($src, $dest . $uploadfile)) 
{       
    echo $uploadfile;   
} 
else 
{
    echo "Error Uploading file";
}

的Ajax:

$.get( "uploads/" + response, function(data) {
    $('#output').text(data);                                    
}); 

到目前为止一切正常。

现在我要做的是在内容输出到textarea后删除该文件。我知道我可以创建一个cron作业来每X分钟执行一次脚本,但是我宁愿在那里做它。

我尝试使用以下内容,但自然会在执行Ajax请求之前删除该文件。

if (move_uploaded_file($src, $dest . $uploadfile)) 
{       
    echo $uploadfile;   

    if($delete) {  // $delete is a boolean argument for the function        
        unlink($dest . $uploadfile);
    }
} 

那么,一旦检索到内容,我将如何删除文件?第一个请求完成后,我是否会创建另一个Ajax请求来执行删除功能?或者我有办法一次性完成这一切吗?

1 个答案:

答案 0 :(得分:3)

向php文件发出aax请求,回复内容然后删除文件:

//ajax
$.get( "/get-file.php?file=uploads/" + response, function(data) {
    $('#output').text(data);                                    
});

//get-file.php

$file=$_GET['file'];
echo file_get_contents($file);
unlink($file);

请注意,有一些与读取用户提交的文件名有关的安全问题(他们可以传入安全文件的文件路径,例如" passwords.php")。

最好是从SESSION存储和检索值:

if (move_uploaded_file($src, $dest . $uploadfile)) 
{       
    $_SESSION['uploadedfile']=$dest . $uploadfile;
    echo 'success';//the return is no longer used   
} 
else 
{
    echo "Error Uploading file";
}

//ajax
$.get( "/get-file.php, function(data) {
    $('#output').text(data);                                    
});

//get-file.php

$file=$_SESSION['uploadedfile'];
echo file_get_contents($file);
unlink($file);