0

这是一个从服务器检索文件(例如 .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 脚本首先执行自身,然后回显缓冲区,谷歌查看器无法找到该文件,因为它已经被删除。使用 flush() 也无济于事。

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

4

2 回答 2

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 流式传输文件......然后一旦它被送达,你就可以删除它。

于 2012-05-21T12:03:00.730 回答
0

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

对于图像,您可以执行以下操作:

$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; 

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

于 2012-05-21T11:38:58.587 回答