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 スクリプトが最初にそれ自体を実行してからバッファーをエコーするため、既に削除されているため、Google ビューアーがファイルを見つけられないことです。flush() を使用しても役に立ちません。

回避策の 1 つは、「リンク解除」コマンドを削除し、cron ジョブを作成して一時フォルダー内のすべてのファイルを削除することです (たとえば、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 行目のコメントを見て) メールの添付ファイルを表示しようとしていると思います。できることは、Google がファイルを検索するためのファイル URL を動的に作成することです。あなたがすることは、ファイルをロード/ダウンロードしてファイルをプッシュバックする「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; 

その他のファイルの場合は、コンテンツ タイプ ヘッダーを変更するだけです。

于 2012-05-21T11:38:58.587 に答える