0

ファイルをダウンロードできるようにヘッダーをプッシュする PHP スクリプトがあります。このスクリプトは、ハイパーリンクまたはリンクを使用してブラウザを介して呼び出された場合に正常に機能します。これは次のようになります。

<a href="download.php?file=test.mp3&properFilename=Testing File">Download</a>

代わりにこれをボタン (sbumit) にしたいので、次のようにしました。

<form action="download.php?file=test.mp3&properFilename=Testing File" method="get">
<input type="submit" value="Download Audio" name="download"/>
</form>

ただし、これは機能しません。それをクリックすると。ダウンロード ダイアログ ボックスが表示されますが、ファイル名が空です。ファイル名は「.mp3」(引用符なし)として表示されます!ハイパーリンクを介した同じリンクには、正確なファイル名「Testing File」が表示されます。どうしてこれなの??関連するPHPスニペットは次のとおりです。

$filename = '../'.$_GET['file'];
$properFilename = $_GET['properFilename'].'.mp3';

header("Content-Disposition: attachment; filename=\"".basename($properFilename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();   

助けてくれてありがとう。これは私を昼夜を問わず怒らせています!!!

4

2 に答える 2

5

アクション URL は URL エンコードされており、ハードコードされた GET パラメータは送信されていないと思います。

アクション URL を単純に download.php に設定して、次のように「file」および「properFilename」パラメーターを含む 2 つの非表示フィールドを設定することができます。

<form action="download.php" method="GET">
  <input type="submit" value="Download Audio" name="download"/>
  <input type="hidden" name="file" value="test.mp3" />
  <input type="hidden" name="properFilename" value="Testing File" />
</form>

または、フォームがなくても、input type="button" を使用できます。

<input type="button" 
      onclick="location.href='download.php?file=test.mp3&properFilename=Testing File';" 
      value="Download"/>

または画像ボタン:

<a href="download.php?file=test.mp3&properFilename=Testing File">
   <img src="IMAGE_BUTTON_HERE" />
</a>
于 2009-01-10T05:24:31.883 に答える
0

CMS が示唆するように <input type='button'> を使用する代わりに、button 要素を使用することもできます (これは、フォームにないため、ここでは実際にはセマンティックに正しいものです)。

<button onclick="document.location = 'bla.php?f=vars'">Download</button>

もちろん、onclickイベントをボタンから別のjavascriptファイルに移動することをお勧めします。

于 2009-01-10T13:30:14.617 に答える