【问题标题】:How do I Retrieve -> View -> Delete File in PHP?如何在 PHP 中检索 -> 查看 -> 删除文件?
【发布时间】:2012-05-21 11:30:10
【问题描述】:

这是一个从服务器检索文件(例如 .doc)的代码,将其存储在临时文件夹中,然后使用 api(例如 google 查看器)显示它,然后将其删除。

<?php 
$body = "....."; //data from imap server
$name = "abc.doc";

$file = fopen("temp/" . $name,'w'); 
fwrite($file,$body); 
fclose($file); 
$url = rawurlencode("http://www.xxx.com/temp/".$name); 
// I do not have a direct url to the file on the imap server, thus have to store it in a temporary folder

echo "<iframe src=\"http://docs.google.com/viewer?url={$url}&embedded=true\" width=\"100%\" height=\"100%\" style=\"border: none;\"></iframe>";

unlink("temp/".$name);
?>

现在的问题是,由于 php 脚本首先执行自身,然后回显缓冲区,因此 google 查看器无法找到该文件,因为它已被删除。使用 flush() 也无济于事。

一种解决方法是删除“取消链接”命令并创建一个 cron 作业以删除临时文件夹中的所有文件(例如每 2 分钟后)。有更好的方法吗?

【问题讨论】:

    标签: php download flush


    【解决方案1】:

    我会链接到

    echo "<iframe src=\"http://docs.google.com/viewer?url="http://www.domain.com/viewthis.php?name=abc.doc&embedded=true\" width=\"100%\" height=\"100%\" style=\"border: none;\"></iframe>";
    

    然后让 viewthis.php 流式传输文件...然后一旦提供,您就可以删除它。

    【讨论】:

    • 我试过这个但没有用。我更改了链接,其中 viewthis.php 是 $name = $_GET['name']; $data = file_get_contents('temp/'.$name); header('Content-Type: application/msword');回声 $data;
    • 问题是删除文件。如果我在与谷歌查看器相呼应的同一脚本中删除它,它将永远无法工作。我说的对吗??
    • 它应该将其流式传输到查看器,然后删除...uk.php.net/readfile 中的示例将向您展示如何...如果您这样做,它会将内容发送到浏览器,然后你取消链接它就会被送达。
    【解决方案2】:

    我假设(查看第 2 行的评论)您正在尝试查看邮件附件。您可以做的是动态创建一个文件 url 供 google 查找文件。你要做的是创建一个脚本,比如'view_file.php',它加载/下载文件并将文件推回,并带有一些自定义标题来告诉'浏览器'(google)它是什么类型的文件。这样您就不必保存文件。缺点是文件总是可以从外部访问,所以你仍然应该设置一个计时器或类似的东西。

    对于图像,您可以这样做:

    $im = file_get_contents('http://www.site.com/url_to_your_image'); // or any other function to retrieve the image data itself
    header('content-type: image/gif'); 
    echo $im; 
    

    对于任何其他文件,只需更改内容类型标题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-09
      • 1970-01-01
      • 2011-10-17
      • 2011-09-17
      • 1970-01-01
      • 2017-11-15
      • 1970-01-01
      • 2019-07-14
      相关资源
      最近更新 更多