0

ユーザーがファイル (テキスト ドキュメント) をアップロードできるフォームを作成しました。time() とユーザー ID を組み合わせた一意の (?) ファイル名を使用しています (ログインしているユーザーのみがアップロードできます)。

私の問題は、ファイルに外部からアクセスできないことです。つまり、アップロードしたユーザーまたは管理者のみが閲覧できますが、www.domain.com/uploads/file_name.txt と入力するだけではアクセスできません。

htaccessでファイルへのアクセスを防止できることはわかっていますが、正しく理解していれば、管理者(またはファイルを送信したユーザー)としてログインしても開くことができませんでした。PHP を介してローカルでファイルを開くことができるので、管理パネルからコンテンツを表示できることはわかっていますが、問題なくプレーン テキスト ファイルしか出力できなかったので、それは苦痛です。また、ファイルをダウンロードできませんでした。

場合によっては、オンザフライの pdf または rtf バージョンを生成することもできますが、複雑な方法でコンテンツを詳しく説明する必要があるため、それは非常に長い道のりです。とにかく、最も一般的なケースである可能性が高いWordまたはOpenOfficeファイルを処理する方法、および書式設定やその他の可能な機能を失わないようにする方法がわかりません.

何か案は?

4

1 に答える 1

1

www.domain.com/download.php?file=...のように、ログインしているユーザーのダウンロードリンクを表示してみませんか。コードは次のようになります。

if( isset($_GET['file']) && user_is_logged_in() ) {
  $file = DIR_SOME_WHERE .'/'. basename($_GET['file']);
  if( file_exists($file) && user_has_file_access( $file ) ) {
    header('Content-Description: File Transfer');
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.basename($file));
    header('Expires: 0');
    header('Cache-Control: must-revalidate');
    header('Content-Length: ' . filesize($file));
    ob_clean();
    flush();
    readfile($file);
    exit;
  }
}
于 2012-08-13T10:40:19.397 に答える