私はなど、これを行う簡単な方法は、ダウンロードするにはどのようなハンドルを別のスクリプトへのダウンロードリンクをリダイレクトすることだと思います基本的には、ダウンロードディレクトリを設定し、いくつかの書き換えルールを追加してから、何が出力されるかを処理するスクリプトを作成します。 (未テスト)このような
何か:
/path-to-web-root/download/.htaccess
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.* /downloads/handle-downloads.php
/パス・ツー・ウェブルート/ダウンロード/ハンドルダウンロード。 PHP
$url = trim($_SERVER['REQUEST_URI'], '/');
if (preg_match('^#downloads/(?<real_filename>.*?)/(?<options>.*)/(?<fake_filename>.*)$#', $url, $matches)) {
// Double check my regex, but basically pull the real filename from the url here
$actual_file = "/path-to-webroot/f/{$matches['real_filename']}";
$options = explode('/', $matches['options']);
if (in_array('zip', $options)) {
// Handle zip, etc.
}
$fake_filename = $matches['fake_filename'];
if (file_exists($actual_file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($fake_filename).'"');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($actual_file));
readfile($file);
exit;
}
}
その後、代わりにwebsite.com/f/xxx.png/zip/txtているダウンロードリンクを有するので、あなたの代わりにwebsite.com/download/xxx.png/zip/txt/ を行うことができますnew-filename.png。これは、ブラウザがURLの最後にあるものを取るので、あなたが望むものにファイル名を設定できるようになります。
編集:readfile's manual pageの関連コードを記載しました。
これは私のケースに適応できるもののようです、ありがとうございます。 私はそれを試してみて、それが朝の最初のことを行うなら解決してマークします。 –
私はreadfileで画像を表示する際に問題を抱えていますが、あなたの答えは私が実際の質問に答えるのを助けました。私は正しくMIMEプロパティを設定していますが、このページはまだテキスト形式の画像データとして読み込まれていますが、ここで役立つ手がかりは何ですか? :b –
はい、申し訳ありませんが、私の例は非常に一般的かつ最小限です。ファイルに応じて適切なヘッダーを設定する必要があります。おそらく、 'readfile'の代わりに' imagepng'関数を使いたいと思うでしょう:http://php.net/manual/en/function.imagepng.php –