2017-02-09 13 views
1

ファイルのリンクはすべてhttp://website.com/f/xxx.png/zip/txtなどです。
ユーザーがそのファイルをダウンロードした場合、別の名前でダウンロードするように設定する必要があります。
通常のページでこれを行う方法を見てきましたが、イメージ自体がリンクされているときにどのように動作させるかという手がかりはありません。PHP - ユーザーがファイルをダウンロードするときにURLからファイル名を変更する

任意の助けに感謝:)

編集:スティーヴン・ジェフリーズは、ダウンロードは、私が持っていた問題を解決し、他のファイルを作るために、画像や

header('Content-Disposition: attachment; filename=' . $originalFileName . "'"); 
header("Content-Type:" . $mimeType); 

を表示するには、

header('Content-Disposition: inline; filename=' . $originalFileName . "'"); 
header("Content-Type:" . $mimeType); 
$im = imagecreatefrompng($filePathOnServer); 
imagepng($im); 

投稿をリライトを使用します。

答えて

1

私はなど、これを行う簡単な方法は、ダウンロードするにはどのようなハンドルを別のスクリプトへのダウンロードリンクをリダイレクトすることだと思います基本的には、ダウンロードディレクトリを設定し、いくつかの書き換えルールを追加してから、何が出力されるかを処理するスクリプトを作成します。 (未テスト)このような

何か:

/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の関連コードを記載しました。

+0

これは私のケースに適応できるもののようです、ありがとうございます。 私はそれを試してみて、それが朝の最初のことを行うなら解決してマークします。 –

+0

私はreadfileで画像を表示する際に問題を抱えていますが、あなたの答えは私が実際の質問に答えるのを助けました。私は正しくMIMEプロパティを設定していますが、このページはまだテキスト形式の画像データとして読み込まれていますが、ここで役立つ手がかりは何ですか? :b –

+0

はい、申し訳ありませんが、私の例は非常に一般的かつ最小限です。ファイルに応じて適切なヘッダーを設定する必要があります。おそらく、 'readfile'の代わりに' imagepng'関数を使いたいと思うでしょう:http://php.net/manual/en/function.imagepng.php –

0

ヘッダーパラメーターを設定することにより、ファイル応答ファイル名を設定できます。例えば

:PHPヘッダー機能上の

<?php 
header('Content-Type: image/png'); 
header('Content-Disposition: attachment; filename="xyz.png"'); 
header('Content-Description: File Transfer'); 
header('Content-Type: application/octet-stream'); 
... 

よりここに:http://php.net/manual/en/function.header.php

関連する問題