0

サーバーからファイルをダウンロードするためのスクリプトをYiiで作成しようとしています。

ファイルはYiiプロジェクトのウェブルートにあります。

しかし、ファイルが存在しないというエラーが発生するたびに、どこが間違っているかを誰かが確認できますか?

public function actionDownload($id) {
    $audio = Audio::model()->findByPk($id);
    $file =  Yii::getPathOfAlias('webroot') . $audio->path;
    if (file_exists($file)) {
        header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename=' . $audio->path);
        header('Content-Length: ' . filesize($audio->path));
        $audio->downloaded = $audio->downloaded + 1;
        $audio->save();
    }else{
        echo "file not exist: ".$file;            
    }
    exit;
}

私が得たエラーは次のとおりです。

file not exist: /var/www/vhosts/ikhwanbiz.org/httpdocs/userfiles/reklames/media/deneme/sen%20dep%20olmisem.mp3

ありがとう

よろしく

ビリ

4

3 に答える 3

3

ビリ、これは私にとってはうまく機能し、ほとんどのブラウザで問題ないようです。

$filename = 'your_file_name.csv';
header('Content-Disposition: attachment; charset=UTF-8; filename="'.$filename.'"');
$utf8_content = mb_convert_encoding($content, "SJIS", "UTF-8");
echo $utf8_content;
Yii::app()->end();
return;

お役に立てば幸いです。

于 2013-02-20T09:48:51.770 に答える
0

ファイル名部分はURLエンコードされているように見え$audio->pathますが、サーバー上の実際のファイルの名前はそうではありません。ソースで修正する必要があります(そのパスがどこから設定されているかはわかりません)が、それまでの間、簡単な回避策は次のように書くことです。

$file =  Yii::getPathOfAlias('webroot') . urldecode($audio->path);
于 2013-02-20T09:59:56.167 に答える
0

これは、yiiの質問というよりもphpの質問です。

たとえば、

<?php
header("Content-disposition: attachment; filename=huge_document.pdf");
header("Content-type: application/pdf");
readfile("huge_document.pdf");
?>

ソース:http ://webdesign.about.com/od/php/ht/force_download.htm

于 2014-10-01T23:24:37.500 に答える