1

ファイル名に & が含まれているファイルの問題をダウンロードします。

たとえば、bla というファイルは正常にダウンロードされますが、bla & Blaaaaa ではファイルが見つかりません。

サーバー上のファイルの名前を変更できないことを回避する方法はありますか?&? それは簡単ですが、不可能です。

ファイルは DB に保存され、取得されて固有の付属物が削除されます。:)

$fileName = $eachFile['filename'];
$fileNamePretty = explode('__', $fileName); // ONLY FILENAME

そして、ダウンロードリンクには次のものがあります:

        <a href="../download.php?filename=<?php echo $fileName?>">

そしてdownload.php

<?php
require 'core/init.php';
$filename = $_GET['filename'];
$dir = "training/trainingDocuments/";
$downloadFilename = $dir.$filename;

//8 - SUBSEA QUESTIONS__51f034ab37a8e.xls
//if the filename exists
if(is_file($downloadFilename)){

//send the headers
header('Pragma: public'); //FIX IE6 Content-Disposition
header('Content-Description: File Transfer');
header('Content-Transder-Encoding: binary');
header(sprintf('Content-Length: %u', filesize($downloadFilename)));
header('Content-type: application/octet-stream');
header("Content-Disposition: attachment; filename=".$downloadFilename."");

readfile($downloadFilename);

$training->addToDownload($filename);//updates download count

}else{
//file doesn't exist
echo "File no exist\n\n";
echo $downloadFilename;

助けてくれてありがとう

4

2 に答える 2

3

メモリが正しく機能する場合、& は、URL エンコーディング関数によって %26 に置き換えられることでエスケープされます。これを使用してみてください:

<a href="../download.php?filename=<?php echo urlencode($fileName); ?>">

それ以外の場合、'&' の後のすべてが get メソッドの 2 番目の引数と見なされます。

于 2013-07-26T17:21:16.713 に答える