2012-04-03 13 views
0

私はPHPを使用してフォルダからファイルをダウンロードするために以下のスクリプトを用意していますが、ローカルで作業していますが、オンラインでダウンロードしてダウンロードしています。PHPはダウンロードの代わりにファイルを読み込んでいます

if($result && count($result) > 0){ 
    $row = $result[0]; 
    $book = true; 
    $Location = './files/'; 
    $bookLocation = $Location . $row['file_name']; // exampe: report.zip 
    if(file_exists($bookLocation)){ 
     $fileLocation = $bookLocation; 
     $file_size = filesize($fileLocation); 
     echo 'Please wait downloading the file....'; 
     header('Content-Description: File Transfer'); 
     header('Content-Type: application/force-download'); 
     header('Content-Disposition: attachment; filename=' . $row['file_name']); 
     header('Content-Transfer-Encoding: binary'); 
     header('Expires: 0'); 
     header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
     header('Pragma: public'); 
     header('Content-Length: ' . $file_size); 
     ob_clean(); 
     flush(); 
     readfile($fileLocation); 
     exit;  
    }else{ 
     echo '<h3>Sorry!, file not found...</h3>'; 
    } 
} 

.htaccessのスクリプトの助けを

RewriteEngine on 

RewriteRule ^$ index.html 
RewriteRule ^index.html$ index.php 

RewriteRule ^([0-9]{1,9})(/)([^/\.]+[^/\.]+)(_+[^/\.]+)(\.html|)/?$ index.php?id=$1&cat=$3 
RewriteRule ^([^/\.]+[^/\.]+)(\.html|)/?$ index.php?page=$1 
RewriteRule ^(.*)(/)([0-9]{1,9})(/)(.*)(\.html|)/?$ index.php?view_file=$3&file=$5 
RewriteRule ^(.*)(/)([0-9]{1,9})(/)(.*)(\.htm)/?$ index.php?download=$3 

RewriteRule ^(author)(/)(.*)(.html)/?$ index.php?user=$1 

感謝。

+0

は、ブラウザからそれを実行していないとライン

header('Content-Type: application/force-download'); 

を交換してみてください? – zod

+0

リンクで新しいファイルを作成しようとしました..このファイルへのリンクは.. ..新しいページを実行してリンクをクリックしようとしました!! – zod

+0

サーバーは最終的にヘッダーを変更しますか? – evotopid

答えて

2

特定のブラウザでは、特定のファイルタイプを自動的にダウンロードして実行するように設定することができます。

この場合、これを「修正」する方法はありません。ブラウザはファイルの処理方法を決定します。ダウンロードするように指示しても、ユーザーが直接実行するように指示した可能性があります。

$file_size = filesize($fileLocation); 
    echo 'Please wait downloading the file....'; 
    header('Content-Description: File Transfer'); 

あなたはそのecho文を削除する必要があります。私の以前のコメントは正しいですが

ビッグ編集

、あなたのコード内で大きな問題を持っています。ヘッダーが送信されないなどの問題を引き起こす可能性があります。あなたの説明を考えて、私はこれがあなたの問題だと言いたい。

一度コンテンツを送信すると、より多くのヘッダーを送信できません。

+0

これはうまくいくはずです** if ** ob_start()が先にあったのでしょうか? – bububaba

+0

彼はcontent-typeとしてバイナリを使用しているので、おそらくこのエコーは問題であり、他のエコーではありません。 – Tei

+0

エコーを取り除いてまだ動作していません... :( –

0

fopen wrappersが有効になっている場合、URLはこの機能でファイル名として使用できます。ファイル名の指定方法の詳細については、fopen()を参照してください。さまざまなラッパーの能力、その使用法に関する注釈、およびそれらが提供する可能性のある定義済みの変数に関する情報へのリンクへのリンクについては、Supported Protocols and Wrappersを参照してください。クリスチャンが示唆したように、私はこのことができます願ってい

は、私はあなたがあなたのコード内のecho文を削除する必要があり、here

+0

これは私が取得したものです: "sAÛ¿371å5±Ý:Ýù\tÛºhëT Vkは/ P

+0

は.htaccessをせずにスクリプトを実行してみてください –

0

でそれを発見しました。それはその後もあなたのために動作しない場合は、ローカルで

header('Content-Type: application/octet-stream'); 
関連する問題